From patchwork Sun Mar 15 23:43:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 243687 List-Id: U-Boot discussion From: sjg at chromium.org (Simon Glass) Date: Sun, 15 Mar 2020 17:43:03 -0600 Subject: [PATCH v2 23/23] test/py: Allow using buildman to build U-Boot In-Reply-To: <20200315234303.18598-1-sjg@chromium.org> References: <20200315234303.18598-1-sjg@chromium.org> Message-ID: <20200315234303.18598-20-sjg@chromium.org> It is a pain to have to set the CROSS_COMPILE environment variable when using test.py's --build option. It is possible to get this using the -A option from buildman. But it seems better to just use buildman to do the build when it is available. However using buildman adds a new dependency to the test system which we want to avoid. So leave the default as is and add a flag to make it use buildman. Note that most of these changes relate to test.py and the parts of the travis/gitlab/azure scripts which relate to running test and building a suitable U-Boot to run the tests on. Signed-off-by: Simon Glass Reviewed-by: Tom Rini Reviewed-by: Stephen Warren --- Changes in v2: - Convert this into an option, leaving the default as is test/py/README.md | 13 ++++++++++++- test/py/conftest.py | 30 +++++++++++++++++++++--------- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/test/py/README.md b/test/py/README.md index 3cbe01b73e..2e5025258d 100644 --- a/test/py/README.md +++ b/test/py/README.md @@ -138,6 +138,9 @@ command-line option; see the next section. before running the tests. If using this option, make sure that any environment variables required by the build process are already set, such as `$CROSS_COMPILE`. +- `--buildman` indicates that `--build` should use buildman to build U-Boot. + There is no need to set $CROSS_COMPILE` in this case since buildman handles + it. - `--build-dir` sets the directory containing the compiled U-Boot binaries. If omitted, this is `${source_dir}/build-${board_type}`. - `--result-dir` sets the directory to write results, such as log files, @@ -333,7 +336,7 @@ PATH=$HOME/ubtest/bin:$PATH \ If you want the test script to compile U-Boot for you too, then you likely need to set `$CROSS_COMPILE` to allow this, and invoke the test script as -follow: +follows: ```bash CROSS_COMPILE=arm-none-eabi- \ @@ -342,6 +345,14 @@ CROSS_COMPILE=arm-none-eabi- \ ./test/py/test.py --bd seaboard --build ``` +or, using buildman to handle it: + +```bash + PATH=$HOME/ubtest/bin:$PATH \ + PYTHONPATH=${HOME}/ubtest/py/${HOSTNAME}:${PYTHONPATH} \ + ./test/py/test.py --bd seaboard --build --buildman +``` + ## Writing tests Please refer to the pytest documentation for details of writing pytest tests. diff --git a/test/py/conftest.py b/test/py/conftest.py index 34ac4fb062..e3392ff6bc 100644 --- a/test/py/conftest.py +++ b/test/py/conftest.py @@ -70,6 +70,8 @@ def pytest_addoption(parser): help='U-Boot board identity/instance') parser.addoption('--build', default=False, action='store_true', help='Compile U-Boot before running tests') + parser.addoption('--buildman', default=False, action='store_true', + help='Use buildman to build U-Boot (assuming --build is given)') parser.addoption('--gdbserver', default=None, help='Run sandbox under gdbserver. The argument is the channel '+ 'over which gdbserver should communicate, e.g. localhost:1234') @@ -140,16 +142,26 @@ def pytest_configure(config): log = multiplexed_log.Logfile(result_dir + '/test-log.html') if config.getoption('build'): - if build_dir != source_dir: - o_opt = 'O=%s' % build_dir + if config.getoption('buildman'): + if build_dir != source_dir: + dest_args = ['-o', build_dir, '-w'] + else: + dest_args = ['-i'] + cmds = (['buildman', '--board', board_type] + dest_args,) + name = 'buildman' else: - o_opt = '' - cmds = ( - ['make', o_opt, '-s', board_type + '_defconfig'], - ['make', o_opt, '-s', '-j8'], - ) - with log.section('make'): - runner = log.get_runner('make', sys.stdout) + if build_dir != source_dir: + o_opt = 'O=%s' % build_dir + else: + o_opt = '' + cmds = ( + ['make', o_opt, '-s', board_type + '_defconfig'], + ['make', o_opt, '-s', '-j8'], + ) + name = 'make' + + with log.section(name): + runner = log.get_runner(name, sys.stdout) for cmd in cmds: runner.run(cmd, cwd=source_dir) runner.close()