summaryrefslogtreecommitdiffstats
path: root/cmake/QtPublicWasmToolchainHelpers.cmake
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2021-09-24 17:06:02 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2021-09-27 18:29:44 +0200
commitc7d9e05a2bd55f03a01b5319338828197e81bc39 (patch)
tree7d7444f379ac88101916f5471e63ee5ffe422e1b /cmake/QtPublicWasmToolchainHelpers.cmake
parenta0e56294c1e80f34147c5a992b314776e1b6c757 (diff)
CMake: Split and clean up WebAssembly auto-detection code
Split qt_auto_detect_wasm into multiple helper functions and place them in a new QtPublicWasmToolchainHelpers.cmake file. We want to use them to try and detect the CMake toolchain file location from within the generated qt.toolchain.cmake file whem configuring a user project. Pick-to: 6.2 Task-number: QTBUG-96843 Change-Id: Id8c2350e6dbe3c994b435681353bdaee114249a7 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'cmake/QtPublicWasmToolchainHelpers.cmake')
-rw-r--r--cmake/QtPublicWasmToolchainHelpers.cmake55
1 files changed, 55 insertions, 0 deletions
diff --git a/cmake/QtPublicWasmToolchainHelpers.cmake b/cmake/QtPublicWasmToolchainHelpers.cmake
new file mode 100644
index 0000000000..53d74e0234
--- /dev/null
+++ b/cmake/QtPublicWasmToolchainHelpers.cmake
@@ -0,0 +1,55 @@
+# Assuming EMSDK == /path/emsdk
+#
+# Then we expect /path/emsdk/.emscripten file to contain the following line
+# EMSCRIPTEN_ROOT = emsdk_path + '/upstream/emscripten'
+#
+# then we set out_var to '/upstream/emscripten', so it's not a full path
+function(__qt_internal_get_emroot_path_suffix_from_emsdk_env out_var)
+ # Query EMSCRIPTEN_ROOT path.
+ file(READ "$ENV{EMSDK}/.emscripten" ver)
+ string(REGEX MATCH "EMSCRIPTEN_ROOT.*$" EMROOT "${ver}")
+ string(REGEX MATCH "'([^' ]*)'" EMROOT2 "${EMROOT}")
+ string(REPLACE "'" "" EMROOT_PATH "${EMROOT2}")
+
+ set(${out_var} "${EMROOT_PATH}" PARENT_SCOPE)
+endfunction()
+
+function(__qt_internal_get_emscripten_cmake_toolchain_file_path_from_emsdk_env emroot_path out_var)
+ set(wasm_toolchain_file "$ENV{EMSDK}/${emroot_path}/cmake/Modules/Platform/Emscripten.cmake")
+ set(${out_var} "${wasm_toolchain_file}" PARENT_SCOPE)
+endfunction()
+
+function(__qt_internal_query_emsdk_version emroot_path is_fatal out_var)
+ # get emscripten version
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
+ set(EXECUTE_COMMANDPATH "$ENV{EMSDK}/${emroot_path}/emcc.bat")
+ else()
+ set(EXECUTE_COMMANDPATH "$ENV{EMSDK}/${emroot_path}/emcc")
+ endif()
+
+ file(TO_NATIVE_PATH "${EXECUTE_COMMANDPATH}" EXECUTE_COMMAND)
+ execute_process(COMMAND ${EXECUTE_COMMAND} --version
+ OUTPUT_VARIABLE emOutput
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_VARIABLE emrun_error
+ RESULT_VARIABLE result)
+ message(DEBUG "emcc --version output: ${emOutput}")
+
+ if(NOT emOutput)
+ if(is_fatal)
+ message(FATAL_ERROR
+ "Couldn't determine Emscripten version from running ${EXECUTE_COMMAND} --version. "
+ "Error: ${emrun_error}")
+ endif()
+ set(${out_var} "" PARENT_SCOPE)
+ else()
+ string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" CMAKE_EMSDK_REGEX_VERSION "${emOutput}")
+ set(${out_var} "${CMAKE_EMSDK_REGEX_VERSION}" PARENT_SCOPE)
+ endif()
+endfunction()
+
+function(__qt_internal_get_emcc_recommended_version out_var)
+ # This version of Qt needs this version of emscripten.
+ set(QT_EMCC_RECOMMENDED_VERSION "2.0.14")
+ set(${out_var} "${QT_EMCC_RECOMMENDED_VERSION}" PARENT_SCOPE)
+endfunction()