From e66aa5f3b7bb58fe7e3b94461978d317deba3e39 Mon Sep 17 00:00:00 2001 From: Hank Anderson Date: Tue, 3 Feb 2015 11:32:20 -0600 Subject: [PATCH] Ported arch dependent settings from Makefile.system to new cmake file. --- CMakeLists.txt | 3 -- cmake/arch.cmake | 115 +++++++++++++++++++++++++++++++++++++++++++ cmake/c_check.cmake | 3 -- cmake/os.cmake | 6 +-- cmake/prebuild.cmake | 3 -- cmake/system.cmake | 8 +-- 6 files changed, 122 insertions(+), 16 deletions(-) create mode 100644 cmake/arch.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index bf1563d0b..66292940d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,5 @@ ## ## Author: Hank Anderson -## Copyright: (c) Stat-Ease, Inc. -## Created: 12/23/14 -## Last Modified: 12/23/14 ## cmake_minimum_required(VERSION 2.8.4) diff --git a/cmake/arch.cmake b/cmake/arch.cmake new file mode 100644 index 000000000..9b459ae90 --- /dev/null +++ b/cmake/arch.cmake @@ -0,0 +1,115 @@ +## +## Author: Hank Anderson +## Description: Ported from portion of OpenBLAS/Makefile.system +## Sets various variables based on architecture. + +if (${ARCH} STREQUAL "x86" OR ${ARCH} STREQUAL "x86_64") + + if (${ARCH} STREQUAL "x86") + if (NOT BINARY) + set(NO_BINARY_MODE 1) + endif () + endif () + + if (NOT NO_EXPRECISION) + if (${Fortran_COMPILER_NAME} MATCHES "gfortran.*") + # N.B. I'm not sure if CMake differentiates between GCC and LSB -hpa + if (${CMAKE_C_COMPILER} STREQUAL "GNU" OR ${CMAKE_C_COMPILER} STREQUAL "LSB") + set(EXPRECISION 1) + set(CCOMMON_OPT "${CCOMMON_OPT} -DEXPRECISION -m128bit-long-double") + set(FCOMMON_OPT "${FCOMMON_OPT} -m128bit-long-double") + endif () + if (${CMAKE_C_COMPILER} STREQUAL "Clang") + set(EXPRECISION 1) + set(CCOMMON_OPT "${CCOMMON_OPT} -DEXPRECISION") + set(FCOMMON_OPT "${FCOMMON_OPT} -m128bit-long-double") + endif () + endif () + endif () +endif () + +if (${CMAKE_C_COMPILER} STREQUAL "Intel") + set(CCOMMON_OPT "${CCOMMON_OPT} -wd981") +endif () + +if (USE_OPENMP) + + if (${CMAKE_C_COMPILER} STREQUAL "GNU" OR ${CMAKE_C_COMPILER} STREQUAL "LSB") + set(CCOMMON_OPT "${CCOMMON_OPT} -fopenmp") + endif () + + if (${CMAKE_C_COMPILER} STREQUAL "Clang") + message(WARNING "Clang doesn't support OpenMP yet.") + set(CCOMMON_OPT "${CCOMMON_OPT} -fopenmp") + endif () + + if (${CMAKE_C_COMPILER} STREQUAL "Intel") + set(CCOMMON_OPT "${CCOMMON_OPT} -openmp") + endif () + + if (${CMAKE_C_COMPILER} STREQUAL "PGI") + set(CCOMMON_OPT "${CCOMMON_OPT} -mp") + endif () + + if (${CMAKE_C_COMPILER} STREQUAL "OPEN64") + set(CCOMMON_OPT "${CCOMMON_OPT} -mp") + set(CEXTRALIB "${CEXTRALIB} -lstdc++") + endif () + + if (${CMAKE_C_COMPILER} STREQUAL "PATHSCALE") + set(CCOMMON_OPT "${CCOMMON_OPT} -mp") + endif () +endif () + + +if (DYNAMIC_ARCH) + if (${ARCH} STREQUAL "x86") + set(DYNAMIC_CORE "KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO") + endif () + + if (${ARCH} STREQUAL "x86_64") + set(DYNAMIC_CORE "PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO") + if (NOT NO_AVX) + set(DYNAMIC_CORE "${DYNAMIC_CORE} SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER") + endif () + if (NOT NO_AVX2) + set(DYNAMIC_CORE "${DYNAMIC_CORE} HASWELL") + endif () + endif () + + if (NOT DYNAMIC_CORE) + unset(DYNAMIC_ARCH) + endif () +endif () + +if (${ARCH} STREQUAL "ia64") + set(NO_BINARY_MODE 1) + set(BINARY_DEFINED 1) + + if (${Fortran_COMPILER_NAME} MATCHES "gfortran.*") + if (${CMAKE_C_COMPILER} STREQUAL "GNU") + # EXPRECISION = 1 + # CCOMMON_OPT += -DEXPRECISION + endif + endif +endif + +if (${ARCH} STREQUAL "mips64") + set(NO_BINARY_MODE 1) +endif + +if (${ARCH} STREQUAL "alpha") + set(NO_BINARY_MODE 1) + set(BINARY_DEFINED 1) +endif () + +if (${ARCH} STREQUAL "arm") + set(NO_BINARY_MODE 1) + set(BINARY_DEFINED 1) +endif () + +if (${ARCH} STREQUAL "arm64") + set(NO_BINARY_MODE 1) + set(BINARY_DEFINED 1) +endif () + diff --git a/cmake/c_check.cmake b/cmake/c_check.cmake index d8facfedc..2fbfd5745 100644 --- a/cmake/c_check.cmake +++ b/cmake/c_check.cmake @@ -1,8 +1,5 @@ ## ## Author: Hank Anderson -## Copyright: (c) Stat-Ease, Inc. -## Created: 12/29/14 -## Last Modified: 12/29/14 ## Description: Ported from the OpenBLAS/c_check perl script. ## This is triggered by prebuild.cmake and runs before any of the code is built. ## Creates config.h and Makefile.conf. diff --git a/cmake/os.cmake b/cmake/os.cmake index d897a2506..fc2c40268 100644 --- a/cmake/os.cmake +++ b/cmake/os.cmake @@ -1,7 +1,5 @@ ## ## Author: Hank Anderson -## Created: 12/29/14 -## Last Modified: 12/29/14 ## Description: Ported from portion of OpenBLAS/Makefile.system ## Detects the OS and sets appropriate variables. @@ -58,7 +56,7 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") # Ensure the correct stack alignment on Win32 # http://permalink.gmane.org/gmane.comp.lib.openblas.general/97 - if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86") + if (${ARCH} STREQUAL "x86") set(CCOMMON_OPT "${CCOMMON_OPT} -mincoming-stack-boundary=2") set(FCOMMON_OPT "${FCOMMON_OPT} -mincoming-stack-boundary=2") endif () @@ -88,7 +86,7 @@ if (QUAD_PRECISION) set(NO_EXPRECISION 1) endif () -if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86") +if (${ARCH} STREQUAL "x86") set(NO_EXPRECISION 1) endif () diff --git a/cmake/prebuild.cmake b/cmake/prebuild.cmake index 9595dab0d..8e05647a3 100644 --- a/cmake/prebuild.cmake +++ b/cmake/prebuild.cmake @@ -1,8 +1,5 @@ ## ## Author: Hank Anderson -## Copyright: (c) Stat-Ease, Inc. -## Created: 12/29/14 -## Last Modified: 12/29/14 ## Description: Ported from OpenBLAS/Makefile.prebuild ## This is triggered by system.cmake and runs before any of the code is built. ## Creates config.h and Makefile.conf by first running the c_check perl script (which creates those files). diff --git a/cmake/system.cmake b/cmake/system.cmake index 1d9c4612d..3fa75d65d 100644 --- a/cmake/system.cmake +++ b/cmake/system.cmake @@ -1,8 +1,5 @@ ## ## Author: Hank Anderson -## Copyright: (c) Stat-Ease, Inc. -## Created: 12/29/14 -## Last Modified: 12/29/14 ## Description: Ported from OpenBLAS/Makefile.system ## @@ -134,3 +131,8 @@ set(OBJCONV "$(CROSS_SUFFIX)objconv") # include("${CMAKE_SOURCE_DIR}/cmake/os.cmake") +# +# Architecture dependent settings +# +include("${CMAKE_SOURCE_DIR}/cmake/arch.cmake") +