CMakeLists.txt revision 1.1 1 # check if we compile for IBM s390x
2 #
3 CHECK_C_SOURCE_COMPILES("
4 #ifndef __s390x__
5 #error
6 #endif
7 int main() {return 0;}
8 " HAS_S390X_SUPPORT)
9
10 #
11 # Check for IBM S390X - VX extensions
12 #
13 if(ZLIB_WITH_CRC32VX AND HAS_S390X_SUPPORT)
14 # preset the compiler specific flags
15 if (CMAKE_C_COMPILER_ID STREQUAL "Clang")
16 set(VGFMAFLAG "-fzvector")
17 else()
18 set(VGFMAFLAG "-mzarch")
19 endif(CMAKE_C_COMPILER_ID STREQUAL "Clang")
20
21 set(S390X_VX_TEST
22 "#ifndef __s390x__ \n\
23 #error \n\
24 #endif \n\
25 #include <vecintrin.h> \n\
26 int main(void) { \
27 unsigned long long a __attribute__((vector_size(16))) = { 0 }; \
28 unsigned long long b __attribute__((vector_size(16))) = { 0 }; \
29 unsigned char c __attribute__((vector_size(16))) = { 0 }; \
30 c = vec_gfmsum_accum_128(a, b, c); \
31 return c[0]; \
32 }")
33
34 # cflags already contains a valid march
35 set(CMAKE_REQUIRED_FLAGS "${VGFMAFLAG}")
36 check_c_source_compiles("${S390X_VX_TEST}" HAS_S390X_VX_SUPPORT)
37 unset(CMAKE_REQUIRED_FLAGS)
38
39 # or set march for our compile units
40 if(NOT HAS_S390X_VX_SUPPORT)
41 set(CMAKE_REQUIRED_FLAGS "${VGFMAFLAG} -march=z13")
42 check_c_source_compiles("${S390X_VX_TEST}" HAS_Z13_S390X_VX_SUPPORT)
43 unset(CMAKE_REQUIRED_FLAGS )
44 list(APPEND VGFMAFLAG "-march=z13")
45 endif(NOT HAS_S390X_VX_SUPPORT)
46
47 # prepare compiling for s390x
48 if(HAS_S390X_VX_SUPPORT OR HAS_Z13_S390X_VX_SUPPORT)
49 if(ZLIB_BUILD_SHARED)
50 target_sources(zlib
51 PRIVATE
52 crc32_vx.c
53 crc32_vx_hooks.h)
54 target_compile_definitions(zlib PUBLIC -DHAVE_S390X_VX=1)
55 endif(ZLIB_BUILD_SHARED)
56 if(ZLIB_BUILD_STATIC)
57 target_sources(zlibstatic
58 PRIVATE
59 crc32_vx.c
60 crc32_vx_hooks.h)
61 target_compile_definitions(zlibstatic PUBLIC -DHAVE_S390X_VX=1)
62 endif(ZLIB_BUILD_STATIC)
63 set_source_files_properties(
64 crc32_vx.c
65 PROPERTIES COMPILE_OPTIONS "${VGFMAFLAG}")
66 endif(HAS_S390X_VX_SUPPORT OR HAS_Z13_S390X_VX_SUPPORT)
67 endif(ZLIB_WITH_CRC32VX AND HAS_S390X_SUPPORT)
68