summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt6
-rw-r--r--cmake/Functions.cmake55
-rw-r--r--src/core/CMakeLists.txt34
-rw-r--r--src/core/api/configure.cmake16
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."