diff options
-rw-r--r-- | CMakeLists.txt | 6 | ||||
-rw-r--r-- | cmake/Functions.cmake | 55 | ||||
-rw-r--r-- | src/core/CMakeLists.txt | 34 | ||||
-rw-r--r-- | src/core/api/configure.cmake | 16 |
4 files changed, 104 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b55f2435..aecea8aed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -252,13 +252,15 @@ endif() if(CMAKE_CROSSCOMPILING) externalproject_add(hostBuild SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src/core/configure - BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/configure - PREFIX cross + BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/host + PREFIX host USES_TERMINAL_BUILD ON CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${QT_HOST_PATH}/lib/cmake/Qt6/qt.toolchain.cmake -DWEBENGINE_ROOT_BUILD_DIR=${CMAKE_CURRENT_BINARY_DIR} -DWEBENGINE_ROOT_SOURCE_DIR=${WEBENGINE_ROOT_SOURCE_DIR} -DGN_TARGET_CPU=${TEST_architecture_arch} + -DCMAKE_C_FLAGS= + -DCMAKE_CXX_FLAGS= ) externalproject_add_stepdependencies(qtwebengine install hostBuild) endif() diff --git a/cmake/Functions.cmake b/cmake/Functions.cmake index 8bdeaa2ad..c972b8f4e 100644 --- a/cmake/Functions.cmake +++ b/cmake/Functions.cmake @@ -405,3 +405,58 @@ function(create_pkg_config_host_wrapper wrapperName wrapperCmd) ) file(CHMOD ${wrapperName} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE) endfunction() + +function(extract_cflag result cflag) + set(i 1) + while(NOT "x${CMAKE_CXX_COMPILER_ARG${i}}" STREQUAL "x") + list(APPEND cflags ${CMAKE_CXX_COMPILER_ARG${i}}) + math(EXPR i "${i} + 1") + endwhile() + list(APPEND cflags ${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS}) + message(DEBUG "Found cflags: ${cflags}") + if (cflags MATCHES "-${cflag}=([^ ]+)") + set(${result} ${CMAKE_MATCH_1} PARENT_SCOPE) + return() + endif() + if (cflags MATCHES "-${cflag}") + set(${result} ON PARENT_SCOPE) + else() + set(${result} OFF PARENT_SCOPE) + endif() +endfunction() + +function(extend_gn_list_cflag outList) + qt_parse_all_arguments(GN "extend_gn_list_cflag" "" "" "ARG;CFLAG" "${ARGN}") + extract_cflag(cflag "${GN_CFLAG}") + if(cflag) + set(${outList} "${${outList}}" "${GN_ARG}=\"${cflag}\"" PARENT_SCOPE) + endif() +endfunction() + +function(get_arm_version result cflag) + if(cflag MATCHES "^armv([0-9])") + set(${result} ${CMAKE_MATCH_1} PARENT_SCOPE) + endif() +endfunction() + +function(check_thumb result) + extract_cflag(thumb "mthumb") + if(thumb) + set(${result} TRUE PARENT_SCOPE) + return() + else() + extract_cflag(marm "marm") + if(marm) + set(${result} FALSE PARENT_SCOPE) + return() + else() + extract_cflag(march "march") + get_arm_version(arm_version ${march}) + if(arm_version GREATER_EQUAL 7) + set(${result} TRUE PARENT_SCOPE) + return() + endif() + endif() + endif() + set(${result} FALSE PARENT_SCOPE) +endfunction() diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 58cf9c48b..7feb1ec40 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -514,6 +514,40 @@ foreach(config ${configs}) ARGS use_xscrnsaver CONDITION XSCRNSAVER_FOUND ) + + if(CMAKE_CROSSCOMPILING AND cpu STREQUAL "arm") + extend_gn_list_cflag(gnArgArg + ARG arm_tune + CFLAG mtune + ) + extend_gn_list_cflag(gnArgArg + ARG arm_float_abi + CFLAG mfloat-abi + ) + extend_gn_list_cflag(gnArgArg + ARG arm_arch + CFLAG march + ) + extract_cflag(cflag "mfpu") + get_arm_version(arm_version "${cflag}") + extend_gn_list(gnArgArg + ARGS arm_use_neon + CONDITION (arm_version GREATER_EQUAL 8) OR ("${cflag}" MATCHES ".*neon.*") + ) + if(arm_version EQUAL 7 AND NOT "${cflag}" MATCHES ".*neon.*") + # If the toolchain does not explicitly specify to use NEON instructions + # we use arm_neon_optional for ARMv7 + list(APPEND gnArgArg arm_optionally_use_neon=true) + endif() + check_thumb(armThumb) + extend_gn_list(gnArgArg + ARGS arm_use_thumb + CONDITION armThumb + ) + if(NOT armThumb AND NOT QT_FEATURE_system_ffmpeg) + list(APPEND gnArgArg media_use_ffmpeg=false use_webaudio_ffmpeg=false) + endif() + endif() endif() if(MACOS) diff --git a/src/core/api/configure.cmake b/src/core/api/configure.cmake index c8518f6ee..970b8a762 100644 --- a/src/core/api/configure.cmake +++ b/src/core/api/configure.cmake @@ -145,11 +145,17 @@ qt_configure_add_summary_entry( CONDITION UNIX ) qt_configure_end_summary_section() # end of "Qt WebEngineCore" section -#qt_configure_add_report_entry( -# TYPE WARNING -# MESSAGE "Thumb instruction set is required to build ffmpeg for QtWebEngine." -# CONDITION LINUX AND QT_FEATURE_webengine_embedded_build AND NOT QT_FEATURE_webengine_system_ffmpeg AND ( TEST_architecture_arch STREQUAL arm ) AND NOT QT_FEATURE_webengine_arm_thumb -#) +if(CMAKE_CROSSCOMPILING) + check_thumb(armThumb) + qt_configure_add_report_entry( + TYPE WARNING + MESSAGE "Thumb instruction set is required to build ffmpeg for QtWebEngine." + CONDITION LINUX + AND NOT QT_FEATURE_webengine_system_ffmpeg + AND TEST_architecture_arch MATCHES arm + AND NOT armThumb + ) +endif() qt_configure_add_report_entry( TYPE WARNING MESSAGE "V8 snapshot cannot be built. Most likely, the 32-bit host compiler does not work. Please make sure you have 32-bit devel environment installed." |