OLD | NEW |
1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import("//build/config/sysroot.gni") | 5 import("//build/config/sysroot.gni") |
6 | 6 |
7 # Defines a config specifying the result of running pkg-config for the given | 7 # Defines a config specifying the result of running pkg-config for the given |
8 # packages. Put the package names you want to query in the "packages" variable | 8 # packages. Put the package names you want to query in the "packages" variable |
9 # inside the template invocation. | 9 # inside the template invocation. |
10 # | 10 # |
(...skipping 14 matching lines...) Expand all Loading... |
25 # ignore_libs = true | 25 # ignore_libs = true |
26 | 26 |
27 declare_args() { | 27 declare_args() { |
28 # A pkg-config wrapper to call instead of trying to find and call the right | 28 # A pkg-config wrapper to call instead of trying to find and call the right |
29 # pkg-config directly. Wrappers like this are common in cross-compilation | 29 # pkg-config directly. Wrappers like this are common in cross-compilation |
30 # environments. | 30 # environments. |
31 # Leaving it blank defaults to searching PATH for 'pkg-config' and relying on | 31 # Leaving it blank defaults to searching PATH for 'pkg-config' and relying on |
32 # the sysroot mechanism to find the right .pc files. | 32 # the sysroot mechanism to find the right .pc files. |
33 pkg_config = "" | 33 pkg_config = "" |
34 | 34 |
| 35 # A optional pkg-config wrapper to use for tools built on the host. |
| 36 host_pkg_config = "" |
| 37 |
35 # CrOS systemroots place pkgconfig files at <systemroot>/usr/share/pkgconfig | 38 # CrOS systemroots place pkgconfig files at <systemroot>/usr/share/pkgconfig |
36 # and one of <systemroot>/usr/lib/pkgconfig or <systemroot>/usr/lib64/pkgconfi
g | 39 # and one of <systemroot>/usr/lib/pkgconfig or <systemroot>/usr/lib64/pkgconfi
g |
37 # depending on whether the systemroot is for a 32 or 64 bit architecture. | 40 # depending on whether the systemroot is for a 32 or 64 bit architecture. |
38 # | 41 # |
39 # When build under GYP, CrOS board builds specify the 'system_libdir' variable | 42 # When build under GYP, CrOS board builds specify the 'system_libdir' variable |
40 # as part of the GYP_DEFINES provided by the CrOS emerge build or simple | 43 # as part of the GYP_DEFINES provided by the CrOS emerge build or simple |
41 # chrome build scheme. This variable permits controlling this for GN builds | 44 # chrome build scheme. This variable permits controlling this for GN builds |
42 # in similar fashion by setting the `system_libdir` variable in the build's | 45 # in similar fashion by setting the `system_libdir` variable in the build's |
43 # args.gn file to 'lib' or 'lib64' as appropriate for the target architecture. | 46 # args.gn file to 'lib' or 'lib64' as appropriate for the target architecture. |
44 system_libdir = "lib" | 47 system_libdir = "lib" |
(...skipping 21 matching lines...) Expand all Loading... |
66 } | 69 } |
67 | 70 |
68 # Only use the custom libdir when building with the target sysroot. | 71 # Only use the custom libdir when building with the target sysroot. |
69 if (target_sysroot != "" && sysroot == target_sysroot) { | 72 if (target_sysroot != "" && sysroot == target_sysroot) { |
70 pkg_config_args += [ | 73 pkg_config_args += [ |
71 "--system_libdir", | 74 "--system_libdir", |
72 system_libdir, | 75 system_libdir, |
73 ] | 76 ] |
74 } | 77 } |
75 | 78 |
| 79 if (host_pkg_config != "") { |
| 80 host_pkg_config_args = [ |
| 81 "-p", |
| 82 host_pkg_config, |
| 83 ] |
| 84 } else { |
| 85 host_pkg_config_args = pkg_config_args |
| 86 } |
| 87 |
76 template("pkg_config") { | 88 template("pkg_config") { |
77 assert(defined(invoker.packages), | 89 assert(defined(invoker.packages), |
78 "Variable |packages| must be defined to be a list in pkg_config.") | 90 "Variable |packages| must be defined to be a list in pkg_config.") |
79 config(target_name) { | 91 config(target_name) { |
80 args = pkg_config_args + invoker.packages | 92 if (host_toolchain == current_toolchain) { |
| 93 args = host_pkg_config_args + invoker.packages |
| 94 } else { |
| 95 args = pkg_config_args + invoker.packages |
| 96 } |
81 if (defined(invoker.extra_args)) { | 97 if (defined(invoker.extra_args)) { |
82 args += invoker.extra_args | 98 args += invoker.extra_args |
83 } | 99 } |
84 | 100 |
85 pkgresult = exec_script(pkg_config_script, args, "value") | 101 pkgresult = exec_script(pkg_config_script, args, "value") |
86 include_dirs = pkgresult[0] | 102 include_dirs = pkgresult[0] |
87 cflags = pkgresult[1] | 103 cflags = pkgresult[1] |
88 | 104 |
89 if (!defined(invoker.ignore_libs) || !invoker.ignore_libs) { | 105 if (!defined(invoker.ignore_libs) || !invoker.ignore_libs) { |
90 libs = pkgresult[2] | 106 libs = pkgresult[2] |
91 lib_dirs = pkgresult[3] | 107 lib_dirs = pkgresult[3] |
92 ldflags = pkgresult[4] | 108 ldflags = pkgresult[4] |
93 } | 109 } |
94 | 110 |
95 forward_variables_from(invoker, | 111 forward_variables_from(invoker, |
96 [ | 112 [ |
97 "defines", | 113 "defines", |
98 "visibility", | 114 "visibility", |
99 ]) | 115 ]) |
100 } | 116 } |
101 } | 117 } |
OLD | NEW |