From 933cec195fe8df3b3b4f4cc96c6c8adbd860f050 Mon Sep 17 00:00:00 2001 From: Wez Furlong Date: Fri, 3 May 2019 15:52:39 -0700 Subject: [PATCH] fbcode_builder: getdeps: add NinjaBootstrap builder Summary: this builder is used to bootstrap the ninja build tool. On Windows and mac the manifest for ninja is set to download a pre-built executable. While pre-built executables are available for linux they aren't portable enough for our purposes so we need to be able to build it for ourselves. Reviewed By: simpkins Differential Revision: D14690992 fbshipit-source-id: b60fd02ad04f58dc7c2931280341791270609737 --- build/fbcode_builder/getdeps/builder.py | 18 ++++++++++++++++++ build/fbcode_builder/getdeps/manifest.py | 7 ++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/build/fbcode_builder/getdeps/builder.py b/build/fbcode_builder/getdeps/builder.py index 6795ca36f..c4bd80705 100644 --- a/build/fbcode_builder/getdeps/builder.py +++ b/build/fbcode_builder/getdeps/builder.py @@ -11,6 +11,7 @@ from __future__ import absolute_import, division, print_function, unicode_litera import glob import os import shutil +import sys from .envfuncs import Env, add_path_entry, path_search from .runcmd import run_cmd @@ -220,3 +221,20 @@ class CMakeBuilder(BuilderBase): ], env=env, ) + + +class NinjaBootstrap(BuilderBase): + def __init__(self, build_opts, ctx, manifest, build_dir, src_dir, inst_dir): + super(NinjaBootstrap, self).__init__( + build_opts, ctx, manifest, src_dir, build_dir, inst_dir + ) + + def _build(self, install_dirs, reconfigure): + self._run_cmd([sys.executable, "configure.py", "--bootstrap"], cwd=self.src_dir) + src_ninja = os.path.join(self.src_dir, "ninja") + dest_ninja = os.path.join(self.inst_dir, "bin/ninja") + bin_dir = os.path.dirname(dest_ninja) + if not os.path.exists(bin_dir): + os.makedirs(bin_dir) + shutil.copyfile(src_ninja, dest_ninja) + shutil.copymode(src_ninja, dest_ninja) diff --git a/build/fbcode_builder/getdeps/manifest.py b/build/fbcode_builder/getdeps/manifest.py index 8d3b5c837..9b7f82373 100644 --- a/build/fbcode_builder/getdeps/manifest.py +++ b/build/fbcode_builder/getdeps/manifest.py @@ -10,7 +10,7 @@ from __future__ import absolute_import, division, print_function, unicode_litera import io -from .builder import AutoconfBuilder, CMakeBuilder, MakeBuilder +from .builder import AutoconfBuilder, CMakeBuilder, MakeBuilder, NinjaBootstrap from .expr import parse_expr from .fetcher import ( ArchiveFetcher, @@ -318,4 +318,9 @@ class ManifestParser(object): build_options, ctx, self, src_dir, build_dir, inst_dir, defines ) + if builder == "ninja_bootstrap": + return NinjaBootstrap( + build_options, ctx, self, build_dir, src_dir, inst_dir + ) + raise KeyError("project %s has no known builder" % (self.name))