Skip to content

Commit

Permalink
tools/ninja: use existing ninja to build ninja
Browse files Browse the repository at this point in the history
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 <[email protected]>
Link: openwrt#16693
Signed-off-by: Robert Marko <[email protected]>
  • Loading branch information
mcprat authored and robimarko committed Oct 14, 2024
1 parent 3efedda commit df303c7
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 7 deletions.
11 changes: 7 additions & 4 deletions tools/ninja/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
24 changes: 24 additions & 0 deletions tools/ninja/patches/010-bootstrap-configure-only.patch
Original file line number Diff line number Diff line change
@@ -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 = []
6 changes: 3 additions & 3 deletions tools/ninja/patches/100-make_jobserver_support.patch
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand All @@ -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:
Expand All @@ -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',
Expand Down

0 comments on commit df303c7

Please sign in to comment.