tools/ninja: use existing ninja to build ninja

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>
This commit is contained in:
Michael Pratt 2024-08-02 04:02:58 -04:00 committed by Robert Marko
parent 3efedda1da
commit df303c7ef4
3 changed files with 34 additions and 7 deletions

View File

@ -11,15 +11,18 @@ PKG_HASH:=31747ae633213f1eda3842686f83c2aa1412e0f5691d1c14dbbcc67fe7400cea
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

View File

@ -0,0 +1,24 @@
--- 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 = []

View File

@ -33,7 +33,7 @@ Fixes https://github.com/ninja-build/ninja/issues/1139
--- 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',
@ -47,7 +47,7 @@ Fixes https://github.com/ninja-build/ninja/issues/1139
'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:
@ -58,7 +58,7 @@ Fixes https://github.com/ninja-build/ninja/issues/1139
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',