summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt13
-rw-r--r--cmake/Modules/TFAMetadata.cmake21
-rw-r--r--schemas/platform.schema.json8
3 files changed, 42 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b6dcead4e..2c8d63cde 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -86,6 +86,19 @@ arm_config_option(
TYPE PATH)
#
+# Retrieve the list of variants for the configured platform, and let the user
+# configure the variant.
+#
+
+tfa_platform_variants(variants
+ PLATFORM ${TFA_PLATFORM})
+
+arm_config_option(
+ NAME TFA_PLATFORM_VARIANT
+ HELP "Platform variant to build."
+ STRINGS ${variants})
+
+#
# We're done with very early setup, so we can now create the project. This will
# do some of the automatic compiler detection, which we need for setting up
# further configuration options.
diff --git a/cmake/Modules/TFAMetadata.cmake b/cmake/Modules/TFAMetadata.cmake
index fccb67d97..4c9d11f67 100644
--- a/cmake/Modules/TFAMetadata.cmake
+++ b/cmake/Modules/TFAMetadata.cmake
@@ -33,6 +33,14 @@ Return the path to the platform ``<platform>`` in ``<out-var>``.
tfa_platform_target(<out-var> PLATFORM <platform>)
Return the CMake target name for the platform ``<platform>`` in ``<out-var>``.
+
+.. command:: tfa_platform_variants
+
+.. code-block:: cmake
+
+ tfa_platform_variants(<out-var> PLATFORM <platform>)
+
+Return the list of variants for the platform ``<platform>`` in ``<out-var>``.
#]=======================================================================]
include_guard()
@@ -182,6 +190,15 @@ tfa_json_getter(tfa_platform_metadata_target
JSON "${global-metadata}" PARENT tfa_platform_metadata
PATH "target")
+tfa_json_getter(tfa_platform_metadata_variants
+ JSON "${global-metadata}" PARENT tfa_platform_metadata
+ PATH "variants")
+
+tfa_json_getter(tfa_platform_metadata_variants_variant
+ JSON "${global-metadata}" PARENT tfa_platform_metadata_variants
+ PATH "@VARIANT@" ARGUMENTS VARIANT
+ ERROR_MESSAGE "No such variant `@VARIANT@` for the @PLATFORM@ platform.")
+
#
# External platform metadata API.
#
@@ -189,3 +206,7 @@ tfa_json_getter(tfa_platform_metadata_target
tfa_json_getter(tfa_platform_target
JSON "${global-metadata}" PARENT tfa_platform_metadata_target
DECODE STRING)
+
+tfa_json_getter(tfa_platform_variants
+ JSON "${global-metadata}" PARENT tfa_platform_metadata_variants
+ DECODE MEMBERS)
diff --git a/schemas/platform.schema.json b/schemas/platform.schema.json
index 550450f7c..1960fffd8 100644
--- a/schemas/platform.schema.json
+++ b/schemas/platform.schema.json
@@ -7,6 +7,14 @@
"target": {
"type": "string",
"pattern": "^(?![0-9])([a-z0-9]+-?)+(?<!-)$"
+ },
+ "variants": {
+ "additionalProperties": false,
+ "patternProperties": {
+ "^(?![0-9])([A-Z0-9][a-z0-9]*-?)+(?<!-)$": {
+ "type": "object"
+ }
+ }
}
}
}