CMake/crossplatform/crossplatform.cmake
2024-12-30 22:37:58 +01:00

94 lines
3.3 KiB
CMake
Executable File

#
# Copyright (C) 2018-2025 QuasarApp.
# Distributed under the MIT software license, see the accompanying
# Everyone is permitted to copy and distribute verbatim copies
# of this license document, but changing it is not allowed.
#
if(DEFINED CROSSPLATFORM_BUILD_TOOLCHAIN)
return()
else()
set(CROSSPLATFORM_BUILD_TOOLCHAIN 1)
endif()
# use TARGET_PLATFORM_TOOLCHAIN
# This module include crossplatform toolchains by target platform.
# To select target platform set the TARGET_PLATFORM_TOOLCHAIN define.
# Availabel platforms:
# * wasm32
# * win32-g++
# * win64-g++
#
# Note
# For add full support of the wasm32 build you shold use the initWasmSupport method. This method prepare static build for wasm executable and qt resources.
#
# initWasmSupport arguments:
# * name - This is name of your initialize targets. You can set it as a CMAKE_PROJECT
# * deployFile - This is path to the deploy file of the cqtdepoyer tool. Use it for deploy your site.
if (NOT DEFINED TARGET_PLATFORM_TOOLCHAIN)
message(STATUS "The crossplatform build is disabled")
return()
endif()
set(CROSSPLATFORM_BUILD_TOOLCHAIN_PATH ${CMAKE_CURRENT_LIST_DIR}/${CMAKE_HOST_SYSTEM_NAME}/${TARGET_PLATFORM_TOOLCHAIN}.cmake)
message("CROSSPLATFORM_BUILD_TOOLCHAIN_PATH = ${CROSSPLATFORM_BUILD_TOOLCHAIN_PATH}")
if(EXISTS ${CROSSPLATFORM_BUILD_TOOLCHAIN_PATH})
message(STATUS "${TARGET_PLATFORM_TOOLCHAIN} exits in ${CROSSPLATFORM_BUILD_TOOLCHAIN_PATH}")
include("${CROSSPLATFORM_BUILD_TOOLCHAIN_PATH}")
else(EXISTS ${CROSSPLATFORM_BUILD_TOOLCHAIN_PATH})
message(STATUS "${TARGET_PLATFORM_TOOLCHAIN} not exits in ${CROSSPLATFORM_BUILD_TOOLCHAIN_PATH}")
endif()
if (DEFINED TARGET_PLATFORM_TOOLCHAIN)
if (${TARGET_PLATFORM_TOOLCHAIN} STREQUAL "wasm32")
set(QA_WASM32 ON CACHE BOOL "Custom define that enabled only when wasm32 platform are used" FORCE)
endif(${TARGET_PLATFORM_TOOLCHAIN} STREQUAL "wasm32")
endif(DEFINED TARGET_PLATFORM_TOOLCHAIN)
function(initWasmSupport name deployFile)
if(NOT TARGET ${name})
message("the ${name} target is not created!")
return()
endif(NOT TARGET ${name})
message("init support wasm build for target ${name}")
if (DEFINED TARGET_PLATFORM_TOOLCHAIN)
if (${TARGET_PLATFORM_TOOLCHAIN} STREQUAL "wasm32")
message(added deploy step for site)
set_target_properties(${name} PROPERTIES OUTPUT_NAME "${name}.js")
addDeployFromFile(${deployFile})
include(${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../QtStaticCMake/QtStaticCMake.cmake)
qt_generate_plugin_import(${name} VERBOSE)
# EXTRA_PLUGIN are the one required by plugin loaded by qt_generate_plugin_import
# It's not automatic yet :( All this workflow might change in future version of qt
# with better and better cmake support
qt_generate_qml_plugin_import(${name}
QML_SRC ${CMAKE_CURRENT_SOURCE_DIR}
EXTRA_PLUGIN
QtQuickVirtualKeyboardPlugin
QtQuickVirtualKeyboardSettingsPlugin
QtQuickVirtualKeyboardStylesPlugin
QmlFolderListModelPlugin
QQuickLayoutsPlugin
VERBOSE
)
endif(${TARGET_PLATFORM_TOOLCHAIN} STREQUAL "wasm32")
endif(DEFINED TARGET_PLATFORM_TOOLCHAIN)
endfunction()