diff mbox series

[v2,23/23] test/py: Allow using buildman to build U-Boot

Message ID 20200315234303.18598-20-sjg@chromium.org
State Superseded
Headers show
Series gitlab: Simplify the test script | expand

Commit Message

Simon Glass March 15, 2020, 11:43 p.m. UTC
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 <sjg at chromium.org>
---

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(-)

Comments

Tom Rini March 16, 2020, 9:24 p.m. UTC | #1
On Sun, Mar 15, 2020 at 05:43:03PM -0600, Simon Glass wrote:

> 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 <sjg at chromium.org>

Thanks for making this optional now.

Reviewed-by: Tom Rini <trini at konsulko.com>
Stephen Warren March 16, 2020, 10:08 p.m. UTC | #2
On 3/15/20 5:43 PM, Simon Glass wrote:
> 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.

Reviewed-by: Stephen Warren <swarren at nvidia.com>
diff mbox series

Patch

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()