diff --git a/build/fbcode_builder/getdeps.py b/build/fbcode_builder/getdeps.py index b72447d7e..6ee7fa7ac 100755 --- a/build/fbcode_builder/getdeps.py +++ b/build/fbcode_builder/getdeps.py @@ -7,6 +7,7 @@ from __future__ import absolute_import, division, print_function, unicode_literals import argparse +import json import os import shutil import subprocess @@ -500,6 +501,12 @@ class BuildCmd(ProjectCmdBase): if dep_build: sources_changed = True + extra_cmake_defines = ( + json.loads(args.extra_cmake_defines) + if args.extra_cmake_defines + else {} + ) + if sources_changed or reconfigure or not os.path.exists(built_marker): if os.path.exists(built_marker): os.unlink(built_marker) @@ -512,6 +519,7 @@ class BuildCmd(ProjectCmdBase): ctx, loader, final_install_prefix=loader.get_project_install_prefix(m), + extra_cmake_defines=extra_cmake_defines, ) builder.build(install_dirs, reconfigure=reconfigure) @@ -639,6 +647,14 @@ class BuildCmd(ProjectCmdBase): parser.add_argument( "--schedule-type", help="Indicates how the build was activated" ) + parser.add_argument( + "--extra-cmake-defines", + help=( + "Input json map that contains extra cmake defines to be used " + "when compiling the current project and all its deps. " + 'e.g: \'{"CMAKE_CXX_FLAGS": "--bla"}\'' + ), + ) @cmd("fixup-dyn-deps", "Adjusts dynamic dependencies for packaging purposes") diff --git a/build/fbcode_builder/getdeps/builder.py b/build/fbcode_builder/getdeps/builder.py index 7012256a7..f50f374fa 100644 --- a/build/fbcode_builder/getdeps/builder.py +++ b/build/fbcode_builder/getdeps/builder.py @@ -387,6 +387,7 @@ if __name__ == "__main__": inst_dir, defines, final_install_prefix=None, + extra_cmake_defines=None, ): super(CMakeBuilder, self).__init__( build_opts, @@ -398,6 +399,8 @@ if __name__ == "__main__": final_install_prefix=final_install_prefix, ) self.defines = defines or {} + if extra_cmake_defines: + self.defines.update(extra_cmake_defines) def _invalidate_cache(self): for name in [ diff --git a/build/fbcode_builder/getdeps/buildopts.py b/build/fbcode_builder/getdeps/buildopts.py index 8620c8126..993a3ba01 100644 --- a/build/fbcode_builder/getdeps/buildopts.py +++ b/build/fbcode_builder/getdeps/buildopts.py @@ -436,6 +436,10 @@ def setup_build_options(args, host_type=None): if not is_windows(): scratch_dir = os.path.realpath(scratch_dir) + # Save any extra cmake defines passed by the user in an env variable, so it + # can be used while hashing this build. + os.environ["GETDEPS_CMAKE_DEFINES"] = getattr(args, "extra_cmake_defines", "") or "" + host_type = _check_host_type(args, host_type) return BuildOptions( diff --git a/build/fbcode_builder/getdeps/load.py b/build/fbcode_builder/getdeps/load.py index 40685511c..22b653dea 100644 --- a/build/fbcode_builder/getdeps/load.py +++ b/build/fbcode_builder/getdeps/load.py @@ -275,7 +275,14 @@ class ManifestLoader(object): env["os"] = self.build_opts.host_type.ostype env["distro"] = self.build_opts.host_type.distro env["distro_vers"] = self.build_opts.host_type.distrovers - for name in ["CXXFLAGS", "CPPFLAGS", "LDFLAGS", "CXX", "CC"]: + for name in [ + "CXXFLAGS", + "CPPFLAGS", + "LDFLAGS", + "CXX", + "CC", + "GETDEPS_CMAKE_DEFINES", + ]: env[name] = os.environ.get(name) for tool in ["cc", "c++", "gcc", "g++", "clang", "clang++"]: env["tool-%s" % tool] = path_search(os.environ, tool) diff --git a/build/fbcode_builder/getdeps/manifest.py b/build/fbcode_builder/getdeps/manifest.py index 1e1526dcf..2c0ddecf4 100644 --- a/build/fbcode_builder/getdeps/manifest.py +++ b/build/fbcode_builder/getdeps/manifest.py @@ -420,6 +420,7 @@ class ManifestParser(object): ctx, loader, final_install_prefix=None, + extra_cmake_defines=None, ): builder = self.get("build", "builder", ctx=ctx) if not builder: @@ -472,6 +473,7 @@ class ManifestParser(object): inst_dir, defines, final_install_prefix, + extra_cmake_defines, ) if builder == "python-wheel":