From 8899143612d61faa1e41faa4c0c0288b1724ffd0 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Thu, 17 Jun 2021 10:53:08 +0200 Subject: Improve toolchain generation Set is_clang and calculate v8-host arch for other hosts than x64. Change-Id: I5622839840141ed60328c8bd736e4cada3e0ecee Reviewed-by: Michal Klocek (cherry picked from commit 9196f743cec64840c711d00a8e906b480ba1451e) Reviewed-by: Qt Cherry-pick Bot --- cmake/Functions.cmake | 88 ++++++++++++++++++++++++++++++------------ src/host/BUILD.toolchain.gn.in | 4 +- src/host/CMakeLists.txt | 2 +- 3 files changed, 66 insertions(+), 28 deletions(-) diff --git a/cmake/Functions.cmake b/cmake/Functions.cmake index 37d097b6a..3f01646ed 100644 --- a/cmake/Functions.cmake +++ b/cmake/Functions.cmake @@ -362,36 +362,74 @@ function(qt_internal_add_external_project_dependency_to_root_project name) endfunction() function(get_gn_arch result arch) - if("${arch}" STREQUAL "i386") - set(${result} "x86" PARENT_SCOPE) - elseif("${arch}" STREQUAL "x86_64") - set(${result} "x64" PARENT_SCOPE) - elseif("${arch}" STREQUAL "arm") - set(${result} "arm" PARENT_SCOPE) - elseif("${arch}" STREQUAL "arm64") - set(${result} "arm64" PARENT_SCOPE) - elseif("${arch}" STREQUAL "mipsel") - set(${result} "mipsel" PARENT_SCOPE) - elseif("${arch}" STREQUAL "mipsel64") - set(${result} "mips64el" PARENT_SCOPE) - else() - message(DEBUG "Unsupported achitecture: ${arch}") - endif() + if(arch STREQUAL "i386") + set(${result} "x86" PARENT_SCOPE) + elseif(arch STREQUAL "x86_64") + set(${result} "x64" PARENT_SCOPE) + elseif(arch STREQUAL "arm") + set(${result} "arm" PARENT_SCOPE) + elseif(arch STREQUAL "arm64") + set(${result} "arm64" PARENT_SCOPE) + elseif(arch STREQUAL "mipsel") + set(${result} "mipsel" PARENT_SCOPE) + elseif(arch STREQUAL "mipsel64") + set(${result} "mips64el" PARENT_SCOPE) + else() + message(DEBUG "Unsupported architecture: ${arch}") + endif() +endfunction() + +function(get_v8_arch result targetArch hostArch) + set(list32 i386 arm mipsel) + if(hostArch STREQUAL targetArch) + set(${result} "${targetArch}" PARENT_SCOPE) + elseif(targetArch IN_LIST list32) + # 32bit target which needs a 32bit compatible host + if(hostArch STREQUAL "x86_64") + set(${result} "i386" PARENT_SCOPE) + elseif(hostArch STREQUAL "arm64") + set(${result} "arm" PARENT_SCOPE) + elseif(hostArch STREQUAL "mips64") + set(${result} "mipsel" PARENT_SCOPE) + elseif(hostArch STREQUAL "mipsel64") + set(${result} "mipsel" PARENT_SCOPE) + else() + message(DEBUG "Unsupported architecture: ${hostArch}") + endif() + else() + # assume 64bit target which matches 64bit host + set(${result} "${hostArch}" PARENT_SCOPE) + endif() endfunction() -function(get_v8_arch result targetArch) - set(list32 i386 arm mipsel) - if("${targetArch}" IN_LIST list32) - set(${result} "i386" PARENT_SCOPE) - else() - set(${result} "x86_64" PARENT_SCOPE) - endif() +function(get_gn_os result) + if(WIN32) + set(${result} "win" PARENT_SCOPE) + elseif(LINUX) + set(${result} "linux" PARENT_SCOPE) + elseif(MACOS) + set(${result} "mac" PARENT_SCOPE) + elseif(IOS) + set(${result} "ios" PARENT_SCOPE) + else() + message(DEBUG "Unrecognized OS") + endif() +endfunction() + +function(get_gn_is_clang result) + if(CLANG) + set(${result} "true" PARENT_SCOPE) + else() + set(${result} "false" PARENT_SCOPE) + endif() endfunction() -function(configure_gn_toolchain name cpuType v8CpuType toolchainIn toolchainOut) +function(configure_gn_toolchain name binTargetCpu v8TargetCpu toolchainIn toolchainOut) set(GN_TOOLCHAIN ${name}) - get_gn_arch(GN_CPU ${cpuType}) - get_gn_arch(GN_V8_CPU ${v8CpuType}) + get_gn_os(GN_OS) + get_gn_is_clang(GN_IS_CLANG) + get_gn_arch(GN_CPU ${binTargetCpu}) + get_gn_arch(GN_V8_CPU ${v8TargetCpu}) configure_file(${toolchainIn} ${toolchainOut}/BUILD.gn @ONLY) endfunction() diff --git a/src/host/BUILD.toolchain.gn.in b/src/host/BUILD.toolchain.gn.in index c1bf3845b..df62aa88e 100644 --- a/src/host/BUILD.toolchain.gn.in +++ b/src/host/BUILD.toolchain.gn.in @@ -8,10 +8,10 @@ gcc_toolchain("@GN_TOOLCHAIN@") { nm = "@CMAKE_NM@" extra_cppflags = "" toolchain_args = { - current_os = "linux" + current_os = "@GN_OS@" current_cpu = "@GN_CPU@" v8_current_cpu = "@GN_V8_CPU@" - is_clang = false + is_clang = @GN_IS_CLANG@ use_gold = false } } diff --git a/src/host/CMakeLists.txt b/src/host/CMakeLists.txt index 86249d74c..9053d1e59 100644 --- a/src/host/CMakeLists.txt +++ b/src/host/CMakeLists.txt @@ -23,7 +23,7 @@ configure_gn_toolchain(host ${TEST_architecture_arch} ${TEST_architecture_arch} ${WEBENGINE_ROOT_SOURCE_DIR}/src/host/BUILD.toolchain.gn.in ${buildDir}/host_toolchain ) -get_v8_arch(GN_V8_HOST_CPU ${GN_TARGET_CPU}) +get_v8_arch(GN_V8_HOST_CPU ${GN_TARGET_CPU} ${TEST_architecture_arch}) configure_gn_toolchain(v8 ${GN_V8_HOST_CPU} ${GN_TARGET_CPU} ${WEBENGINE_ROOT_SOURCE_DIR}/src/host/BUILD.toolchain.gn.in ${buildDir}/v8_toolchain) -- cgit v1.2.3