diff options
author | redfish <redfish@galactica.pw> | 2016-08-28 01:37:34 -0400 |
---|---|---|
committer | redfish <redfish@galactica.pw> | 2016-08-28 01:37:34 -0400 |
commit | c54b9a1a05fca44703e5a3359c2725d26ff60bc4 (patch) | |
tree | faf6bd3282e0cb2efa7b4be6b76774c029f1e9d0 /CMakeLists.txt | |
parent | Merge pull request #991 (diff) | |
download | monero-c54b9a1a05fca44703e5a3359c2725d26ff60bc4.tar.xz |
cmake: don't set ARCH from CMAKE_SYSTEM_PROCESSOR
It is not correct to do so, because ARCH should only take values
supported by the -march argument, with the exception of 'default'
which denotes not passing -march at all.
ARCH defines the target architecture for builds that are intended to be
portable to other machines.
Diffstat (limited to '')
-rw-r--r-- | CMakeLists.txt | 49 |
1 files changed, 22 insertions, 27 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 5ac4a2f95..fc546c007 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,31 +45,26 @@ function (die msg) message(FATAL_ERROR "${BoldRed}${msg}${ColourReset}") endfunction () -if ("${ARCH}" STREQUAL "" OR "${ARCH}" STREQUAL "native") - set(ARCH ${CMAKE_SYSTEM_PROCESSOR}) - message(STATUS "Building natively on ${ARCH}") +# ARCH defines the target architecture, either by an explicit identifier or +# one of the following two keywords. By default, ARCH a value of 'native': +# target arch = host arch, binary is not portable. When ARCH is set to the +# string 'default', no -march arg is passed, which creates a binary that is +# portable across processors in the same family as host processor. In cases +# when ARCH is not set to an explicit identifier, cmake's builtin is used +# to identify the target architecture, to direct logic in this cmake script. +# Since ARCH is a cached variable, it will not be set on first cmake invocation. +if (NOT ARCH OR ARCH STREQUAL "" OR ARCH STREQUAL "native" OR ARCH STREQUAL "default") + set(ARCH_ID "${CMAKE_SYSTEM_PROCESSOR}") +else() + set(ARCH_ID "${ARCH}") endif() - -if (NOT "${ARCH}" STREQUAL "") - string(SUBSTRING ${ARCH} 0 3 IS_ARM) - string(TOLOWER ${IS_ARM} IS_ARM) - - if (${IS_ARM} STREQUAL "arm") - string(SUBSTRING ${ARCH} 0 5 ARM_TEST) - string(TOLOWER ${ARM_TEST} ARM_TEST) - - if (${ARM_TEST} STREQUAL "armv6") - set(ARM6 1) - else() - set(ARM6 0) - endif() - - if (${ARM_TEST} STREQUAL "armv7") - set(ARM7 1) - else() - set(ARM7 0) - endif() - endif() +string(SUBSTRING ${ARCH_ID} 0 5 ARM_TEST) +string(TOLOWER ${ARM_TEST} ARM_TEST) +if (${ARM_TEST} STREQUAL "armv6") + set(ARM6 1) +endif() +if (${ARM_TEST} STREQUAL "armv7") + set(ARM7 1) endif() if(WIN32 OR ARM7 OR ARM6) @@ -312,9 +307,9 @@ if(MSVC) endif() include_directories(SYSTEM src/platform/msc) else() - set(ARCH native CACHE STRING "CPU to build for: -march value or default") - # -march=armv7-a conflicts with -mcpu=cortex-a7 - if(ARCH STREQUAL "default" OR ARM7 OR ARM6) + set(ARCH native CACHE STRING "CPU to build for: -march value or 'default' to not pass -march at all") + message(STATUS "Building on ${CMAKE_SYSTEM_PROCESSOR} for ${ARCH}") + if(ARCH STREQUAL "default") set(ARCH_FLAG "") else() if(ARCH STREQUAL "x86_64") |