Browse Source

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 <[email protected]>
Link: https://github.com/openwrt/openwrt/pull/16693
Signed-off-by: Robert Marko <[email protected]>
Michael Pratt 1 year ago
parent
commit
df303c7ef4

+ 7 - 4
tools/ninja/Makefile

@@ -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

+ 24 - 0
tools/ninja/patches/010-bootstrap-configure-only.patch

@@ -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 = []

+ 3 - 3
tools/ninja/patches/100-make_jobserver_support.patch

@@ -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',