Chromium Code Reviews| 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/clang/clang.gni") | 5 import("//build/config/clang/clang.gni") |
| 6 import("//build/config/nacl/config.gni") | 6 import("//build/config/nacl/config.gni") |
| 7 import("//build/config/sanitizers/sanitizers.gni") | 7 import("//build/config/sanitizers/sanitizers.gni") |
| 8 import("//build/config/v8_target_cpu.gni") | 8 import("//build/config/v8_target_cpu.gni") |
| 9 import("//build/toolchain/cc_wrapper.gni") | 9 import("//build/toolchain/cc_wrapper.gni") |
| 10 import("//build/toolchain/goma.gni") | 10 import("//build/toolchain/goma.gni") |
| 11 import("//build/toolchain/toolchain.gni") | 11 import("//build/toolchain/toolchain.gni") |
| 12 import("//tools/grit/grit_rule.gni") | |
| 13 | 12 |
| 14 # This template defines a toolchain for something that works like gcc | 13 # This template defines a toolchain for something that works like gcc |
| 15 # (including clang). | 14 # (including clang). |
| 16 # | 15 # |
| 17 # It requires the following variables specifying the executables to run: | 16 # It requires the following variables specifying the executables to run: |
| 18 # - ar | 17 # - ar |
| 19 # - cc | 18 # - cc |
| 20 # - cxx | 19 # - cxx |
| 21 # - ld | 20 # - ld |
| 22 # | 21 # |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 213 extra_ldflags = "" | 212 extra_ldflags = "" |
| 214 } | 213 } |
| 215 | 214 |
| 216 # These library switches can apply to all tools below. | 215 # These library switches can apply to all tools below. |
| 217 lib_switch = "-l" | 216 lib_switch = "-l" |
| 218 lib_dir_switch = "-L" | 217 lib_dir_switch = "-L" |
| 219 | 218 |
| 220 # Object files go in this directory. | 219 # Object files go in this directory. |
| 221 object_subdir = "{{target_out_dir}}/{{label_name}}" | 220 object_subdir = "{{target_out_dir}}/{{label_name}}" |
| 222 | 221 |
| 222 android_should_whitelist = defined(enable_resource_whitelist_generation) && | |
| 223 enable_resource_whitelist_generation | |
|
Dirk Pranke
2016/08/29 16:33:00
This should just import("//build/config/android/co
| |
| 224 | |
| 223 tool("cc") { | 225 tool("cc") { |
| 224 whitelist_flag = " " | 226 whitelist_flag = " " |
| 225 if (enable_resource_whitelist_generation) { | 227 if (android_should_whitelist) { |
| 226 whitelist_flag = " --resource-whitelist=\"{{output}}.whitelist\"" | 228 whitelist_flag = " --resource-whitelist=\"{{output}}.whitelist\"" |
| 227 } | 229 } |
| 228 depfile = "{{output}}.d" | 230 depfile = "{{output}}.d" |
| 229 command = "$cc -MMD -MF $depfile ${rebuild_string}{{defines}} {{include_di rs}} {{cflags}} {{cflags_c}}${extra_cppflags}${extra_cflags} -c {{source}} -o {{ output}}" | 231 command = "$cc -MMD -MF $depfile ${rebuild_string}{{defines}} {{include_di rs}} {{cflags}} {{cflags_c}}${extra_cppflags}${extra_cflags} -c {{source}} -o {{ output}}" |
| 230 depsformat = "gcc" | 232 depsformat = "gcc" |
| 231 description = "CC {{output}}" | 233 description = "CC {{output}}" |
| 232 outputs = [ | 234 outputs = [ |
| 233 # The whitelist file is also an output, but ninja does not | 235 # The whitelist file is also an output, but ninja does not |
| 234 # currently support multiple outputs for tool("cc"). | 236 # currently support multiple outputs for tool("cc"). |
| 235 "$object_subdir/{{source_name_part}}.o", | 237 "$object_subdir/{{source_name_part}}.o", |
| 236 ] | 238 ] |
| 237 compile_wrapper = rebase_path("//build/toolchain/gcc_compile_wrapper.py", | 239 compile_wrapper = rebase_path("//build/toolchain/gcc_compile_wrapper.py", |
| 238 root_build_dir) | 240 root_build_dir) |
| 239 command = "$python_path \"$compile_wrapper\"$whitelist_flag $command" | 241 command = "$python_path \"$compile_wrapper\"$whitelist_flag $command" |
| 240 } | 242 } |
| 241 | 243 |
| 242 tool("cxx") { | 244 tool("cxx") { |
| 243 whitelist_flag = " " | 245 whitelist_flag = " " |
| 244 if (enable_resource_whitelist_generation) { | 246 if (android_should_whitelist) { |
| 245 whitelist_flag = " --resource-whitelist=\"{{output}}.whitelist\"" | 247 whitelist_flag = " --resource-whitelist=\"{{output}}.whitelist\"" |
| 246 } | 248 } |
| 247 depfile = "{{output}}.d" | 249 depfile = "{{output}}.d" |
| 248 command = "$cxx -MMD -MF $depfile ${rebuild_string}{{defines}} {{include_d irs}} {{cflags}} {{cflags_cc}}${extra_cppflags}${extra_cxxflags} -c {{source}} - o {{output}}" | 250 command = "$cxx -MMD -MF $depfile ${rebuild_string}{{defines}} {{include_d irs}} {{cflags}} {{cflags_cc}}${extra_cppflags}${extra_cxxflags} -c {{source}} - o {{output}}" |
| 249 depsformat = "gcc" | 251 depsformat = "gcc" |
| 250 description = "CXX {{output}}" | 252 description = "CXX {{output}}" |
| 251 outputs = [ | 253 outputs = [ |
| 252 # The whitelist file is also an output, but ninja does not | 254 # The whitelist file is also an output, but ninja does not |
| 253 # currently support multiple outputs for tool("cxx"). | 255 # currently support multiple outputs for tool("cxx"). |
| 254 "$object_subdir/{{source_name_part}}.o", | 256 "$object_subdir/{{source_name_part}}.o", |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 265 depsformat = "gcc" | 267 depsformat = "gcc" |
| 266 description = "ASM {{output}}" | 268 description = "ASM {{output}}" |
| 267 outputs = [ | 269 outputs = [ |
| 268 "$object_subdir/{{source_name_part}}.o", | 270 "$object_subdir/{{source_name_part}}.o", |
| 269 ] | 271 ] |
| 270 } | 272 } |
| 271 | 273 |
| 272 tool("alink") { | 274 tool("alink") { |
| 273 rspfile = "{{output}}.rsp" | 275 rspfile = "{{output}}.rsp" |
| 274 whitelist_flag = " " | 276 whitelist_flag = " " |
| 275 if (enable_resource_whitelist_generation) { | 277 if (android_should_whitelist) { |
| 276 whitelist_flag = " --resource-whitelist=\"{{output}}.whitelist\"" | 278 whitelist_flag = " --resource-whitelist=\"{{output}}.whitelist\"" |
| 277 } | 279 } |
| 278 | 280 |
| 279 # This needs a Python script to avoid using simple sh features in this | 281 # This needs a Python script to avoid using simple sh features in this |
| 280 # command, in case the host does not use a POSIX shell (e.g. compiling | 282 # command, in case the host does not use a POSIX shell (e.g. compiling |
| 281 # POSIX-like toolchains such as NaCl on Windows). | 283 # POSIX-like toolchains such as NaCl on Windows). |
| 282 ar_wrapper = | 284 ar_wrapper = |
| 283 rebase_path("//build/toolchain/gcc_ar_wrapper.py", root_build_dir) | 285 rebase_path("//build/toolchain/gcc_ar_wrapper.py", root_build_dir) |
| 284 command = "$python_path \"$ar_wrapper\"$whitelist_flag --output={{output}} --ar=\"$ar\" {{arflags}} rcsD @\"$rspfile\"" | 286 command = "$python_path \"$ar_wrapper\"$whitelist_flag --output={{output}} --ar=\"$ar\" {{arflags}} rcsD @\"$rspfile\"" |
| 285 description = "AR {{output}}" | 287 description = "AR {{output}}" |
| 286 rspfile_content = "{{inputs}}" | 288 rspfile_content = "{{inputs}}" |
| 287 outputs = [ | 289 outputs = [ |
| 288 "{{output_dir}}/{{target_output_name}}{{output_extension}}", | 290 "{{output_dir}}/{{target_output_name}}{{output_extension}}", |
| 289 ] | 291 ] |
| 290 | 292 |
| 291 # Shared libraries go in the target out directory by default so we can | 293 # Shared libraries go in the target out directory by default so we can |
| 292 # generate different targets with the same name and not have them collide. | 294 # generate different targets with the same name and not have them collide. |
| 293 default_output_dir = "{{target_out_dir}}" | 295 default_output_dir = "{{target_out_dir}}" |
| 294 default_output_extension = ".a" | 296 default_output_extension = ".a" |
| 295 output_prefix = "lib" | 297 output_prefix = "lib" |
| 296 } | 298 } |
| 297 | 299 |
| 298 tool("solink") { | 300 tool("solink") { |
| 299 soname = "{{target_output_name}}{{output_extension}}" # e.g. "libfoo.so". | 301 soname = "{{target_output_name}}{{output_extension}}" # e.g. "libfoo.so". |
| 300 sofile = "{{output_dir}}/$soname" # Possibly including toolchain dir. | 302 sofile = "{{output_dir}}/$soname" # Possibly including toolchain dir. |
| 301 rspfile = sofile + ".rsp" | 303 rspfile = sofile + ".rsp" |
| 302 pool = "//build/toolchain:link_pool($default_toolchain)" | 304 pool = "//build/toolchain:link_pool($default_toolchain)" |
| 303 whitelist_flag = " " | 305 whitelist_flag = " " |
| 304 if (enable_resource_whitelist_generation) { | 306 if (android_should_whitelist) { |
| 305 whitelist_file = "$sofile.whitelist" | 307 whitelist_file = "$sofile.whitelist" |
| 306 whitelist_flag = " --resource-whitelist=\"$whitelist_file\"" | 308 whitelist_flag = " --resource-whitelist=\"$whitelist_file\"" |
| 307 } | 309 } |
| 308 | 310 |
| 309 if (defined(invoker.strip)) { | 311 if (defined(invoker.strip)) { |
| 310 unstripped_sofile = "{{root_out_dir}}/lib.unstripped/$soname" | 312 unstripped_sofile = "{{root_out_dir}}/lib.unstripped/$soname" |
| 311 } else { | 313 } else { |
| 312 unstripped_sofile = sofile | 314 unstripped_sofile = sofile |
| 313 } | 315 } |
| 314 | 316 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 353 # Ninja to check if the timestamp actually changed to know if downstream | 355 # Ninja to check if the timestamp actually changed to know if downstream |
| 354 # dependencies should be recompiled. | 356 # dependencies should be recompiled. |
| 355 restat = true | 357 restat = true |
| 356 | 358 |
| 357 # Tell GN about the output files. It will link to the sofile but use the | 359 # Tell GN about the output files. It will link to the sofile but use the |
| 358 # tocfile for dependency management. | 360 # tocfile for dependency management. |
| 359 outputs = [ | 361 outputs = [ |
| 360 sofile, | 362 sofile, |
| 361 tocfile, | 363 tocfile, |
| 362 ] | 364 ] |
| 363 if (enable_resource_whitelist_generation) { | 365 if (android_should_whitelist) { |
| 364 outputs += [ whitelist_file ] | 366 outputs += [ whitelist_file ] |
| 365 } | 367 } |
| 366 if (sofile != unstripped_sofile) { | 368 if (sofile != unstripped_sofile) { |
| 367 outputs += [ unstripped_sofile ] | 369 outputs += [ unstripped_sofile ] |
| 368 } | 370 } |
| 369 link_output = sofile | 371 link_output = sofile |
| 370 depend_output = tocfile | 372 depend_output = tocfile |
| 371 } | 373 } |
| 372 | 374 |
| 373 tool("solink_module") { | 375 tool("solink_module") { |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 496 forward_variables_from(invoker, [ "strip" ]) | 498 forward_variables_from(invoker, [ "strip" ]) |
| 497 | 499 |
| 498 toolchain_args = { | 500 toolchain_args = { |
| 499 if (defined(invoker.toolchain_args)) { | 501 if (defined(invoker.toolchain_args)) { |
| 500 forward_variables_from(invoker.toolchain_args, "*") | 502 forward_variables_from(invoker.toolchain_args, "*") |
| 501 } | 503 } |
| 502 is_clang = true | 504 is_clang = true |
| 503 } | 505 } |
| 504 } | 506 } |
| 505 } | 507 } |
| OLD | NEW |