summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2023-08-15 18:43:48 +0200
committerMichal Klocek <michal.klocek@qt.io>2023-11-14 11:52:17 +0100
commita09f5c4d5ae11ac338f09de044b72b6fc6ac00cc (patch)
treee3ce23cbd8361cc99abdb29fa3c58f2605d49226
parent71b4ebbf035d7a08184a43b896c4d51e1391421a (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.cmake8
-rw-r--r--cmake/Functions.cmake26
-rw-r--r--configure.cmake4
-rw-r--r--src/CMakeLists.txt27
-rw-r--r--src/host/BUILD.toolchain.gn.in1
-rw-r--r--src/host/CMakeLists.txt3
-rw-r--r--src/pdf/CMakeLists.txt5
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