Add methods to skip the building and execution of Ninja by python
in order to allow Make to execute Ninja after the configure script.
This allows the user to build Ninja only once
if they already have an older version of Ninja built.
It also allows the user to test the jobserver functionality
by having Ninja built twice (clean then compile).
Signed-off-by: Michael Pratt <mcpratt@pm.me>
Link: https://github.com/openwrt/openwrt/pull/16693
Signed-off-by: Robert Marko <robimarko@gmail.com>
include $(INCLUDE_DIR)/host-build.mk
define Host/Configure
-endef
-
-define Host/Compile
cd $(HOST_BUILD_DIR) && \
$(HOST_MAKE_VARS) \
CXX="$(HOSTCXX_NOCACHE)" \
$(STAGING_DIR_HOST)/bin/$(PYTHON) configure.py \
- --bootstrap \
+ $(if $(shell $(STAGING_DIR_HOST)/bin/ninja --version),,--bootstrap) \
+ --no-rebuild \
--verbose
+ -$(Host/Install)
+endef
+
+define Host/Compile
+ +$(NINJA) -C $(HOST_BUILD_DIR)
endef
define Host/Install
--- /dev/null
+--- a/configure.py
++++ b/configure.py
+@@ -201,6 +201,8 @@ parser = OptionParser()
+ profilers = ['gmon', 'pprof']
+ parser.add_option('--bootstrap', action='store_true',
+ help='bootstrap a ninja binary from nothing')
++parser.add_option('--no-rebuild', action='store_true',
++ help='let user execute ninja after build.ninja generation')
+ parser.add_option('--verbose', action='store_true',
+ help='enable verbose build')
+ parser.add_option('--platform',
+@@ -693,7 +695,11 @@ n.build('all', 'phony', all_targets)
+ n.close()
+ print('wrote %s.' % BUILD_FILENAME)
+
+-if options.bootstrap:
++if options.bootstrap and options.no_rebuild:
++ print('bootstrap complete. execute ninja in this directory...')
++ print(os.getcwd())
++
++elif options.bootstrap:
+ print('bootstrap complete. rebuilding...')
+
+ rebuild_args = []
--- a/configure.py
+++ b/configure.py
-@@ -517,11 +517,13 @@ for name in ['build',
+@@ -519,11 +519,13 @@ for name in ['build',
'state',
'status',
'string_piece_util',
'includes_normalize-win32',
'msvc_helper-win32',
'msvc_helper_main-win32']:
-@@ -530,7 +532,9 @@ if platform.is_windows():
+@@ -532,7 +534,9 @@ if platform.is_windows():
objs += cxx('minidump-win32', variables=cxxvariables)
objs += cc('getopt')
else:
if platform.is_aix():
objs += cc('getopt')
if platform.is_msvc():
-@@ -588,6 +592,7 @@ for name in ['build_log_test',
+@@ -590,6 +594,7 @@ for name in ['build_log_test',
'string_piece_util_test',
'subprocess_test',
'test',