cmake: fix NEON checks

1 files changed +20 −3

  • • CMakeLists.txt
1diff --git a/CMakeLists.txt b/CMakeLists.txt
2index 545d934..7cea13a 100644
3--- a/CMakeLists.txt
4+++ b/CMakeLists.txt
5@@ -27,6 +27,23 @@ project(pixman
6
7 enable_language(ASM)
8
9+# check_source_compiles() does not support the ASM language, so provide our
10+# own helper that compiles a standalone .S file via try_compile().
11+function(check_asm_source_compiles SOURCE VAR)
12+ if(NOT DEFINED "${VAR}")
13+ set(_asm_src_file "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp/${VAR}.S")
14+ file(WRITE "${_asm_src_file}" "${SOURCE}")
15+ set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
16+ try_compile(${VAR} "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp" "${_asm_src_file}")
17+ if(${VAR})
18+ message(STATUS "Performing Test ${VAR} - Success")
19+ else()
20+ message(STATUS "Performing Test ${VAR} - Failed")
21+ endif()
22+ endif()
23+ set(${VAR} "${${VAR}}" CACHE INTERNAL "Test ${VAR}")
24+endfunction()
25+
26 include(GNUInstallDirs)
27 include(CheckCSourceCompiles)
28 include(CheckSourceCompiles)
29@@ -250,7 +267,7 @@ endif()
30 set(USE_ARM_SIMD FALSE)
31 if(PIXMAN_ENABLE_ARM_SIMD AND PIXMAN_ARM)
32 file(READ "${CMAKE_SOURCE_DIR}/arm-simd-test.S" PIXMAN_ARM_SIMD_TEST_SRC)
33- check_source_compiles(ASM "${PIXMAN_ARM_SIMD_TEST_SRC}" HAVE_ARM_SIMD)
34+ check_asm_source_compiles("${PIXMAN_ARM_SIMD_TEST_SRC}" HAVE_ARM_SIMD)
35 if(HAVE_ARM_SIMD)
36 set(USE_ARM_SIMD TRUE)
37 endif()
38@@ -260,7 +277,7 @@ endif()
39 set(USE_ARM_NEON FALSE)
40 if(PIXMAN_ENABLE_ARM_NEON AND PIXMAN_ARM)
41 file(READ "${CMAKE_SOURCE_DIR}/neon-test.S" PIXMAN_NEON_TEST_SRC)
42- check_source_compiles(ASM "${PIXMAN_NEON_TEST_SRC}" HAVE_ARM_NEON)
43+ check_asm_source_compiles("${PIXMAN_NEON_TEST_SRC}" HAVE_ARM_NEON)
44 if(HAVE_ARM_NEON)
45 set(USE_ARM_NEON TRUE)
46 endif()
47@@ -270,7 +287,7 @@ endif()
48 set(USE_ARM_A64_NEON FALSE)
49 if(PIXMAN_ENABLE_ARM_A64_NEON AND PIXMAN_AARCH64)
50 file(READ "${CMAKE_SOURCE_DIR}/a64-neon-test.S" PIXMAN_A64_NEON_TEST_SRC)
51- check_source_compiles(ASM "${PIXMAN_A64_NEON_TEST_SRC}" HAVE_ARM_A64_NEON)
52+ check_asm_source_compiles("${PIXMAN_A64_NEON_TEST_SRC}" HAVE_ARM_A64_NEON)
53 if(HAVE_ARM_A64_NEON)
54 set(USE_ARM_A64_NEON TRUE)
55 endif()