xref: /aosp_15_r20/external/cronet/build/config/linux/pkg_config.gni (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker# Copyright 2013 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Workerimport("//build/config/sysroot.gni")
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker# Defines a config specifying the result of running pkg-config for the given
8*6777b538SAndroid Build Coastguard Worker# packages. Put the package names you want to query in the "packages" variable
9*6777b538SAndroid Build Coastguard Worker# inside the template invocation.
10*6777b538SAndroid Build Coastguard Worker#
11*6777b538SAndroid Build Coastguard Worker# You can also add defines via the "defines" variable. This can be useful to
12*6777b538SAndroid Build Coastguard Worker# add this to the config to pass defines that the library expects to get by
13*6777b538SAndroid Build Coastguard Worker# users of its headers.
14*6777b538SAndroid Build Coastguard Worker#
15*6777b538SAndroid Build Coastguard Worker# Example:
16*6777b538SAndroid Build Coastguard Worker#   pkg_config("mything") {
17*6777b538SAndroid Build Coastguard Worker#     packages = [ "mything1", "mything2" ]
18*6777b538SAndroid Build Coastguard Worker#     defines = [ "ENABLE_AWESOME" ]
19*6777b538SAndroid Build Coastguard Worker#   }
20*6777b538SAndroid Build Coastguard Worker#
21*6777b538SAndroid Build Coastguard Worker# You can also use "extra args" to filter out results (see pkg-config.py):
22*6777b538SAndroid Build Coastguard Worker#   extra_args = [ "-v, "foo" ]
23*6777b538SAndroid Build Coastguard Worker# To ignore libs and ldflags (only cflags/defines will be set, which is useful
24*6777b538SAndroid Build Coastguard Worker# when doing manual dynamic linking), set:
25*6777b538SAndroid Build Coastguard Worker#   ignore_libs = true
26*6777b538SAndroid Build Coastguard Worker
27*6777b538SAndroid Build Coastguard Workerdeclare_args() {
28*6777b538SAndroid Build Coastguard Worker  # A pkg-config wrapper to call instead of trying to find and call the right
29*6777b538SAndroid Build Coastguard Worker  # pkg-config directly. Wrappers like this are common in cross-compilation
30*6777b538SAndroid Build Coastguard Worker  # environments.
31*6777b538SAndroid Build Coastguard Worker  # Leaving it blank defaults to searching PATH for 'pkg-config' and relying on
32*6777b538SAndroid Build Coastguard Worker  # the sysroot mechanism to find the right .pc files.
33*6777b538SAndroid Build Coastguard Worker  pkg_config = ""
34*6777b538SAndroid Build Coastguard Worker
35*6777b538SAndroid Build Coastguard Worker  # A optional pkg-config wrapper to use for tools built on the host.
36*6777b538SAndroid Build Coastguard Worker  host_pkg_config = ""
37*6777b538SAndroid Build Coastguard Worker
38*6777b538SAndroid Build Coastguard Worker  # CrOS systemroots place pkgconfig files at <systemroot>/usr/share/pkgconfig
39*6777b538SAndroid Build Coastguard Worker  # and one of <systemroot>/usr/lib/pkgconfig or <systemroot>/usr/lib64/pkgconfig
40*6777b538SAndroid Build Coastguard Worker  # depending on whether the systemroot is for a 32 or 64 bit architecture.
41*6777b538SAndroid Build Coastguard Worker  #
42*6777b538SAndroid Build Coastguard Worker  # When build under GYP, CrOS board builds specify the 'system_libdir' variable
43*6777b538SAndroid Build Coastguard Worker  # as part of the GYP_DEFINES provided by the CrOS emerge build or simple
44*6777b538SAndroid Build Coastguard Worker  # chrome build scheme. This variable permits controlling this for GN builds
45*6777b538SAndroid Build Coastguard Worker  # in similar fashion by setting the `system_libdir` variable in the build's
46*6777b538SAndroid Build Coastguard Worker  # args.gn file to 'lib' or 'lib64' as appropriate for the target architecture.
47*6777b538SAndroid Build Coastguard Worker  system_libdir = "lib"
48*6777b538SAndroid Build Coastguard Worker}
49*6777b538SAndroid Build Coastguard Worker
50*6777b538SAndroid Build Coastguard Workerpkg_config_script = "//build/config/linux/pkg-config.py"
51*6777b538SAndroid Build Coastguard Worker
52*6777b538SAndroid Build Coastguard Worker# Define the args we pass to the pkg-config script for other build files that
53*6777b538SAndroid Build Coastguard Worker# need to invoke it manually.
54*6777b538SAndroid Build Coastguard Workerpkg_config_args = []
55*6777b538SAndroid Build Coastguard Worker
56*6777b538SAndroid Build Coastguard Workercommon_pkg_config_args = []
57*6777b538SAndroid Build Coastguard Workerif (sysroot != "") {
58*6777b538SAndroid Build Coastguard Worker  # Pass the sysroot if we're using one (it requires the CPU arch also).
59*6777b538SAndroid Build Coastguard Worker  common_pkg_config_args += [
60*6777b538SAndroid Build Coastguard Worker    "-s",
61*6777b538SAndroid Build Coastguard Worker    rebase_path(sysroot),
62*6777b538SAndroid Build Coastguard Worker    "-a",
63*6777b538SAndroid Build Coastguard Worker    current_cpu,
64*6777b538SAndroid Build Coastguard Worker  ]
65*6777b538SAndroid Build Coastguard Worker}
66*6777b538SAndroid Build Coastguard Worker
67*6777b538SAndroid Build Coastguard Workerif (pkg_config != "") {
68*6777b538SAndroid Build Coastguard Worker  pkg_config_args += [
69*6777b538SAndroid Build Coastguard Worker    "-p",
70*6777b538SAndroid Build Coastguard Worker    pkg_config,
71*6777b538SAndroid Build Coastguard Worker  ]
72*6777b538SAndroid Build Coastguard Worker}
73*6777b538SAndroid Build Coastguard Worker
74*6777b538SAndroid Build Coastguard Worker# Only use the custom libdir when building with the target sysroot.
75*6777b538SAndroid Build Coastguard Workerif (target_sysroot != "" && sysroot == target_sysroot) {
76*6777b538SAndroid Build Coastguard Worker  pkg_config_args += [
77*6777b538SAndroid Build Coastguard Worker    "--system_libdir",
78*6777b538SAndroid Build Coastguard Worker    system_libdir,
79*6777b538SAndroid Build Coastguard Worker  ]
80*6777b538SAndroid Build Coastguard Worker}
81*6777b538SAndroid Build Coastguard Worker
82*6777b538SAndroid Build Coastguard Workerif (host_pkg_config != "") {
83*6777b538SAndroid Build Coastguard Worker  host_pkg_config_args = [
84*6777b538SAndroid Build Coastguard Worker    "-p",
85*6777b538SAndroid Build Coastguard Worker    host_pkg_config,
86*6777b538SAndroid Build Coastguard Worker  ]
87*6777b538SAndroid Build Coastguard Worker} else {
88*6777b538SAndroid Build Coastguard Worker  host_pkg_config_args = pkg_config_args
89*6777b538SAndroid Build Coastguard Worker}
90*6777b538SAndroid Build Coastguard Worker
91*6777b538SAndroid Build Coastguard Workertemplate("pkg_config") {
92*6777b538SAndroid Build Coastguard Worker  assert(defined(invoker.packages),
93*6777b538SAndroid Build Coastguard Worker         "Variable |packages| must be defined to be a list in pkg_config.")
94*6777b538SAndroid Build Coastguard Worker  config(target_name) {
95*6777b538SAndroid Build Coastguard Worker    if (host_toolchain == current_toolchain) {
96*6777b538SAndroid Build Coastguard Worker      args = common_pkg_config_args + host_pkg_config_args + invoker.packages
97*6777b538SAndroid Build Coastguard Worker    } else {
98*6777b538SAndroid Build Coastguard Worker      args = common_pkg_config_args + pkg_config_args + invoker.packages
99*6777b538SAndroid Build Coastguard Worker    }
100*6777b538SAndroid Build Coastguard Worker    if (defined(invoker.extra_args)) {
101*6777b538SAndroid Build Coastguard Worker      args += invoker.extra_args
102*6777b538SAndroid Build Coastguard Worker    }
103*6777b538SAndroid Build Coastguard Worker
104*6777b538SAndroid Build Coastguard Worker    pkgresult = exec_script(pkg_config_script, args, "json")
105*6777b538SAndroid Build Coastguard Worker    cflags = pkgresult[1]
106*6777b538SAndroid Build Coastguard Worker
107*6777b538SAndroid Build Coastguard Worker    foreach(include, pkgresult[0]) {
108*6777b538SAndroid Build Coastguard Worker      # We want the system include paths to use -isystem instead of -I to
109*6777b538SAndroid Build Coastguard Worker      # suppress warnings in those headers.
110*6777b538SAndroid Build Coastguard Worker      if (use_sysroot) {
111*6777b538SAndroid Build Coastguard Worker        include_relativized = rebase_path(include, root_build_dir)
112*6777b538SAndroid Build Coastguard Worker        cflags += [ "-isystem$include_relativized" ]
113*6777b538SAndroid Build Coastguard Worker      } else {
114*6777b538SAndroid Build Coastguard Worker        cflags += [ "-isystem$include" ]
115*6777b538SAndroid Build Coastguard Worker      }
116*6777b538SAndroid Build Coastguard Worker    }
117*6777b538SAndroid Build Coastguard Worker
118*6777b538SAndroid Build Coastguard Worker    if (!defined(invoker.ignore_libs) || !invoker.ignore_libs) {
119*6777b538SAndroid Build Coastguard Worker      libs = pkgresult[2]
120*6777b538SAndroid Build Coastguard Worker      lib_dirs = pkgresult[3]
121*6777b538SAndroid Build Coastguard Worker    }
122*6777b538SAndroid Build Coastguard Worker
123*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker,
124*6777b538SAndroid Build Coastguard Worker                           [
125*6777b538SAndroid Build Coastguard Worker                             "defines",
126*6777b538SAndroid Build Coastguard Worker                             "visibility",
127*6777b538SAndroid Build Coastguard Worker                           ])
128*6777b538SAndroid Build Coastguard Worker  }
129*6777b538SAndroid Build Coastguard Worker}
130