summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2020-06-26 20:45:11 +0200
committerJoerg Bornemann <joerg.bornemann@qt.io>2020-06-29 12:47:59 +0200
commit943340222e841904707dc4f3e08f0df57d2e5c28 (patch)
treeddafe167749aeb63dfc7c806a5aabc9e5c50df21 /cmake
parent8df4caf554e81e7de9e0154a15544426e99acbbc (diff)
CMake: Generate qdevice.pri when cross-building
This adds the CMake equivalent to the classical -device-option key=value configure argument: -DQT_QMAKE_DEVICE_OPTIONS=key1=value1[;keyN=valueN] The keys and values get dumped verbatim into qdevice.pri. This patch also ports the machineTuple configure test. Its result is written into qdevice.pri as value for the GCC_MACHINE_DUMP variable. Change-Id: I29f2323fd87639fafaed99ec7446c7ee75504705 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r--cmake/QtBaseGlobalTargets.cmake1
-rw-r--r--cmake/QtBuild.cmake22
-rw-r--r--cmake/QtFeature.cmake19
3 files changed, 42 insertions, 0 deletions
diff --git a/cmake/QtBaseGlobalTargets.cmake b/cmake/QtBaseGlobalTargets.cmake
index 66b71421e3..de5aaca2a1 100644
--- a/cmake/QtBaseGlobalTargets.cmake
+++ b/cmake/QtBaseGlobalTargets.cmake
@@ -293,6 +293,7 @@ qt_feature_module_end(GlobalConfig OUT_VAR_PREFIX "__GlobalConfig_")
qt_generate_global_config_pri_file()
qt_generate_global_module_pri_file()
+qt_generate_global_device_pri_file()
qt_generate_qmake_wrapper_for_target()
add_library(Qt::GlobalConfig ALIAS GlobalConfig)
diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake
index daa98d9498..4ddb61aec3 100644
--- a/cmake/QtBuild.cmake
+++ b/cmake/QtBuild.cmake
@@ -1244,6 +1244,28 @@ QT_PATCH_VERSION = ${PROJECT_VERSION_PATCH}
qt_install(FILES "${qconfig_pri_target_path}" DESTINATION ${INSTALL_MKSPECSDIR})
endfunction()
+# Creates mkspecs/qdevice.pri which contains target device information for cross-builds.
+# The content of QT_QMAKE_DEVICE_OPTIONS is written verbatim into qdevice.pri.
+function(qt_generate_global_device_pri_file)
+ if(NOT CMAKE_CROSSCOMPILING)
+ return()
+ endif()
+
+ qt_path_join(qdevice_pri_target_path ${PROJECT_BINARY_DIR} ${INSTALL_MKSPECSDIR} "qdevice.pri")
+
+ set(content "")
+ foreach(opt ${QT_QMAKE_DEVICE_OPTIONS})
+ string(APPEND content "${opt}\n")
+ endforeach()
+
+ if(TEST_machine_tuple)
+ string(APPEND content "GCC_MACHINE_DUMP = ${TEST_machine_tuple}\n")
+ endif()
+
+ file(GENERATE OUTPUT "${qdevice_pri_target_path}" CONTENT "${content}")
+ qt_install(FILES "${qdevice_pri_target_path}" DESTINATION ${INSTALL_MKSPECSDIR})
+endfunction()
+
function(qt_get_build_parts out_var)
set(parts "libs")
diff --git a/cmake/QtFeature.cmake b/cmake/QtFeature.cmake
index c0e1313a45..bdbdae9611 100644
--- a/cmake/QtFeature.cmake
+++ b/cmake/QtFeature.cmake
@@ -858,6 +858,25 @@ function(qt_config_compile_test_x86simd extension label)
set(TEST_subarch_${extension} "${TEST_X86SIMD_${extension}}" CACHE INTERNAL "${label}")
endfunction()
+function(qt_config_compile_test_machine_tuple label)
+ if(DEFINED TEST_MACHINE_TUPLE OR NOT (GCC OR CLANG))
+ return()
+ endif()
+
+ message(STATUS "Performing Test ${label}")
+ execute_process(COMMAND "${CMAKE_CXX_COMPILER}" -dumpmachine
+ OUTPUT_VARIABLE output
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ RESULT_VARIABLE exit_code)
+ if(exit_code EQUAL 0)
+ set(status_label "Success")
+ else()
+ set(status_label "Failed")
+ endif()
+ message(STATUS "Performing Test ${label} - ${status_label}")
+ set(TEST_machine_tuple "${output}" CACHE INTERNAL "${label}")
+endfunction()
+
function(qt_make_features_available target)
if(NOT "${target}" MATCHES "^${QT_CMAKE_EXPORT_NAMESPACE}::[a-zA-Z0-9_-]*$")
message(FATAL_ERROR "${target} does not match ${QT_CMAKE_EXPORT_NAMESPACE}::[a-zA-Z0-9_-]*. INVALID NAME.")