summaryrefslogtreecommitdiff
path: root/tests/loader
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2017-06-09 18:57:01 +0100
committerTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2017-07-06 21:08:10 +0900
commit039062218957bdae6473b482adc8800fd9be7ed3 (patch)
tree122e15ab36ea8aa2a2928040f6f159006f42fe10 /tests/loader
parentae59134a32cf7c28d8d0b4ccb5518a2a0c18b97b (diff)
downloadbuildstream-039062218957bdae6473b482adc8800fd9be7ed3.tar.gz
Add --host-arch and --target-arch, and 'host-arches' conditional
This command adds initial cross-compilation support to BuildStream. It has been tested against a converted version of the Baserock compiler bootstrap and used to cross build sysroots for armv8l64 and ppc64l from an x86_64 host. For example, to build a sysroot for ARM v8 64-bit you can do this: bst build --target-arch=armv8b64 gnu-toolchain/stage2.bst This would cause the adapted Baserock definitions to produce a stage1 simple cross compiler that runs on the native architecture and produces armv8b64 binaries, and then cross build a stage2 sysroot that executes on armv8b64. Currently the --host-arch option does nothing of use. It will one day enable host-incompatible builds using a QEMU-powered cross sandbox. The `--arch=` option is now shorthand for `--host-arch= --target-arch=`. Elements have 2 new variables available, %{bst-host-arch} and %{bst-target-arch}. The 'arches' conditional now follows %{bst-target-arch}, while the new 'host-arches' conditional follows %{bst-host-arch}. All of --arch, --host-arch and --target-arch default to the output of `uname -a`. There's no magic here that would make all BuildStream elements suddenly able to cross compile. It is up to an individual element to support this by honouring %{bst-target-arch} in whatever way makes sense.
Diffstat (limited to 'tests/loader')
-rw-r--r--tests/loader/arches.py76
-rw-r--r--tests/loader/arches/elements/host-arch-conditional.bst20
-rw-r--r--tests/loader/basics.py10
-rw-r--r--tests/loader/dependencies.py18
-rw-r--r--tests/loader/variants.py32
5 files changed, 114 insertions, 42 deletions
diff --git a/tests/loader/arches.py b/tests/loader/arches.py
index 99602d181..bc69d5b8f 100644
--- a/tests/loader/arches.py
+++ b/tests/loader/arches.py
@@ -19,7 +19,7 @@ def test_simple_conditional_nomatch(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/simple-conditional.bst', None, 'arm')
+ basedir, 'elements/simple-conditional.bst', None, 'arm', None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -34,7 +34,7 @@ def test_simple_conditional_x86_64(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/simple-conditional.bst', None, 'x86_64')
+ basedir, 'elements/simple-conditional.bst', None, 'x86_64', None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -49,7 +49,7 @@ def test_simple_conditional_x86_32(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/simple-conditional.bst', None, 'x86_32')
+ basedir, 'elements/simple-conditional.bst', None, 'x86_32', None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -60,6 +60,58 @@ def test_simple_conditional_x86_32(datafiles):
##############################################################
+# Test Arch and Host-Arch Conditionals #
+##############################################################
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_host_arch_conditional_armv8(datafiles):
+
+ basedir = os.path.join(datafiles.dirname, datafiles.basename)
+ loader = Loader(
+ basedir, 'elements/host-arch-conditional.bst', None, 'armv8', None)
+
+ element = loader.load()
+ assert(isinstance(element, MetaElement))
+ number = element.config.get('number')
+
+ # armv8 host-arch overrides the number to 88
+ assert(number == 88)
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_host_arch_conditional_ignores_target_arch(datafiles):
+
+ basedir = os.path.join(datafiles.dirname, datafiles.basename)
+ loader = Loader(
+ basedir, 'elements/host-arch-conditional.bst', None, 'armv8', 'x86_32')
+
+ element = loader.load()
+ assert(isinstance(element, MetaElement))
+ number = element.config.get('number')
+
+ # The setting a target-arch has no effect on host-arches: the number is
+ # still 88
+ assert(number == 88)
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_host_arch_conditional_overridden(datafiles):
+
+ basedir = os.path.join(datafiles.dirname, datafiles.basename)
+ loader = Loader(
+ basedir, 'elements/host-arch-conditional.bst', None, 'armv8', 'x86_64')
+
+ element = loader.load()
+ assert(isinstance(element, MetaElement))
+ number = element.config.get('number')
+
+ # The 'arches' conditional follows the target architecture, and overrides
+ # anything specified in 'host-arches'.
+ assert(number == 6)
+
+
+##############################################################
# Test Arch Conditionals inside Variants #
##############################################################
@pytest.mark.datafiles(DATA_DIR)
@@ -67,7 +119,7 @@ def test_variant_arch_default(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/variant-arch-conditional.bst', None, 'arm')
+ basedir, 'elements/variant-arch-conditional.bst', None, 'arm', None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -82,7 +134,7 @@ def test_variant_arch_default_x86_64(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/variant-arch-conditional.bst', None, 'x86_64')
+ basedir, 'elements/variant-arch-conditional.bst', None, 'x86_64', None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -96,7 +148,7 @@ def test_variant_arch_default_x86_32(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/variant-arch-conditional.bst', None, 'x86_32')
+ basedir, 'elements/variant-arch-conditional.bst', None, 'x86_32', None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -110,7 +162,7 @@ def test_variant_arch_pink_pony(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/variant-arch-conditional.bst', 'pink', 'arm')
+ basedir, 'elements/variant-arch-conditional.bst', 'pink', 'arm', None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -125,7 +177,7 @@ def test_variant_arch_pink_pony_x86_64(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/variant-arch-conditional.bst', 'pink', 'x86_64')
+ basedir, 'elements/variant-arch-conditional.bst', 'pink', 'x86_64', None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -139,7 +191,7 @@ def test_variant_arch_pink_pony_x86_32(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/variant-arch-conditional.bst', 'pink', 'x86_32')
+ basedir, 'elements/variant-arch-conditional.bst', 'pink', 'x86_32', None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -153,7 +205,7 @@ def test_variant_arch_blue_pony(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/variant-arch-conditional.bst', 'blue', 'arm')
+ basedir, 'elements/variant-arch-conditional.bst', 'blue', 'arm', None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -168,7 +220,7 @@ def test_variant_arch_blue_pony_x86_64(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/variant-arch-conditional.bst', 'blue', 'x86_64')
+ basedir, 'elements/variant-arch-conditional.bst', 'blue', 'x86_64', None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -182,7 +234,7 @@ def test_variant_arch_blue_pony_x86_32(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/variant-arch-conditional.bst', 'blue', 'x86_32')
+ basedir, 'elements/variant-arch-conditional.bst', 'blue', 'x86_32', None)
element = loader.load()
assert(isinstance(element, MetaElement))
diff --git a/tests/loader/arches/elements/host-arch-conditional.bst b/tests/loader/arches/elements/host-arch-conditional.bst
new file mode 100644
index 000000000..4c9272feb
--- /dev/null
+++ b/tests/loader/arches/elements/host-arch-conditional.bst
@@ -0,0 +1,20 @@
+kind: pony
+description: |
+ An element with host-arches and arches conditionals.
+
+ The 'arches' conditional follows --target-arch if specified, while the
+ 'host-arches' conditional does not. The 'arches' conditional overrides
+ 'host-arches' if both for some reason try to override the same thing.
+config:
+ number: 5
+arches:
+ x86_64:
+ config:
+ number: 6
+host-arches:
+ x86_64:
+ config:
+ number: 66
+ armv8:
+ config:
+ number: 88
diff --git a/tests/loader/basics.py b/tests/loader/basics.py
index f706d06ec..d7f85b0fe 100644
--- a/tests/loader/basics.py
+++ b/tests/loader/basics.py
@@ -18,7 +18,7 @@ DATA_DIR = os.path.join(
def test_one_file(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/onefile.bst', None, None)
+ loader = Loader(basedir, 'elements/onefile.bst', None, None, None)
element = loader.load()
@@ -30,7 +30,7 @@ def test_one_file(datafiles):
def test_missing_file(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/missing.bst', None, None)
+ loader = Loader(basedir, 'elements/missing.bst', None, None, None)
with pytest.raises(LoadError) as exc:
element = loader.load()
@@ -42,7 +42,7 @@ def test_missing_file(datafiles):
def test_invalid_reference(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/badreference.bst', None, None)
+ loader = Loader(basedir, 'elements/badreference.bst', None, None, None)
with pytest.raises(LoadError) as exc:
element = loader.load()
@@ -54,7 +54,7 @@ def test_invalid_reference(datafiles):
def test_invalid_yaml(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/badfile.bst', None, None)
+ loader = Loader(basedir, 'elements/badfile.bst', None, None, None)
with pytest.raises(LoadError) as exc:
element = loader.load()
@@ -69,6 +69,6 @@ def test_fail_fullpath_target(datafiles):
fullpath = os.path.join(basedir, 'elements', 'onefile.bst')
with pytest.raises(LoadError) as exc:
- loader = Loader(basedir, fullpath, None, None)
+ loader = Loader(basedir, fullpath, None, None, None)
assert (exc.value.reason == LoadErrorReason.INVALID_DATA)
diff --git a/tests/loader/dependencies.py b/tests/loader/dependencies.py
index 8a88bcaf8..a701d4723 100644
--- a/tests/loader/dependencies.py
+++ b/tests/loader/dependencies.py
@@ -18,7 +18,7 @@ DATA_DIR = os.path.join(
def test_two_files(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/target.bst', None, None)
+ loader = Loader(basedir, 'elements/target.bst', None, None, None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -34,7 +34,7 @@ def test_two_files(datafiles):
def test_shared_dependency(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/shareddeptarget.bst', None, None)
+ loader = Loader(basedir, 'elements/shareddeptarget.bst', None, None, None)
element = loader.load()
# Toplevel is 'pony' with 2 dependencies
@@ -77,7 +77,7 @@ def test_shared_dependency(datafiles):
def test_dependency_dict(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/target-depdict.bst', None, None)
+ loader = Loader(basedir, 'elements/target-depdict.bst', None, None, None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -92,7 +92,7 @@ def test_dependency_dict(datafiles):
@pytest.mark.datafiles(DATA_DIR)
def test_invalid_dependency_declaration(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/invaliddep.bst', None, None)
+ loader = Loader(basedir, 'elements/invaliddep.bst', None, None, None)
with pytest.raises(LoadError) as exc:
element = loader.load()
@@ -103,7 +103,7 @@ def test_invalid_dependency_declaration(datafiles):
@pytest.mark.datafiles(DATA_DIR)
def test_circular_dependency(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/circulartarget.bst', None, None)
+ loader = Loader(basedir, 'elements/circulartarget.bst', None, None, None)
with pytest.raises(LoadError) as exc:
element = loader.load()
@@ -114,7 +114,7 @@ def test_circular_dependency(datafiles):
@pytest.mark.datafiles(DATA_DIR)
def test_invalid_dependency_type(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/invaliddeptype.bst', None, None)
+ loader = Loader(basedir, 'elements/invaliddeptype.bst', None, None, None)
with pytest.raises(LoadError) as exc:
element = loader.load()
@@ -125,7 +125,7 @@ def test_invalid_dependency_type(datafiles):
@pytest.mark.datafiles(DATA_DIR)
def test_build_dependency(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/builddep.bst', None, None)
+ loader = Loader(basedir, 'elements/builddep.bst', None, None, None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -141,7 +141,7 @@ def test_build_dependency(datafiles):
@pytest.mark.datafiles(DATA_DIR)
def test_runtime_dependency(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/runtimedep.bst', None, None)
+ loader = Loader(basedir, 'elements/runtimedep.bst', None, None, None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -157,7 +157,7 @@ def test_runtime_dependency(datafiles):
@pytest.mark.datafiles(DATA_DIR)
def test_build_runtime_dependency(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/target.bst', None, None)
+ loader = Loader(basedir, 'elements/target.bst', None, None, None)
element = loader.load()
assert(isinstance(element, MetaElement))
diff --git a/tests/loader/variants.py b/tests/loader/variants.py
index 0e20faf93..865ffa268 100644
--- a/tests/loader/variants.py
+++ b/tests/loader/variants.py
@@ -18,7 +18,7 @@ DATA_DIR = os.path.join(
def test_variant_not_list(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/variants-not-list.bst', None, None)
+ loader = Loader(basedir, 'elements/variants-not-list.bst', None, None, None)
with pytest.raises(LoadError) as exc:
element = loader.load()
@@ -30,7 +30,7 @@ def test_variant_not_list(datafiles):
def test_variant_unnamed(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/unnamed-variant.bst', None, None)
+ loader = Loader(basedir, 'elements/unnamed-variant.bst', None, None, None)
with pytest.raises(LoadError) as exc:
element = loader.load()
@@ -42,7 +42,7 @@ def test_variant_unnamed(datafiles):
def test_variant_bad_name(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/variant-bad-name.bst', None, None)
+ loader = Loader(basedir, 'elements/variant-bad-name.bst', None, None, None)
with pytest.raises(LoadError) as exc:
element = loader.load()
@@ -54,7 +54,7 @@ def test_variant_bad_name(datafiles):
def test_variant_only_one(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/only-one-variant.bst', None, None)
+ loader = Loader(basedir, 'elements/only-one-variant.bst', None, None, None)
with pytest.raises(LoadError) as exc:
element = loader.load()
@@ -67,7 +67,7 @@ def test_variant_illegal_composite(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/variant-illegal-composite.bst', None, None)
+ basedir, 'elements/variant-illegal-composite.bst', None, None, None)
with pytest.raises(LoadError) as exc:
element = loader.load()
@@ -83,7 +83,7 @@ def test_variant_simple_composite_default(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/simple-variant-compositing.bst', None, None)
+ basedir, 'elements/simple-variant-compositing.bst', None, None, None)
element = loader.load()
@@ -100,7 +100,7 @@ def test_variant_simple_composite_pink_pony(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/simple-variant-compositing.bst', 'pink', None)
+ basedir, 'elements/simple-variant-compositing.bst', 'pink', None, None)
element = loader.load()
@@ -117,7 +117,7 @@ def test_variant_simple_composite_blue_pony(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/simple-variant-compositing.bst', 'blue', None)
+ basedir, 'elements/simple-variant-compositing.bst', 'blue', None, None)
element = loader.load()
@@ -155,7 +155,7 @@ def test_variant_simple_dependency_default(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/simple-dependency-variants.bst', None, None)
+ basedir, 'elements/simple-dependency-variants.bst', None, None, None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -170,7 +170,7 @@ def test_variant_simple_dependency_pink_pony(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/simple-dependency-variants.bst', 'pink', None)
+ basedir, 'elements/simple-dependency-variants.bst', 'pink', None, None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -185,7 +185,7 @@ def test_variant_simple_dependency_blue_pony(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/simple-dependency-variants.bst', 'blue', None)
+ basedir, 'elements/simple-dependency-variants.bst', 'blue', None, None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -200,7 +200,7 @@ def test_variant_indirect_dependency_default(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/indirect-dependency-variants.bst', None, None)
+ basedir, 'elements/indirect-dependency-variants.bst', None, None, None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -219,7 +219,7 @@ def test_variant_indirect_dependency_blue_pony(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/indirect-dependency-variants.bst', 'blue', None)
+ basedir, 'elements/indirect-dependency-variants.bst', 'blue', None, None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -238,7 +238,7 @@ def test_variant_indirect_dependency_pink_pony(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
loader = Loader(
- basedir, 'elements/indirect-dependency-variants.bst', 'pink', None)
+ basedir, 'elements/indirect-dependency-variants.bst', 'pink', None, None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -256,7 +256,7 @@ def test_variant_indirect_dependency_pink_pony(datafiles):
def test_engine_resolve_agreement(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/tricky.bst', None, None)
+ loader = Loader(basedir, 'elements/tricky.bst', None, None, None)
element = loader.load()
assert(isinstance(element, MetaElement))
@@ -271,7 +271,7 @@ def test_engine_resolve_agreement(datafiles):
def test_engine_disagreement(datafiles):
basedir = os.path.join(datafiles.dirname, datafiles.basename)
- loader = Loader(basedir, 'elements/disagreement.bst', None, None)
+ loader = Loader(basedir, 'elements/disagreement.bst', None, None, None)
with pytest.raises(LoadError) as exc:
element = loader.load()