440438092b
We want to use configure and qt-configure-module when building in Coin, rather than pure cmake and qt-cmake. There are a few benefits: - CI tests the scripts, making sure we don't introduce regressions - CI uses the same scripts that we mention in our documentation for developers to use - The platform configurations become a bit less verbose and easier to read due to less shouty-case CMake options To ensure a more gradual porting, Coin will only use the new instructions if the 'UseConfigure' feature is set on a platform configuration in qt5.git. This allows going back to the old instructions in case if something isn't working properly. Due the opt-in, we need to support both old and new instructions in the implementation. The change strives to remove as much duplicate code as possible, by moving it into common includes. The README.md is updated to mention the overview of how the different environment variables are used. There are a few important things to point out. 1) Because during the porting we have to allow mixing of the old style and new style, platform configs have to separate CMake-style options from configure-style options in different environment variables. Otherwise the instructions wouldn't be able to create a valid configure call, where all CMake-style options have to go at the end after a double dash --. After all platform configs are ported to the new style, it should be possible to combine all the options in a single environment variable if that is desired, but it will require another round of porting to remove all the '-D' prefixes in CMake-style options, and just use regular variable assignment which configure supports. e.g. -DQT_BUILD_EXAMPLES=ON becomes QT_BUILD_EXAMPLES=ON, which can be mixed in-between configure-style args. 2) Configure is more strict in that it doesn't allow passing unknown options. Due to that, we can't pass non-qtbase configure options via NON_QTBASE_CONFIGURE_ARGS. qt-configure-module would error out in the repos where the configure option is unknown. Because we don't have a Coin configure variable for each repo, we circumvent the issue by continuing to pass CMake-style options via NON_QTBASE_CMAKE_ARGS instead, which does not do validation checks. In the future, we could introduce a configure flag that disables the validation checks. Pick-to: 6.2 6.3 Task-number: QTQAINFRA-4357 Task-number: QTQAINFRA-4815 Change-Id: I72d8ba0b3a543b42982e22ae8d6566c0e885c446 Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io> Reviewed-by: Toni Saario <toni.saario@qt.io> |
||
---|---|---|
.. | ||
qmake | ||
qmake_examples | ||
call_cmake_for_standalone_tests.yaml | ||
call_configure_module.yaml | ||
call_configure_qtbase.yaml | ||
call_host_install.yaml | ||
call_target_install.yaml | ||
cmake_build_and_upload_test_artifacts_host.yaml | ||
cmake_build_and_upload_test_artifacts_target.yaml | ||
cmake_build_and_upload_test_artifacts.yaml | ||
cmake_cross_compilation_module_build_instructions.yaml | ||
cmake_cross_compilation_qtbase_build_instructions.yaml | ||
cmake_documentation_build.yaml | ||
cmake_module_build_instructions.yaml | ||
cmake_qtbase_build_instructions.yaml | ||
cmake_regular_test_instructions_common.yaml | ||
cmake_regular_test_instructions_enforced.yaml | ||
cmake_regular_test_instructions.yaml | ||
cmake_run_ctest_enforce_exit_code.yaml | ||
cmake_run_ctest_ignore_exit_code.yaml | ||
cmake_setup_running_qnxqemu_tests_env_vars.yaml | ||
cmake_setup_running_tests_env_vars.yaml | ||
coin_module_build_template_v2.yaml | ||
coin_module_test_android_start_emulator.yaml | ||
coin_module_test_docs.yaml | ||
coin_module_test_qemu_env_vars.yaml | ||
coin_module_test_qnx_start_emulator.yaml | ||
coin_module_test_template_common.yaml | ||
coin_module_test_template_v2.yaml | ||
coin_module_test_template_v3.yaml | ||
coin_qtbase_build_template_v2.yaml | ||
coin_qtbase_test_docs.yaml | ||
prepare_building_env.yaml | ||
prepare_configure_executable.yaml | ||
prepare_configure_module_executable.yaml | ||
prepare_install_dir_suffix_host.yaml | ||
prepare_install_dir_suffix_target.yaml | ||
README.md |
Information about Coin instruction templates
Build templates
coin_qtbase_build_template_v2.yaml
did not exist. The build instructions were directly embedded intomodule_config.yaml
and did not support repos outside of qtbase, also no cross-compilation.coin_qtbase_build_template_v2
introduced support for building other repos, and also enabled build cross-compiling targets likeAndroid
andiOS
. A bit later the template gained the ability to buildqemu
cross-compiling configurations. The counterpart to qtbase to build other repositories iscoin_module_build_template_v2
Test templates
coin_module_test_template_v1
did not exist. The test instructions were directly embedded intomodule_config.yaml
and did not support repos outside of qtbase, also no cross-compilation.coin_module_test_template_v2
introduced support for building tests for other repos, and made sure not to build and run tests on cross-compiling configuration. A bit later the template gained the ability to build and run tests forqemu
cross-compiling configurations.coin_module_test_template_v3
changed the run test instructions to not ignore the exit code and thus enforce that tests pass in the CI.
Environment variable description and usage
The following environment variables are used in Coin instructions when building Qt, tests, etc:
CONFIGURE_ARGS
- contains platform-specific configure-style
arguments
(e.g. -shared
), that will be passed to a qtbase configure call
CMAKE_ARGS
- contains platform-specific CMake-style
arguments
(e.g. -DOPENSSL_ROOT_DIR=Foo
) that will be passed to a qtbase
configure call
NON_QTBASE_CONFIGURE_ARGS
- contains platform-specific configure-style
arguments
that will be passed to a non-qtbase qt-configure-module call
NON_QTBASE_CMAKE_ARGS
- contains platform-specific CMake-style
arguments
that will be passed to a non-qtbase qt-configure-module call
COMMON_CMAKE_ARGS
- platform-independent CMake-style
args set in
prepare_building_env.yaml
that apply to qtbase configurations
only.
COMMON_NON_QTBASE_CMAKE_ARGS
- platform-independent CMake-style
args set in
prepare_building_env.yaml
that apply to
configuration of repos other than qtbase
COMMON_TEST_CMAKE_ARGS
- platform-independent CMake-style
args set in
prepare_building_env.yaml
that apply to configuration of
all standalone tests
All of the above apply to host builds only.
There is a a set of environment variables that apply to target builds when cross-compiling which mirror the ones above. They are:
TARGET_CONFIGURE_ARGS
TARGET_CMAKE_ARGS
NON_QTBASE_TARGET_CONFIGURE_ARGS
NON_QTBASE_TARGET_CMAKE_ARGS
COMMON_TARGET_CMAKE_ARGS
COMMON_NON_QTBASE_TARGET_CMAKE_ARGS
COMMON_TARGET_TEST_CMAKE_ARGS
Currently, there are no common configure-style
variables for configuring
repos or tests, only ``CMake-style` ones.
COIN_CMAKE_ARGS
contains the final set of cmake args that is passed to
configure
/ qt-configure-module
, it is built up from the variables above + any additional values added
by custom instructions, like specification of CMAKE_INSTALL_PREFIX
etc.
INSTALL_DIR_SUFFIX
is used to append either /host
or /target
suffixes to install paths in
instructions when cross-building.
CONFIGURE_EXECUTABLE
contains a platform-specific path to configure
/ qt-configure-module
or cmake
/ qt-cmake
depending on whether UseConfigure
feature is enabled.
CONFIGURE_ENV_PREFIX
contains the value of either ENV_PREFIX
or TARGET_ENV_PREFIX
depending on
whether it's a cross-build configure call. The values are used when configuring and building, to ensure
that things like compilers are found correctly.
We use unixPathSeparators
to pass an install prefix with forward slashes even on Windows,
to avoid escaping issues when using configure.