Эх сурвалжийг харах

buildman: Add an option to use the full tool chain path

In some cases there may be multiple toolchains with the same name in the
path. Provide an option to use the full path in the CROSS_COMPILE
environment variable.

Note: Wolfgang mentioned that this is dangerous since in some cases there
may be other tools on the path that are needed. So this is set up as an
option, not the default. I will need test confirmation (i.e. that this
commit fixes a real problem) before merging it.

Signed-off-by: Simon Glass <sjg@chromium.org>
Suggested-by: Steve Rae <srae@broadcom.com>
Simon Glass 10 жил өмнө
parent
commit
bb1501f2c2

+ 6 - 1
tools/buildman/builder.py

@@ -175,7 +175,7 @@ class Builder:
 
 
     def __init__(self, toolchains, base_dir, git_dir, num_threads, num_jobs,
     def __init__(self, toolchains, base_dir, git_dir, num_threads, num_jobs,
                  gnu_make='make', checkout=True, show_unknown=True, step=1,
                  gnu_make='make', checkout=True, show_unknown=True, step=1,
-                 no_subdirs=False):
+                 no_subdirs=False, full_path=False):
         """Create a new Builder object
         """Create a new Builder object
 
 
         Args:
         Args:
@@ -189,6 +189,10 @@ class Builder:
                 This is used for testing.
                 This is used for testing.
             show_unknown: Show unknown boards (those not built) in summary
             show_unknown: Show unknown boards (those not built) in summary
             step: 1 to process every commit, n to process every nth commit
             step: 1 to process every commit, n to process every nth commit
+            no_subdirs: Don't create subdirectories when building current
+                source for a single board
+            full_path: Return the full path in CROSS_COMPILE and don't set
+                PATH
         """
         """
         self.toolchains = toolchains
         self.toolchains = toolchains
         self.base_dir = base_dir
         self.base_dir = base_dir
@@ -215,6 +219,7 @@ class Builder:
         self.in_tree = False
         self.in_tree = False
         self._error_lines = 0
         self._error_lines = 0
         self.no_subdirs = no_subdirs
         self.no_subdirs = no_subdirs
+        self.full_path = full_path
 
 
         self.col = terminal.Color()
         self.col = terminal.Color()
 
 

+ 2 - 2
tools/buildman/builderthread.py

@@ -177,7 +177,7 @@ class BuilderThread(threading.Thread):
                     commit = 'current'
                     commit = 'current'
 
 
                 # Set up the environment and command line
                 # Set up the environment and command line
-                env = self.toolchain.MakeEnvironment()
+                env = self.toolchain.MakeEnvironment(self.builder.full_path)
                 Mkdir(out_dir)
                 Mkdir(out_dir)
                 args = []
                 args = []
                 cwd = work_dir
                 cwd = work_dir
@@ -284,7 +284,7 @@ class BuilderThread(threading.Thread):
                 print >>fd, 'path', result.toolchain.path
                 print >>fd, 'path', result.toolchain.path
 
 
             # Write out the image and function size information and an objdump
             # Write out the image and function size information and an objdump
-            env = result.toolchain.MakeEnvironment()
+            env = result.toolchain.MakeEnvironment(self.builder.full_path)
             lines = []
             lines = []
             for fname in ['u-boot', 'spl/u-boot-spl']:
             for fname in ['u-boot', 'spl/u-boot-spl']:
                 cmd = ['%snm' % self.toolchain.cross, '--size-sort', fname]
                 cmd = ['%snm' % self.toolchain.cross, '--size-sort', fname]

+ 2 - 0
tools/buildman/cmdline.py

@@ -62,6 +62,8 @@ def ParseArgs():
           help='Directory where all builds happen and buildman has its workspace (default is ../)')
           help='Directory where all builds happen and buildman has its workspace (default is ../)')
     parser.add_option('-Q', '--quick', action='store_true',
     parser.add_option('-Q', '--quick', action='store_true',
           default=False, help='Do a rough build, with limited warning resolution')
           default=False, help='Do a rough build, with limited warning resolution')
+    parser.add_option('-p', '--full-path', action='store_true',
+          default=False, help="Use full toolchain path in CROSS_COMPILE")
     parser.add_option('-s', '--summary', action='store_true',
     parser.add_option('-s', '--summary', action='store_true',
           default=False, help='Show a build summary')
           default=False, help='Show a build summary')
     parser.add_option('-S', '--show-sizes', action='store_true',
     parser.add_option('-S', '--show-sizes', action='store_true',

+ 1 - 1
tools/buildman/control.py

@@ -232,7 +232,7 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None,
     builder = Builder(toolchains, output_dir, options.git_dir,
     builder = Builder(toolchains, output_dir, options.git_dir,
             options.threads, options.jobs, gnu_make=gnu_make, checkout=True,
             options.threads, options.jobs, gnu_make=gnu_make, checkout=True,
             show_unknown=options.show_unknown, step=options.step,
             show_unknown=options.show_unknown, step=options.step,
-            no_subdirs=options.no_subdirs)
+            no_subdirs=options.no_subdirs, full_path=options.full_path)
     builder.force_config_on_failure = not options.quick
     builder.force_config_on_failure = not options.quick
     if make_func:
     if make_func:
         builder.do_make = make_func
         builder.do_make = make_func

+ 14 - 6
tools/buildman/toolchain.py

@@ -41,7 +41,7 @@ class Toolchain:
         pos = self.cross.find('-')
         pos = self.cross.find('-')
         self.arch = self.cross[:pos] if pos != -1 else 'sandbox'
         self.arch = self.cross[:pos] if pos != -1 else 'sandbox'
 
 
-        env = self.MakeEnvironment()
+        env = self.MakeEnvironment(False)
 
 
         # As a basic sanity check, run the C compiler with --version
         # As a basic sanity check, run the C compiler with --version
         cmd = [fname, '--version']
         cmd = [fname, '--version']
@@ -81,15 +81,23 @@ class Toolchain:
                 return prio
                 return prio
         return prio
         return prio
 
 
-    def MakeEnvironment(self):
+    def MakeEnvironment(self, full_path):
         """Returns an environment for using the toolchain.
         """Returns an environment for using the toolchain.
 
 
-        Thie takes the current environment, adds CROSS_COMPILE and
-        augments PATH so that the toolchain will operate correctly.
+        Thie takes the current environment and adds CROSS_COMPILE so that
+        the tool chain will operate correctly.
+
+        Args:
+            full_path: Return the full path in CROSS_COMPILE and don't set
+                PATH
         """
         """
         env = dict(os.environ)
         env = dict(os.environ)
-        env['CROSS_COMPILE'] = self.cross
-        env['PATH'] = self.path + ':' + env['PATH']
+        if full_path:
+            env['CROSS_COMPILE'] = os.path.join(self.path, self.cross)
+        else:
+            env['CROSS_COMPILE'] = self.cross
+            env['PATH'] = self.path + ':' + env['PATH']
+
         return env
         return env