set(ICELAKE_FLAG "-march=icelake-server")
endif ()
+if(ARCH_PPC64EL)
+ set(ARCH_FLAG mcpu)
+else()
+ set(ARCH_FLAG march)
+endif()
+
# Detect best GNUCC_ARCH to tune for
if (CMAKE_COMPILER_IS_GNUCC AND NOT CROSS_COMPILE)
message(STATUS "gcc version ${CMAKE_C_COMPILER_VERSION}")
- if(ARCH_PPC64EL)
- set(ARCH_FLAG mcpu)
- else()
- set(ARCH_FLAG march)
- endif()
# If gcc doesn't recognise the host cpu, then mtune=native becomes
# generic, which isn't very good in some cases. march=native looks at
# cpuid info and then chooses the best microarch it can (and replaces
set(TUNE_FLAG native)
else()
set(TUNE_FLAG ${GNUCC_ARCH})
- message(STATUS "gcc will tune for ${GNUCC_ARCH}")
+ message(STATUS "gcc will tune for ${GNUCC_ARCH}, ${TUNE_FLAG}")
endif()
elseif (CMAKE_COMPILER_IS_CLANG AND NOT CROSS_COMPILE)
- message(STATUS "clang will tune for ${TUNE_FLAG}")
if (ARCH_IA32 OR ARCH_X86_64)
set(GNUCC_ARCH native)
set(TUNE_FLAG generic)
- if (BUILD_AVX512)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SKYLAKE_FLAG}")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SKYLAKE_FLAG}")
- elseif (BUILD_AVX2)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx2")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2")
- else()
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
- endif()
elseif(ARCH_AARCH64)
set(GNUCC_ARCH armv8)
set(TUNE_FLAG generic)
set(GNUCC_ARCH native)
set(TUNE_FLAG generic)
endif()
+ message(STATUS "clang will tune for ${GNUCC_ARCH}, ${TUNE_FLAG}")
elseif (CROSS_COMPILE)
set(GNUCC_ARCH generic)
set(TUNE_FLAG generic)
endif()
+if (ARCH_IA32 OR ARCH_X86_64)
+ if (NOT FAT_RUNTIME)
+ if (BUILD_AVX512)
+ set(ARCH_C_FLAGS "${SKYLAKE_FLAG}")
+ set(ARCH_CXX_FLAGS "${SKYLAKE_FLAG}")
+ elseif (BUILD_AVX2)
+ set(ARCH_C_FLAGS "-mavx2")
+ set(ARCH_CXX_FLAGS "-mavx2")
+ else()
+ set(ARCH_C_FLAGS "-msse4.2")
+ set(ARCH_CXX_FLAGS "-msse4.2")
+ endif()
+ else()
+ set(ARCH_C_FLAGS "-msse4.2")
+ set(ARCH_CXX_FLAGS "-msse4.2")
+ endif()
+endif()
+
if (ARCH_AARCH64)
if (BUILD_SVE2_BITPERM)
set(GNUCC_ARCH "${GNUCC_ARCH}+sve2-bitperm")
endif ()
endif(ARCH_AARCH64)
-if (ARCH_IA32 OR ARCH_X86_64 OR ARCH_ARM32 OR ARCH_AARCH64)
- if (NOT CMAKE_C_FLAGS MATCHES .*march.* AND NOT CMAKE_C_FLAGS MATCHES .*mtune.*)
- set(ARCH_C_FLAGS "-march=${GNUCC_ARCH} -mtune=${TUNE_FLAG}")
- endif()
- if (NOT CMAKE_CXX_FLAGS MATCHES .*march.* AND NOT CMAKE_CXX_FLAGS MATCHES .*mtune.*)
- set(ARCH_CXX_FLAGS "-march=${GNUCC_ARCH} -mtune=${TUNE_FLAG}")
- endif()
-endif()
+set(ARCH_C_FLAGS "-${ARCH_FLAG}=${GNUCC_ARCH} -mtune=${TUNE_FLAG} ${ARCH_C_FLAGS}")
+set(ARCH_CXX_FLAGS "-${ARCH_FLAG}=${GNUCC_ARCH} -mtune=${TUNE_FLAG} ${ARCH_CXX_FLAGS}")
+
+#if (ARCH_IA32 OR ARCH_X86_64 OR ARCH_ARM32 OR ARCH_AARCH64)
+# if (NOT CMAKE_C_FLAGS MATCHES .*march.* AND NOT CMAKE_C_FLAGS MATCHES .*mtune.*)
+# set(ARCH_C_FLAGS "-march=${GNUCC_ARCH} -mtune=${TUNE_FLAG}")
+# endif()
+# if (NOT CMAKE_CXX_FLAGS MATCHES .*march.* AND NOT CMAKE_CXX_FLAGS MATCHES .*mtune.*)
+# set(ARCH_CXX_FLAGS "-march=${GNUCC_ARCH} -mtune=${TUNE_FLAG}")
+# endif()
+#endif()
-if(ARCH_PPC64EL)
- if (NOT CMAKE_C_FLAGS MATCHES .*march.* AND NOT CMAKE_C_FLAGS MATCHES .*mtune.*)
- set(ARCH_C_FLAGS "-mtune=${TUNE_FLAG}")
- endif()
- if (NOT CMAKE_CXX_FLAGS MATCHES .*march.* AND NOT CMAKE_CXX_FLAGS MATCHES .*mtune.*)
- set(ARCH_CXX_FLAGS "-mtune=${TUNE_FLAG}")
- endif()
-endif()
+#if(ARCH_PPC64EL)
+# if (NOT CMAKE_C_FLAGS MATCHES .*march.* AND NOT CMAKE_C_FLAGS MATCHES .*mtune.*)
+# set(ARCH_C_FLAGS "-mtune=${TUNE_FLAG}")
+# endif()
+# if (NOT CMAKE_CXX_FLAGS MATCHES .*march.* AND NOT CMAKE_CXX_FLAGS MATCHES .*mtune.*)
+# set(ARCH_CXX_FLAGS "-mtune=${TUNE_FLAG}")
+# endif()
+#endif()
# compiler version checks TODO: test more compilers
if (CMAKE_COMPILER_IS_GNUCXX)
set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} -fno-omit-frame-pointer")
endif()
-
CHECK_INCLUDE_FILES(unistd.h HAVE_UNISTD_H)
if (ARCH_IA32 OR ARCH_X86_64)
CHECK_INCLUDE_FILES(intrin.h HAVE_C_INTRIN_H)
set(FREEBSD true)
endif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+
if (FAT_RUNTIME)
if (NOT (ARCH_IA32 OR ARCH_X86_64))
message(FATAL_ERROR "Fat runtime is not supported on non-Intel architectures")
else()
message(STATUS "Building runtime for multiple microarchitectures")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
endif()
else()
if (CROSS_COMPILE)
else()
message(STATUS "Building for current host CPU: ${ARCH_C_FLAGS}")
endif()
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ARCH_C_FLAGS}")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARCH_CXX_FLAGS}")
endif()
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ARCH_C_FLAGS}")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARCH_CXX_FLAGS}")
add_subdirectory(util)
add_subdirectory(doc/dev-reference)
set_target_properties(hs_runtime PROPERTIES LINKER_LANGUAGE C)
add_library(hs_compile OBJECT ${hs_compile_SRCS})
- if (ARCH_IA32)
- set_target_properties(hs_compile PROPERTIES COMPILE_FLAGS "-msse4.2")
- endif (ARCH_IA32)
-
add_library(hs STATIC
src/hs_version.c
src/hs_valid_platform.c
add_library(hs_exec_core2 OBJECT ${hs_exec_SRCS})
list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_core2>)
set_target_properties(hs_exec_core2 PROPERTIES
- COMPILE_FLAGS "-march=core2"
+ COMPILE_FLAGS "-march=core2 -msse4.2"
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} core2 ${CMAKE_MODULE_PATH}/keep.syms.in"
)
${RUNTIME_LIBS})
set_target_properties(hs_runtime PROPERTIES LINKER_LANGUAGE C)
add_library(hs_compile OBJECT ${hs_compile_SRCS})
- if (ARCH_IA32 OR ARCH_X86_64)
- set_target_properties(hs_exec_common PROPERTIES COMPILE_FLAGS "-msse4.2")
- set_target_properties(hs_compile PROPERTIES COMPILE_FLAGS "-msse4.2")
- endif ()
# we want the static lib for testing
add_library(hs STATIC src/hs_version.c src/hs_valid_platform.c
add_library(hs_exec_shared_core2 OBJECT ${hs_exec_SRCS})
list(APPEND RUNTIME_SHLIBS $<TARGET_OBJECTS:hs_exec_shared_core2>)
set_target_properties(hs_exec_shared_core2 PROPERTIES
- COMPILE_FLAGS "-march=core2"
+ COMPILE_FLAGS "-march=core2 -msse4.2"
POSITION_INDEPENDENT_CODE TRUE
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} core2 ${CMAKE_MODULE_PATH}/keep.syms.in"
)