Override default tuning which is for the build system --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -175,18 +175,34 @@ string(SUBSTRING "${_GCC_OUTPUT}" ${POS} -1 _GCC_OUTPUT) string(REGEX REPLACE "${ARCH_FLAG}=[ \t]*([^ \n]*)[ \n].*" "\\1" GNUCC_ARCH "${_GCC_OUTPUT}") - # test the parsed flag - set (EXEC_ARGS ${CC_ARG1} -E - -mtune=${GNUCC_ARCH}) - execute_process(COMMAND ${CMAKE_C_COMPILER} ${EXEC_ARGS} - OUTPUT_QUIET ERROR_QUIET - INPUT_FILE /dev/null - RESULT_VARIABLE GNUCC_TUNE_TEST) - if (NOT GNUCC_TUNE_TEST EQUAL 0) - message(WARNING "Something went wrong determining gcc tune: -mtune=${GNUCC_ARCH} not valid, falling back to -mtune=native") - set(TUNE_FLAG native) + if (CMAKE_SYSTEM_PROCESSOR MATCHES "arch64") + set(GNUCC_ARCH armv8) + set(TUNE_FLAG generic) + message(STATUS "gcc will tune for ${GNUCC_ARCH}, ${TUNE_FLAG}") + set(ARCH_C_FLAGS -march=armv8-a) + set(ARCH_CXX_FLAGS -march=armv8-a) + message(WARNING "Using armv8-a for arm64") + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "i686") + set(GNUCC_ARCH core2) + set(TUNE_FLAG generic) + message(STATUS "gcc will tune for ${GNUCC_ARCH}, ${TUNE_FLAG}") + set(ARCH_C_FLAGS -march=core2) + set(ARCH_CXX_FLAGS -march=core2) + message(WARNING "Using core2 for X86/X86_64") else() - set(TUNE_FLAG ${GNUCC_ARCH}) - message(STATUS "gcc will tune for ${GNUCC_ARCH}, ${TUNE_FLAG}") + # test the parsed flag + set (EXEC_ARGS ${CC_ARG1} -E - -mtune=${GNUCC_ARCH}) + execute_process(COMMAND ${CMAKE_C_COMPILER} ${EXEC_ARGS} + OUTPUT_QUIET ERROR_QUIET + INPUT_FILE /dev/null + RESULT_VARIABLE GNUCC_TUNE_TEST) + if (NOT GNUCC_TUNE_TEST EQUAL 0) + message(WARNING "Something went wrong determining gcc tune: -mtune=${GNUCC_ARCH} not valid, falling back to -mtune=native") + set(TUNE_FLAG native) + else() + set(TUNE_FLAG ${GNUCC_ARCH}) + message(STATUS "gcc will tune for ${GNUCC_ARCH}, ${TUNE_FLAG}") + endif() endif() elseif (CMAKE_COMPILER_IS_CLANG AND NOT CROSS_COMPILE) if (ARCH_IA32 OR ARCH_X86_64)