| # Copyright 2015 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # Generates a header with preprocessor defines specified by the build file. |
| # |
| # The canonical documentation is in build/buildflag_header.gni. You should |
| # write the GN build, get it working, and then transform it into GYP. |
| # |
| # In every target that uses your generated header you must include a dependency |
| # on the GYP target that generates the header (this is implicit in GN). |
| # Otherwise, clean builds may not necessarily create the header before the |
| # source code is compiled. |
| # |
| # Assuming your GN code looks like this: |
| # |
| # buildflag_header("foo_features") { |
| # header = "foo_features.h" |
| # flags = [ |
| # "ENABLE_DOOM_MELON=$enable_doom_melon", |
| # "ENABLE_SPACE_LASER=true", |
| # "SPAM_SERVER_URL=\"http://www.example.com/\"", |
| # ] |
| # } |
| # |
| # Write a GYP target like this: |
| # |
| # { |
| # # GN version: //foo:foo_features |
| # 'target_name': 'foo_foo_features', |
| # 'includes': [ '../build/buildflag_header.gypi' ], |
| # 'variables': { |
| # 'buildflag_header_path': 'foo/foo_features.h', |
| # 'buildflag_flags': [ |
| # 'ENABLE_DOOM_MELON=<(enable_doom_melon)', |
| # 'ENABLE_SPACE_LASER=true', |
| # 'SPAM_SERVER_URL="http://www.example.com/"', |
| # ], |
| # }, |
| # } |
| # |
| # Variables |
| # |
| # target_name |
| # Base this on the GN label, replacing / and : with _ to make it globally |
| # unique. |
| # |
| # buildflag_header_path |
| # This must be the full path to the header from the source root. In GN |
| # you only say "features.h" and it uses the BUILD file's path implicitly. |
| # Use the path to BUILD.gn followed by your header name to produce the |
| # same output file. |
| # |
| # buildflag_flags (optional) |
| # List of the same format as GN's "flags". To expand variables, use |
| # "<(foo)" where GN would have used "$foo". |
| # |
| # includes |
| # List the relative path to build/buildflag_header.gypi from the .gyp |
| # file including this code, Note: If your code is in a .gypi file in a |
| # different directory, this must be relative to the .gyp including your |
| # file. |
| # |
| # |
| # Grit defines |
| # |
| # Follow the same advice as in the buildflag_header.gni, except on the grit |
| # action use the variable name 'grit_additional_defines' and explicitly add a |
| # '-D' in front: |
| # |
| # 'grit_grd_file': 'foo.grd', |
| # 'grit_additional_defines': [ |
| # '-D', 'enable_doom_melon=<(enable_doom_melon)', |
| # ], |
| # |
| # Put shared lists of defines in a .gypi. |
| |
| { |
| 'type': 'none', |
| 'hard_dependency': 1, |
| |
| 'actions': [ |
| { |
| 'action_name': 'buildflag_header', |
| 'variables': { |
| # Default these values to empty if they're not defined. |
| 'variables': { |
| 'buildflag_flags%': [], |
| }, |
| |
| # Writes the flags to a response file with a name based on the name of |
| # this target. |
| 'response_file_name': '<|(<(_target_name)_buildflag_header.rsp --flags <@(buildflag_flags))', |
| |
| 'build_header_script': '<(DEPTH)/build/write_buildflag_header.py', |
| }, |
| |
| 'message': 'Generating build header.', |
| |
| 'inputs': [ |
| '<(build_header_script)', |
| '<(response_file_name)', |
| ], |
| |
| 'outputs': [ |
| '<(SHARED_INTERMEDIATE_DIR)/<(buildflag_header_path)', |
| ], |
| |
| 'action': [ |
| 'python', '<(build_header_script)', |
| '--output', '<(buildflag_header_path)', |
| '--rulename', '<(_target_name)', |
| '--gen-dir', '<(SHARED_INTERMEDIATE_DIR)', |
| '--definitions', '<(response_file_name)', |
| ], |
| } |
| ], |
| |
| # Allow the file to be included based on the given buildflag_header_path. |
| 'direct_dependent_settings': { |
| 'include_dirs': [ '<(SHARED_INTERMEDIATE_DIR)' ], |
| }, |
| } |