diff options
| author | Michal Klocek <michal.klocek@qt.io> | 2023-08-15 18:43:48 +0200 |
|---|---|---|
| committer | Michal Klocek <michal.klocek@qt.io> | 2023-11-14 11:52:17 +0100 |
| commit | a09f5c4d5ae11ac338f09de044b72b6fc6ac00cc (patch) | |
| tree | e3ce23cbd8361cc99abdb29fa3c58f2605d49226 | |
| parent | 71b4ebbf035d7a08184a43b896c4d51e1391421a (diff) | |
Add android on windows build support
Add builds for android on windows platform. These
are required by qt release scripts to create armv7 targets
on windows.
Note new 'is_mingw' setting for toolchainis. This required
as andorid on windows build use mingw toolchain as a
host toolchian. Main gn_arg argument 'is_mingw' is used
only for target/default toolchian, in this case gn drops
toolchian_args. However toolchain_args are evaluated in
case of secondary/host toolchain.
Override v8 snapshot toolchain to avoid pulling windows
(msvc or clang) toolchains and creating yet another set of
toolchain targets.
Task-number: QTBUG-83459
Change-Id: I927872d69e363277b9f90c3adda28518d6b6bb13
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
| -rw-r--r-- | cmake/FindGn.cmake | 8 | ||||
| -rw-r--r-- | cmake/Functions.cmake | 26 | ||||
| -rw-r--r-- | configure.cmake | 4 | ||||
| -rw-r--r-- | src/CMakeLists.txt | 27 | ||||
| -rw-r--r-- | src/host/BUILD.toolchain.gn.in | 1 | ||||
| -rw-r--r-- | src/host/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | src/pdf/CMakeLists.txt | 5 |
7 files changed, 48 insertions, 26 deletions
diff --git a/cmake/FindGn.cmake b/cmake/FindGn.cmake index 3f25bb585..fd03b7346 100644 --- a/cmake/FindGn.cmake +++ b/cmake/FindGn.cmake @@ -7,10 +7,10 @@ endif() find_program(Gn_EXECUTABLE NAMES gn PATHS "${WEBENGINE_ROOT_BUILD_DIR}/install/bin" NO_DEFAULT_PATH) if(NOT QT_HOST_PATH STREQUAL "") find_program(Gn_EXECUTABLE NAMES gn PATHS ${QT_HOST_PATH}/${INSTALL_LIBEXECDIR} NO_DEFAULT_PATH) -endif() -# script mode does not have QT_HOST_PATH or INSTALL_LIBEXECDIR instead it uses QT_HOST_GN_PATH -if(NOT QT_HOST_GN_PATH STREQUAL "") - find_program(Gn_EXECUTABLE NAMES gn PATHS ${QT_HOST_GN_PATH} NO_DEFAULT_PATH) + # note: mingw installs with INSTALL_LIBEXECDIR = bin, + # however android on windows has INSTALL_LIBEXECDIR = libexec, + # so cover this case also + find_program(Gn_EXECUTABLE NAMES gn PATHS ${QT_HOST_PATH}/${INSTALL_BINDIR} NO_DEFAULT_PATH) endif() find_program(Gn_EXECUTABLE NAMES gn) diff --git a/cmake/Functions.cmake b/cmake/Functions.cmake index 9fb4299c5..039b4daf7 100644 --- a/cmake/Functions.cmake +++ b/cmake/Functions.cmake @@ -717,6 +717,15 @@ function(get_gn_is_clang result) endif() endfunction() + +function(get_gn_is_mingw result) + if(MINGW) + set(${result} "true" PARENT_SCOPE) + else() + set(${result} "false" PARENT_SCOPE) + endif() +endfunction() + function(get_ios_sysroot result arch) if(NOT CMAKE_APPLE_ARCH_SYSROOTS) message(FATAL_ERROR "CMAKE_APPLE_ARCH_SYSROOTS not set.") @@ -734,6 +743,7 @@ function(configure_gn_toolchain name binTargetCpu v8TargetCpu toolchainIn toolch set(GN_TOOLCHAIN ${name}) get_gn_os(GN_OS) get_gn_is_clang(GN_IS_CLANG) + get_gn_is_mingw(GN_IS_MINGW) get_gn_arch(GN_CPU ${binTargetCpu}) get_gn_arch(GN_V8_CPU ${v8TargetCpu}) configure_file(${toolchainIn} ${toolchainOut}/BUILD.gn @ONLY) @@ -1086,6 +1096,14 @@ macro(append_toolchain_setup) endif() if(ANDROID) list(APPEND gnArgArg target_os="android") + if(CMAKE_HOST_WIN32) + list(APPEND gnArgArg + host_toolchain="/${buildDir}/host_toolchain:host" + host_cpu="x64" + v8_snapshot_toolchain="/${buildDir}/v8_toolchain:v8" + target_cpu="${cpu}" + ) + endif() endif() endmacro() @@ -1234,17 +1252,15 @@ function(add_gn_command) endforeach() list(TRANSFORM output PREPEND "${arg_BUILDDIR}/") - if(QT_HOST_PATH) - set(QT_HOST_GN_PATH ${QT_HOST_PATH}/${INSTALL_LIBEXECDIR}) - endif() - add_custom_command( OUTPUT ${output} COMMAND ${CMAKE_COMMAND} -DBUILD_DIR=${arg_BUILDDIR} -DSOURCE_DIR=${CMAKE_CURRENT_LIST_DIR} -DMODULE=${arg_MODULE} - -DQT_HOST_GN_PATH=${QT_HOST_GN_PATH} + -DQT_HOST_PATH=${QT_HOST_PATH} + -DINSTALL_LIBEXECDIR=${INSTALL_LIBEXECDIR} + -DINSTALL_BINDIR=${INSTALL_BINDIR} -DPython3_EXECUTABLE=${Python3_EXECUTABLE} -DGN_THREADS=$ENV{QTWEBENGINE_GN_THREADS} -DQT_ALLOW_SYMLINK_IN_PATHS=${QT_ALLOW_SYMLINK_IN_PATHS} diff --git a/configure.cmake b/configure.cmake index 3d383fb50..7da77ef70 100644 --- a/configure.cmake +++ b/configure.cmake @@ -481,8 +481,8 @@ add_check_for_support( ) add_check_for_support( MODULES QtPdf - CONDITION LINUX OR (WIN32 AND NOT WIN_ARM_64) OR MACOS OR IOS OR (ANDROID AND NOT CMAKE_HOST_WIN32) - MESSAGE "Build can be done only on Linux, Windows, macO, iOS and Android(on non-Windows hosts only)." + CONDITION LINUX OR (WIN32 AND NOT WIN_ARM_64) OR MACOS OR IOS OR ANDROID + MESSAGE "Build can be done only on Linux, Windows, macO, iOS and Android." ) if(LINUX AND CMAKE_CROSSCOMPILING) get_gn_arch(testArch ${TEST_architecture_arch}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 748911a38..b425abd8a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -192,29 +192,32 @@ if(CMAKE_CROSSCOMPILING AND NOT IOS AND NOT MACOS) endif() # install gn for cross build -if((LINUX OR MACOS) AND INSTALL_GN) - get_install_config(installConfig) - install( - PROGRAMS ${installDir}/bin/gn - CONFIGURATIONS ${installConfig} - RUNTIME DESTINATION "${INSTALL_LIBEXECDIR}" - ) +if((LINUX OR MACOS OR WIN32) AND INSTALL_GN) if(NOT QT_WILL_INSTALL) - add_custom_target(copy-gn ALL DEPENDS - ${QT_BUILD_DIR}/${INSTALL_LIBEXECDIR}/gn + set(copyOuput + ${QT_BUILD_DIR}/${INSTALL_LIBEXECDIR}/gn${CMAKE_EXECUTABLE_SUFFIX} ) if(Gn_FOUND) + set(copyInput ${Gn_EXECUTABLE}) set(copyDep ${Gn_EXECUTABLE}) else() + set(copyInput ${installDir}/bin/gn${CMAKE_EXECUTABLE_SUFFIX}) set(copyDep gn) endif() + add_custom_target(copy-gn ALL DEPENDS ${copyOutput}) add_custom_command( - OUTPUT ${QT_BUILD_DIR}/${INSTALL_LIBEXECDIR}/gn - COMMAND ${CMAKE_COMMAND} -E copy ${installDir}/bin/gn - ${QT_BUILD_DIR}/${INSTALL_LIBEXECDIR} + OUTPUT ${copyOutput} + COMMAND ${CMAKE_COMMAND} -E copy ${copyInput} ${QT_BUILD_DIR}/${INSTALL_LIBEXECDIR} DEPENDS ${copyDep} USES_TERMINAL ) + else() + get_install_config(installConfig) + install( + PROGRAMS "${installDir}/bin/gn${CMAKE_EXECUTABLE_SUFFIX}" + CONFIGURATIONS ${installConfig} + RUNTIME DESTINATION "${INSTALL_LIBEXECDIR}" + ) endif() endif() diff --git a/src/host/BUILD.toolchain.gn.in b/src/host/BUILD.toolchain.gn.in index df62aa88e..1beb9ee6d 100644 --- a/src/host/BUILD.toolchain.gn.in +++ b/src/host/BUILD.toolchain.gn.in @@ -12,6 +12,7 @@ gcc_toolchain("@GN_TOOLCHAIN@") { current_cpu = "@GN_CPU@" v8_current_cpu = "@GN_V8_CPU@" is_clang = @GN_IS_CLANG@ + is_mingw = @GN_IS_MINGW@ use_gold = false } } diff --git a/src/host/CMakeLists.txt b/src/host/CMakeLists.txt index d90c6dea2..b5ce918ab 100644 --- a/src/host/CMakeLists.txt +++ b/src/host/CMakeLists.txt @@ -50,9 +50,10 @@ if(QT_FEATURE_qtpdf_build) endif() # TODO: this could be run as part of main configure with execute_process +# Skip for qtpdf(android) if(CMAKE_CXX_COMPILER_ID STREQUAL GNU AND TEST_architecture_arch STREQUAL "x86_64" -AND GN_TARGET_CPU STREQUAL "arm") + AND GN_TARGET_CPU STREQUAL "arm" AND NOT MINGW AND NOT ANDROID) try_compile( has32HostCompiler "${CMAKE_CURRENT_BINARY_DIR}/config.tests/hostcompiler" diff --git a/src/pdf/CMakeLists.txt b/src/pdf/CMakeLists.txt index 8070eb39a..9d1f798f8 100644 --- a/src/pdf/CMakeLists.txt +++ b/src/pdf/CMakeLists.txt @@ -71,7 +71,7 @@ add_dependencies(docs generate_pdf_attributions) # TOOLCHAIN SETUP ## -if(LINUX OR MINGW) +if(LINUX OR MINGW OR ANDROID) setup_toolchains() endif() @@ -132,6 +132,7 @@ foreach(arch ${archs}) enable_web_speech=false chrome_pgo_phase=0 strip_absolute_paths_from_debug_symbols=false + v8_enable_webassembly=false ) if(LINUX OR ANDROID) @@ -160,7 +161,7 @@ foreach(arch ${archs}) CONDITION QT_FEATURE_pdf_bitcode ) endif() - if(WIN32) + if(WIN32 OR ANDROID) list(APPEND gnArgArg ninja_use_custom_environment_files=false safe_browsing_mode=0 |
