diff options
Diffstat (limited to 'tools/buildman')
-rw-r--r-- | tools/buildman/README | 3 | ||||
-rw-r--r-- | tools/buildman/builder.py | 17 | ||||
-rw-r--r-- | tools/buildman/builderthread.py | 37 | ||||
l--------- | tools/buildman/buildman | 2 | ||||
-rw-r--r-- | tools/buildman/cmdline.py | 3 | ||||
-rw-r--r-- | tools/buildman/control.py | 26 | ||||
-rw-r--r-- | tools/buildman/func_test.py | 35 | ||||
-rwxr-xr-x | tools/buildman/main.py (renamed from tools/buildman/buildman.py) | 27 | ||||
-rw-r--r-- | tools/buildman/test.py | 25 | ||||
-rw-r--r-- | tools/buildman/toolchain.py | 8 |
10 files changed, 104 insertions, 79 deletions
diff --git a/tools/buildman/README b/tools/buildman/README index f3a0dc7288d..b2f983c715d 100644 --- a/tools/buildman/README +++ b/tools/buildman/README @@ -1091,7 +1091,8 @@ the -w option, for example: buildman -o /tmp/build --board sandbox -w -This will write the full build into /tmp/build including object files. +This will write the full build into /tmp/build including object files. You must +specify the output directory with -o when using -w. Other options diff --git a/tools/buildman/builder.py b/tools/buildman/builder.py index 30ebe1d820a..f8e71de4272 100644 --- a/tools/buildman/builder.py +++ b/tools/buildman/builder.py @@ -17,12 +17,12 @@ import sys import threading import time -import builderthread -import command -import gitutil -import terminal -from terminal import Print -import toolchain +from buildman import builderthread +from buildman import toolchain +from patman import command +from patman import gitutil +from patman import terminal +from patman.terminal import Print """ Theory of Operation @@ -479,6 +479,9 @@ class Builder: Args: commit_upto: Commit number to use (0..self.count-1) """ + if self.work_in_output: + return self._working_dir + commit_dir = None if self.commits: commit = self.commits[commit_upto] @@ -502,6 +505,8 @@ class Builder: target: Target name """ output_dir = self._GetOutputDir(commit_upto) + if self.work_in_output: + return output_dir return os.path.join(output_dir, target) def GetDoneFile(self, commit_upto, target): diff --git a/tools/buildman/builderthread.py b/tools/buildman/builderthread.py index fc6e1ab25da..48fcd6cf7e2 100644 --- a/tools/buildman/builderthread.py +++ b/tools/buildman/builderthread.py @@ -9,8 +9,8 @@ import shutil import sys import threading -import command -import gitutil +from patman import command +from patman import gitutil RETURN_CODE_RETRY = -1 @@ -280,8 +280,6 @@ class BuilderThread(threading.Thread): work_in_output: Use the output directory as the work directory and don't write to a separate output directory. """ - if work_in_output: - return # Fatal error if result.return_code < 0: return @@ -333,7 +331,7 @@ class BuilderThread(threading.Thread): # Write out the image and function size information and an objdump env = result.toolchain.MakeEnvironment(self.builder.full_path) - with open(os.path.join(build_dir, 'env'), 'w') as fd: + with open(os.path.join(build_dir, 'out-env'), 'w') as fd: for var in sorted(env.keys()): print('%s="%s"' % (var, env[var]), file=fd) lines = [] @@ -379,7 +377,8 @@ class BuilderThread(threading.Thread): capture_stderr=True, cwd=result.out_dir, raise_on_error=False, env=env) ubootenv = os.path.join(result.out_dir, 'uboot.env') - self.CopyFiles(result.out_dir, build_dir, '', ['uboot.env']) + if not work_in_output: + self.CopyFiles(result.out_dir, build_dir, '', ['uboot.env']) # Write out the image sizes file. This is similar to the output # of binutil's 'size' utility, but it omits the header line and @@ -391,17 +390,21 @@ class BuilderThread(threading.Thread): with open(sizes, 'w') as fd: print('\n'.join(lines), file=fd) - # Write out the configuration files, with a special case for SPL - for dirname in ['', 'spl', 'tpl']: - self.CopyFiles(result.out_dir, build_dir, dirname, ['u-boot.cfg', - 'spl/u-boot-spl.cfg', 'tpl/u-boot-tpl.cfg', '.config', - 'include/autoconf.mk', 'include/generated/autoconf.h']) - - # Now write the actual build output - if keep_outputs: - self.CopyFiles(result.out_dir, build_dir, '', ['u-boot*', '*.bin', - '*.map', '*.img', 'MLO', 'SPL', 'include/autoconf.mk', - 'spl/u-boot-spl*']) + if not work_in_output: + # Write out the configuration files, with a special case for SPL + for dirname in ['', 'spl', 'tpl']: + self.CopyFiles( + result.out_dir, build_dir, dirname, + ['u-boot.cfg', 'spl/u-boot-spl.cfg', 'tpl/u-boot-tpl.cfg', + '.config', 'include/autoconf.mk', + 'include/generated/autoconf.h']) + + # Now write the actual build output + if keep_outputs: + self.CopyFiles( + result.out_dir, build_dir, '', + ['u-boot*', '*.bin', '*.map', '*.img', 'MLO', 'SPL', + 'include/autoconf.mk', 'spl/u-boot-spl*']) def CopyFiles(self, out_dir, build_dir, dirname, patterns): """Copy files from the build directory to the output. diff --git a/tools/buildman/buildman b/tools/buildman/buildman index e4fba2d4b03..11a5d8e18ab 120000 --- a/tools/buildman/buildman +++ b/tools/buildman/buildman @@ -1 +1 @@ -buildman.py
\ No newline at end of file +main.py
\ No newline at end of file diff --git a/tools/buildman/cmdline.py b/tools/buildman/cmdline.py index 1377b9d2bec..680c072d662 100644 --- a/tools/buildman/cmdline.py +++ b/tools/buildman/cmdline.py @@ -76,8 +76,7 @@ def ParseArgs(): default=False, help="Do a dry run (describe actions, but do nothing)") parser.add_option('-N', '--no-subdirs', action='store_true', dest='no_subdirs', default=False, help="Don't create subdirectories when building current source for a single board") - parser.add_option('-o', '--output-dir', type='string', - dest='output_dir', default='..', + parser.add_option('-o', '--output-dir', type='string', dest='output_dir', help='Directory where all builds happen and buildman has its workspace (default is ../)') parser.add_option('-O', '--override-toolchain', type='string', help="Override host toochain to use for sandbox (e.g. 'clang-7')") diff --git a/tools/buildman/control.py b/tools/buildman/control.py index 30c030fd16e..071c2613ecf 100644 --- a/tools/buildman/control.py +++ b/tools/buildman/control.py @@ -5,18 +5,18 @@ import multiprocessing import os import shutil +import subprocess import sys -import board -import bsettings -from builder import Builder -import gitutil -import patchstream -import terminal -from terminal import Print -import toolchain -import command -import subprocess +from buildman import board +from buildman import bsettings +from buildman import toolchain +from buildman.builder import Builder +from patman import command +from patman import gitutil +from patman import patchstream +from patman import terminal +from patman.terminal import Print def GetPlural(count): """Returns a plural 's' if count is not 1""" @@ -175,6 +175,10 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None, if options.incremental: print(col.Color(col.RED, 'Warning: -I has been removed. See documentation')) + if not options.output_dir: + if options.work_in_output: + sys.exit(col.Color(col.RED, '-w requires that you specify -o')) + options.output_dir = '..' # Work out what subset of the boards we are building if not boards: @@ -207,7 +211,7 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None, sys.exit(col.Color(col.RED, 'No matching boards found')) if options.print_prefix: - err = ShowToolchainInfo(boards, toolchains) + err = ShowToolchainPrefix(boards, toolchains) if err: sys.exit(col.Color(col.RED, err)) return 0 diff --git a/tools/buildman/func_test.py b/tools/buildman/func_test.py index 1fbc6f6b003..418677f9ccb 100644 --- a/tools/buildman/func_test.py +++ b/tools/buildman/func_test.py @@ -8,15 +8,15 @@ import sys import tempfile import unittest -import board -import bsettings -import cmdline -import command -import control -import gitutil -import terminal -import toolchain -import tools +from buildman import board +from buildman import bsettings +from buildman import cmdline +from buildman import control +from buildman import toolchain +from patman import command +from patman import gitutil +from patman import terminal +from patman import tools settings_data = ''' # Buildman settings file @@ -546,6 +546,13 @@ class TestFunctional(unittest.TestCase): self.assertEqual(self._builder.count, self._total_builds) self.assertEqual(self._builder.fail, 0) + def testEnvironment(self): + """Test that the done and environment files are written to out-env""" + self._RunControl('-o', self._output_dir) + board0_dir = os.path.join(self._output_dir, 'current', 'board0') + self.assertTrue(os.path.exists(os.path.join(board0_dir, 'done'))) + self.assertTrue(os.path.exists(os.path.join(board0_dir, 'out-env'))) + def testWorkInOutput(self): """Test the -w option which should write directly to the output dir""" board_list = board.Boards() @@ -554,6 +561,10 @@ class TestFunctional(unittest.TestCase): boards=board_list) self.assertTrue( os.path.exists(os.path.join(self._output_dir, 'u-boot'))) + self.assertTrue( + os.path.exists(os.path.join(self._output_dir, 'done'))) + self.assertTrue( + os.path.exists(os.path.join(self._output_dir, 'out-env'))) def testWorkInOutputFail(self): """Test the -w option failures""" @@ -569,3 +580,9 @@ class TestFunctional(unittest.TestCase): self._RunControl('-b', self._test_branch, '-o', self._output_dir, '-w', clean_dir=False, boards=board_list) self.assertIn("single commit", str(e.exception)) + + board_list = board.Boards() + board_list.AddBoard(board.Board(*boards[0])) + with self.assertRaises(SystemExit) as e: + self._RunControl('-w', clean_dir=False) + self.assertIn("specify -o", str(e.exception)) diff --git a/tools/buildman/buildman.py b/tools/buildman/main.py index 30a8690f935..2b714739a20 100755 --- a/tools/buildman/buildman.py +++ b/tools/buildman/main.py @@ -6,8 +6,7 @@ """See README for more information""" -from __future__ import print_function - +import doctest import multiprocessing import os import re @@ -16,20 +15,18 @@ import unittest # Bring in the patman libraries our_path = os.path.dirname(os.path.realpath(__file__)) -sys.path.insert(1, os.path.join(our_path, '../patman')) +sys.path.insert(1, os.path.join(our_path, '..')) # Our modules -import board -import bsettings -import builder -import checkpatch -import cmdline -import control -import doctest -import gitutil -import patchstream -import terminal -import toolchain +from buildman import board +from buildman import bsettings +from buildman import builder +from buildman import cmdline +from buildman import control +from buildman import toolchain +from patman import patchstream +from patman import gitutil +from patman import terminal def RunTests(skip_net_tests): import func_test @@ -37,7 +34,7 @@ def RunTests(skip_net_tests): import doctest result = unittest.TestResult() - for module in ['toolchain', 'gitutil']: + for module in ['buildman.toolchain', 'patman.gitutil']: suite = doctest.DocTestSuite(module) suite.run(result) diff --git a/tools/buildman/test.py b/tools/buildman/test.py index d32b22653fb..40811ba9f9e 100644 --- a/tools/buildman/test.py +++ b/tools/buildman/test.py @@ -11,18 +11,17 @@ import unittest # Bring in the patman libraries our_path = os.path.dirname(os.path.realpath(__file__)) -sys.path.append(os.path.join(our_path, '../patman')) - -import board -import bsettings -import builder -import control -import command -import commit -import terminal -import test_util -import toolchain -import tools + +from buildman import board +from buildman import bsettings +from buildman import builder +from buildman import control +from buildman import toolchain +from patman import commit +from patman import command +from patman import terminal +from patman import test_util +from patman import tools use_network = True @@ -583,7 +582,7 @@ class TestBuild(unittest.TestCase): url = self.toolchains.LocateArchUrl('arm') self.assertRegexpMatches(url, 'https://www.kernel.org/pub/tools/' 'crosstool/files/bin/x86_64/.*/' - 'x86_64-gcc-.*-nolibc_arm-.*linux-gnueabi.tar.xz') + 'x86_64-gcc-.*-nolibc[-_]arm-.*linux-gnueabi.tar.xz') def testGetEnvArgs(self): """Test the GetEnvArgs() function""" diff --git a/tools/buildman/toolchain.py b/tools/buildman/toolchain.py index 4456a805c74..acb5a29c8fb 100644 --- a/tools/buildman/toolchain.py +++ b/tools/buildman/toolchain.py @@ -10,10 +10,10 @@ import sys import tempfile import urllib.request, urllib.error, urllib.parse -import bsettings -import command -import terminal -import tools +from buildman import bsettings +from patman import command +from patman import terminal +from patman import tools (PRIORITY_FULL_PREFIX, PRIORITY_PREFIX_GCC, PRIORITY_PREFIX_GCC_PATH, PRIORITY_CALC) = list(range(4)) |