summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2021-07-06 07:57:46 +0200
committerMichal Klocek <michal.klocek@qt.io>2021-07-07 01:04:18 +0200
commitb1a6adf731828b1f68f51480eeb21dd9e7d3ba1e (patch)
treead24c582e89bc4a19a3431dbd130feed5817c698 /cmake
parent05a7dba5c2733b5893fbea8aac89af5df13d53fb (diff)
Add arm optimization flags to cmake build
Pick-to: dev Change-Id: Ibab4630fd226f46f58d08c603436dc2c378212ec Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r--cmake/Functions.cmake55
1 files changed, 55 insertions, 0 deletions
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()