diff options
Diffstat (limited to 'build/buildflag_header.gypi')
-rw-r--r-- | build/buildflag_header.gypi | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/build/buildflag_header.gypi b/build/buildflag_header.gypi new file mode 100644 index 0000000..730ef429 --- /dev/null +++ b/build/buildflag_header.gypi @@ -0,0 +1,118 @@ +# 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_header_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)', + ], + } + ], +} |