commit
514d237257
28
.travis.yml
28
.travis.yml
|
@ -119,6 +119,34 @@ jobs:
|
||||||
- TARGET_BOX=LINUX64_MUSL
|
- TARGET_BOX=LINUX64_MUSL
|
||||||
- BTYPE="BINARY=64 NO_AFFINITY=1 USE_OPENMP=0 NO_LAPACK=0 TARGET=core2"
|
- BTYPE="BINARY=64 NO_AFFINITY=1 USE_OPENMP=0 NO_LAPACK=0 TARGET=core2"
|
||||||
|
|
||||||
|
- &test-cmake
|
||||||
|
stage: test
|
||||||
|
compiler: clang
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- gfortran
|
||||||
|
- cmake
|
||||||
|
dist: trusty
|
||||||
|
sudo: true
|
||||||
|
before_script:
|
||||||
|
- COMMON_ARGS="-DTARGET=NEHALEM -DNUM_THREADS=32"
|
||||||
|
script:
|
||||||
|
- set -e
|
||||||
|
- mkdir build
|
||||||
|
- CONFIG=Release
|
||||||
|
- cmake -Bbuild -H. $CMAKE_ARGS $COMMON_ARGS -DCMAKE_BUILD_TYPE=$CONFIG
|
||||||
|
- cmake --build build --config $CONFIG -- -j2
|
||||||
|
env:
|
||||||
|
- CMAKE=1
|
||||||
|
- <<: *test-cmake
|
||||||
|
env:
|
||||||
|
- CMAKE=1 CMAKE_ARGS="-DNOFORTRAN=1"
|
||||||
|
- <<: *test-cmake
|
||||||
|
compiler: gcc
|
||||||
|
env:
|
||||||
|
- CMAKE=1
|
||||||
|
|
||||||
# whitelist
|
# whitelist
|
||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
|
|
162
CMakeLists.txt
162
CMakeLists.txt
|
@ -3,15 +3,12 @@
|
||||||
##
|
##
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 2.8.5)
|
cmake_minimum_required(VERSION 2.8.5)
|
||||||
project(OpenBLAS)
|
project(OpenBLAS C ASM)
|
||||||
set(OpenBLAS_MAJOR_VERSION 0)
|
set(OpenBLAS_MAJOR_VERSION 0)
|
||||||
set(OpenBLAS_MINOR_VERSION 3)
|
set(OpenBLAS_MINOR_VERSION 3)
|
||||||
set(OpenBLAS_PATCH_VERSION 0.dev)
|
set(OpenBLAS_PATCH_VERSION 0.dev)
|
||||||
set(OpenBLAS_VERSION "${OpenBLAS_MAJOR_VERSION}.${OpenBLAS_MINOR_VERSION}.${OpenBLAS_PATCH_VERSION}")
|
set(OpenBLAS_VERSION "${OpenBLAS_MAJOR_VERSION}.${OpenBLAS_MINOR_VERSION}.${OpenBLAS_PATCH_VERSION}")
|
||||||
|
|
||||||
enable_language(ASM)
|
|
||||||
enable_language(C)
|
|
||||||
|
|
||||||
# Adhere to GNU filesystem layout conventions
|
# Adhere to GNU filesystem layout conventions
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
|
|
||||||
|
@ -26,7 +23,6 @@ if(MSVC)
|
||||||
option(BUILD_WITHOUT_LAPACK "Without LAPACK and LAPACKE (Only BLAS or CBLAS)" ON)
|
option(BUILD_WITHOUT_LAPACK "Without LAPACK and LAPACKE (Only BLAS or CBLAS)" ON)
|
||||||
endif()
|
endif()
|
||||||
option(BUILD_WITHOUT_CBLAS "Without CBLAS" OFF)
|
option(BUILD_WITHOUT_CBLAS "Without CBLAS" OFF)
|
||||||
option(BUILD_DEBUG "Build Debug Version" OFF)
|
|
||||||
option(DYNAMIC_ARCH "Build with DYNAMIC_ARCH" OFF)
|
option(DYNAMIC_ARCH "Build with DYNAMIC_ARCH" OFF)
|
||||||
#######
|
#######
|
||||||
if(BUILD_WITHOUT_LAPACK)
|
if(BUILD_WITHOUT_LAPACK)
|
||||||
|
@ -34,22 +30,6 @@ set(NO_LAPACK 1)
|
||||||
set(NO_LAPACKE 1)
|
set(NO_LAPACKE 1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_CONFIGURATION_TYPES) # multiconfig generator?
|
|
||||||
set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_BUILD_TYPE
|
|
||||||
Debug Debug
|
|
||||||
Release Release
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
if( NOT CMAKE_BUILD_TYPE )
|
|
||||||
if(BUILD_DEBUG)
|
|
||||||
set(CMAKE_BUILD_TYPE Debug)
|
|
||||||
else()
|
|
||||||
set(CMAKE_BUILD_TYPE Release)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(BUILD_WITHOUT_CBLAS)
|
if(BUILD_WITHOUT_CBLAS)
|
||||||
set(NO_CBLAS 1)
|
set(NO_CBLAS 1)
|
||||||
endif()
|
endif()
|
||||||
|
@ -107,19 +87,10 @@ if (BUILD_COMPLEX16)
|
||||||
list(APPEND FLOAT_TYPES "ZCOMPLEX") # defines COMPLEX and DOUBLE
|
list(APPEND FLOAT_TYPES "ZCOMPLEX") # defines COMPLEX and DOUBLE
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
set(SUBDIRS_ALL ${SUBDIRS} test ctest utest exports benchmark ../laswp ../bench)
|
|
||||||
|
|
||||||
# all :: libs netlib tests shared
|
|
||||||
|
|
||||||
# libs :
|
|
||||||
if (NOT DEFINED CORE OR "${CORE}" STREQUAL "UNKNOWN")
|
if (NOT DEFINED CORE OR "${CORE}" STREQUAL "UNKNOWN")
|
||||||
message(FATAL_ERROR "Detecting CPU failed. Please set TARGET explicitly, e.g. make TARGET=your_cpu_target. Please read README for details.")
|
message(FATAL_ERROR "Detecting CPU failed. Please set TARGET explicitly, e.g. make TARGET=your_cpu_target. Please read README for details.")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (${NO_STATIC} AND ${NO_SHARED})
|
|
||||||
message(FATAL_ERROR "Neither static nor shared are enabled.")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
#Set default output directory
|
#Set default output directory
|
||||||
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
|
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
|
||||||
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
|
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
|
||||||
|
@ -141,26 +112,20 @@ endforeach ()
|
||||||
# Not using add_subdirectory here because lapack-netlib already has its own CMakeLists.txt. Instead include a cmake script with the sources we want.
|
# Not using add_subdirectory here because lapack-netlib already has its own CMakeLists.txt. Instead include a cmake script with the sources we want.
|
||||||
if (NOT NOFORTRAN AND NOT NO_LAPACK)
|
if (NOT NOFORTRAN AND NOT NO_LAPACK)
|
||||||
include("${PROJECT_SOURCE_DIR}/cmake/lapack.cmake")
|
include("${PROJECT_SOURCE_DIR}/cmake/lapack.cmake")
|
||||||
if (NOT NO_LAPACKE)
|
if (NOT NO_LAPACKE)
|
||||||
include("${PROJECT_SOURCE_DIR}/cmake/lapacke.cmake")
|
include("${PROJECT_SOURCE_DIR}/cmake/lapacke.cmake")
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# Only generate .def for dll on MSVC and always produce pdb files for debug and release
|
# Only generate .def for dll on MSVC and always produce pdb files for debug and release
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
set(OpenBLAS_DEF_FILE "${PROJECT_BINARY_DIR}/openblas.def")
|
if (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 3.4)
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
|
set(OpenBLAS_DEF_FILE "${PROJECT_BINARY_DIR}/openblas.def")
|
||||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Zi")
|
endif()
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF")
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Zi")
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#ifeq ($(DYNAMIC_ARCH), 1)
|
|
||||||
# @$(MAKE) -C kernel commonlibs || exit 1
|
|
||||||
# @for d in $(DYNAMIC_CORE) ; \
|
|
||||||
# do $(MAKE) GOTOBLAS_MAKEFILE= -C kernel TARGET_CORE=$$d kernel || exit 1 ;\
|
|
||||||
# done
|
|
||||||
# @echo DYNAMIC_ARCH=1 >> Makefile.conf_last
|
|
||||||
#endif
|
|
||||||
if (${DYNAMIC_ARCH})
|
if (${DYNAMIC_ARCH})
|
||||||
add_subdirectory(kernel)
|
add_subdirectory(kernel)
|
||||||
foreach(TARGET_CORE ${DYNAMIC_CORE})
|
foreach(TARGET_CORE ${DYNAMIC_CORE})
|
||||||
|
@ -169,11 +134,24 @@ if (${DYNAMIC_ARCH})
|
||||||
endforeach()
|
endforeach()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
# Only build shared libs for MSVC
|
||||||
|
if (MSVC)
|
||||||
|
set(BUILD_SHARED_LIBS ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
# add objects to the openblas lib
|
# add objects to the openblas lib
|
||||||
add_library(${OpenBLAS_LIBNAME} SHARED ${LA_SOURCES} ${LAPACKE_SOURCES} ${TARGET_OBJS} ${OpenBLAS_DEF_FILE})
|
add_library(${OpenBLAS_LIBNAME} ${LA_SOURCES} ${LAPACKE_SOURCES} ${TARGET_OBJS} ${OpenBLAS_DEF_FILE})
|
||||||
|
|
||||||
include("${PROJECT_SOURCE_DIR}/cmake/export.cmake")
|
# Handle MSVC exports
|
||||||
|
if(MSVC AND BUILD_SHARED_LIBS)
|
||||||
|
if (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 3.4)
|
||||||
|
include("${PROJECT_SOURCE_DIR}/cmake/export.cmake")
|
||||||
|
else()
|
||||||
|
# Creates verbose .def file (51KB vs 18KB)
|
||||||
|
set_target_properties(${OpenBLAS_LIBNAME} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS true)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# Set output for libopenblas
|
# Set output for libopenblas
|
||||||
set_target_properties( ${OpenBLAS_LIBNAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
|
set_target_properties( ${OpenBLAS_LIBNAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
|
||||||
|
@ -188,25 +166,28 @@ foreach (OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
enable_testing()
|
enable_testing()
|
||||||
add_subdirectory(utest)
|
|
||||||
|
|
||||||
if (NOT MSVC)
|
if (USE_THREAD)
|
||||||
#only build shared library for MSVC
|
# Add threading library to linker
|
||||||
|
find_package(Threads)
|
||||||
add_library(${OpenBLAS_LIBNAME}_static STATIC ${LA_SOURCES} ${LAPACKE_SOURCES} ${TARGET_OBJS})
|
if (THREADS_HAVE_PTHREAD_ARG)
|
||||||
set_target_properties(${OpenBLAS_LIBNAME}_static PROPERTIES OUTPUT_NAME ${OpenBLAS_LIBNAME})
|
set_property(TARGET ${OpenBLAS_LIBNAME} PROPERTY COMPILE_OPTIONS "-pthread")
|
||||||
set_target_properties(${OpenBLAS_LIBNAME}_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
|
set_property(TARGET ${OpenBLAS_LIBNAME} PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread")
|
||||||
|
endif()
|
||||||
if(SMP)
|
target_link_libraries(${OpenBLAS_LIBNAME} ${CMAKE_THREAD_LIBS_INIT})
|
||||||
target_link_libraries(${OpenBLAS_LIBNAME} pthread)
|
|
||||||
target_link_libraries(${OpenBLAS_LIBNAME}_static pthread)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#build test and ctest
|
if (MSVC OR NOT NOFORTRAN)
|
||||||
add_subdirectory(test)
|
# Broken without fortran on unix
|
||||||
if(NOT NO_CBLAS)
|
add_subdirectory(utest)
|
||||||
add_subdirectory(ctest)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (NOT MSVC AND NOT NOFORTRAN)
|
||||||
|
# Build test and ctest
|
||||||
|
add_subdirectory(test)
|
||||||
|
if(NOT NO_CBLAS)
|
||||||
|
add_subdirectory(ctest)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set_target_properties(${OpenBLAS_LIBNAME} PROPERTIES
|
set_target_properties(${OpenBLAS_LIBNAME} PROPERTIES
|
||||||
|
@ -214,24 +195,6 @@ set_target_properties(${OpenBLAS_LIBNAME} PROPERTIES
|
||||||
SOVERSION ${OpenBLAS_MAJOR_VERSION}
|
SOVERSION ${OpenBLAS_MAJOR_VERSION}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# TODO: Why is the config saved here? Is this necessary with CMake?
|
|
||||||
#Save the config files for installation
|
|
||||||
# @cp Makefile.conf Makefile.conf_last
|
|
||||||
# @cp config.h config_last.h
|
|
||||||
#ifdef QUAD_PRECISION
|
|
||||||
# @echo "#define QUAD_PRECISION">> config_last.h
|
|
||||||
#endif
|
|
||||||
#ifeq ($(EXPRECISION), 1)
|
|
||||||
# @echo "#define EXPRECISION">> config_last.h
|
|
||||||
#endif
|
|
||||||
###
|
|
||||||
|
|
||||||
#ifdef USE_THREAD
|
|
||||||
# @echo USE_THREAD=$(USE_THREAD) >> Makefile.conf_last
|
|
||||||
#endif
|
|
||||||
# @touch lib.grd
|
|
||||||
|
|
||||||
# Install project
|
# Install project
|
||||||
|
|
||||||
# Install libraries
|
# Install libraries
|
||||||
|
@ -240,27 +203,34 @@ install(TARGETS ${OpenBLAS_LIBNAME}
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} )
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} )
|
||||||
|
|
||||||
# Install include files
|
message(STATUS "Generating openblas_config.h in ${CMAKE_INSTALL_INCLUDEDIR}")
|
||||||
set (GENCONFIG_BIN ${CMAKE_BINARY_DIR}/gen_config_h${CMAKE_EXECUTABLE_SUFFIX})
|
|
||||||
|
|
||||||
execute_process(COMMAND ${GENCONFIG_BIN}
|
set(OPENBLAS_CONFIG_H ${CMAKE_BINARY_DIR}/openblas_config.h)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/config.h
|
file(WRITE ${OPENBLAS_CONFIG_H} "#ifndef OPENBLAS_CONFIG_H\n")
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/openblas_config_template.h
|
file(APPEND ${OPENBLAS_CONFIG_H} "#define OPENBLAS_CONFIG_H\n")
|
||||||
OUTPUT_VARIABLE OPENBLAS_CONFIG_H_CONTENTS)
|
file(STRINGS ${PROJECT_BINARY_DIR}/config.h __lines)
|
||||||
|
foreach(line ${__lines})
|
||||||
file(WRITE ${CMAKE_BINARY_DIR}/openblas_config.tmp "${OPENBLAS_CONFIG_H_CONTENTS}")
|
string(REPLACE "#define " "" line ${line})
|
||||||
configure_file(${CMAKE_BINARY_DIR}/openblas_config.tmp ${CMAKE_BINARY_DIR}/openblas_config.h COPYONLY)
|
file(APPEND ${OPENBLAS_CONFIG_H} "#define OPENBLAS_${line}\n")
|
||||||
|
endforeach()
|
||||||
install (FILES ${CMAKE_BINARY_DIR}/openblas_config.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
file(APPEND ${OPENBLAS_CONFIG_H} "#define OPENBLAS_VERSION \"OpenBLAS ${OpenBLAS_VERSION}\"\n")
|
||||||
|
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/openblas_config_template.h OPENBLAS_CONFIG_TEMPLATE_H_CONTENTS)
|
||||||
|
file(APPEND ${OPENBLAS_CONFIG_H} "${OPENBLAS_CONFIG_TEMPLATE_H_CONTENTS}\n")
|
||||||
|
file(APPEND ${OPENBLAS_CONFIG_H} "#endif /* OPENBLAS_CONFIG_H */\n")
|
||||||
|
install (FILES ${OPENBLAS_CONFIG_H} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||||
|
|
||||||
|
if(NOT NOFORTRAN)
|
||||||
message(STATUS "Generating f77blas.h in ${CMAKE_INSTALL_INCLUDEDIR}")
|
message(STATUS "Generating f77blas.h in ${CMAKE_INSTALL_INCLUDEDIR}")
|
||||||
|
|
||||||
file(WRITE ${CMAKE_BINARY_DIR}/f77blas.h "")
|
set(F77BLAS_H ${CMAKE_BINARY_DIR}/f77blas.h)
|
||||||
file(APPEND ${CMAKE_BINARY_DIR}/f77blas.h "#ifndef OPENBLAS_F77BLAS_H\n#define OPENBLAS_F77BLAS_H\n#include \"openblas_config.h\"\n")
|
file(WRITE ${F77BLAS_H} "#ifndef OPENBLAS_F77BLAS_H\n")
|
||||||
|
file(APPEND ${F77BLAS_H} "#define OPENBLAS_F77BLAS_H\n")
|
||||||
|
file(APPEND ${F77BLAS_H} "#include \"openblas_config.h\"\n")
|
||||||
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/common_interface.h COMMON_INTERFACE_H_CONTENTS)
|
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/common_interface.h COMMON_INTERFACE_H_CONTENTS)
|
||||||
file(APPEND ${CMAKE_BINARY_DIR}/f77blas.h "${COMMON_INTERFACE_H_CONTENTS}")
|
file(APPEND ${F77BLAS_H} "${COMMON_INTERFACE_H_CONTENTS}\n")
|
||||||
file(APPEND ${CMAKE_BINARY_DIR}/f77blas.h "#endif")
|
file(APPEND ${F77BLAS_H} "#endif")
|
||||||
install (FILES ${CMAKE_BINARY_DIR}/f77blas.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
install (FILES ${F77BLAS_H} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
if(NOT NO_CBLAS)
|
if(NOT NO_CBLAS)
|
||||||
message (STATUS "Generating cblas.h in ${CMAKE_INSTALL_INCLUDEDIR}")
|
message (STATUS "Generating cblas.h in ${CMAKE_INSTALL_INCLUDEDIR}")
|
||||||
|
@ -283,10 +253,6 @@ if(NOT NO_LAPACKE)
|
||||||
install (FILES ${CMAKE_BINARY_DIR}/lapacke_mangling.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
install (FILES ${CMAKE_BINARY_DIR}/lapacke_mangling.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT MSVC)
|
|
||||||
install (TARGETS ${OpenBLAS_LIBNAME}_static DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(FindPkgConfig QUIET)
|
include(FindPkgConfig QUIET)
|
||||||
if(PKG_CONFIG_FOUND)
|
if(PKG_CONFIG_FOUND)
|
||||||
configure_file(${PROJECT_SOURCE_DIR}/cmake/openblas.pc.in ${PROJECT_BINARY_DIR}/openblas.pc @ONLY)
|
configure_file(${PROJECT_SOURCE_DIR}/cmake/openblas.pc.in ${PROJECT_BINARY_DIR}/openblas.pc @ONLY)
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
## Description: Ported from portion of OpenBLAS/Makefile.system
|
## Description: Ported from portion of OpenBLAS/Makefile.system
|
||||||
## Sets various variables based on architecture.
|
## Sets various variables based on architecture.
|
||||||
|
|
||||||
if (${ARCH} STREQUAL "x86" OR ${ARCH} STREQUAL "x86_64")
|
if (X86 OR X86_64)
|
||||||
|
|
||||||
if (${ARCH} STREQUAL "x86")
|
if (X86)
|
||||||
if (NOT BINARY)
|
if (NOT BINARY)
|
||||||
set(NO_BINARY_MODE 1)
|
set(NO_BINARY_MODE 1)
|
||||||
endif ()
|
endif ()
|
||||||
|
@ -33,41 +33,22 @@ if (${CMAKE_C_COMPILER_ID} STREQUAL "Intel")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (USE_OPENMP)
|
if (USE_OPENMP)
|
||||||
|
# USE_SIMPLE_THREADED_LEVEL3 = 1
|
||||||
if (${CMAKE_C_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_C_COMPILER_ID} STREQUAL "LSB")
|
# NO_AFFINITY = 1
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -fopenmp")
|
find_package(OpenMP REQUIRED)
|
||||||
endif ()
|
if (OpenMP_FOUND)
|
||||||
|
set(CCOMMON_OPT "${CCOMMON_OPT} ${OpenMP_C_FLAGS} -DUSE_OPENMP")
|
||||||
if (${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
|
set(FCOMMON_OPT "${FCOMMON_OPT} ${OpenMP_Fortran_FLAGS}")
|
||||||
message(WARNING "Clang doesn't support OpenMP yet.")
|
endif()
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -fopenmp")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (${CMAKE_C_COMPILER_ID} STREQUAL "Intel")
|
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -openmp")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (${CMAKE_C_COMPILER_ID} STREQUAL "PGI")
|
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -mp")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (${CMAKE_C_COMPILER_ID} STREQUAL "OPEN64")
|
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -mp")
|
|
||||||
set(CEXTRALIB "${CEXTRALIB} -lstdc++")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (${CMAKE_C_COMPILER_ID} STREQUAL "PATHSCALE")
|
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -mp")
|
|
||||||
endif ()
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
|
||||||
if (DYNAMIC_ARCH)
|
if (DYNAMIC_ARCH)
|
||||||
if (${ARCH} STREQUAL "x86")
|
if (X86)
|
||||||
set(DYNAMIC_CORE KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO)
|
set(DYNAMIC_CORE KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (${ARCH} STREQUAL "x86_64")
|
if (X86_64)
|
||||||
set(DYNAMIC_CORE PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO)
|
set(DYNAMIC_CORE PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO)
|
||||||
if (NOT NO_AVX)
|
if (NOT NO_AVX)
|
||||||
set(DYNAMIC_CORE ${DYNAMIC_CORE} SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR)
|
set(DYNAMIC_CORE ${DYNAMIC_CORE} SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR)
|
||||||
|
@ -94,7 +75,7 @@ if (${ARCH} STREQUAL "ia64")
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (${ARCH} STREQUAL "mips64")
|
if (MIPS64)
|
||||||
set(NO_BINARY_MODE 1)
|
set(NO_BINARY_MODE 1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
@ -103,12 +84,12 @@ if (${ARCH} STREQUAL "alpha")
|
||||||
set(BINARY_DEFINED 1)
|
set(BINARY_DEFINED 1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (${ARCH} STREQUAL "arm")
|
if (ARM)
|
||||||
set(NO_BINARY_MODE 1)
|
set(NO_BINARY_MODE 1)
|
||||||
set(BINARY_DEFINED 1)
|
set(BINARY_DEFINED 1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (${ARCH} STREQUAL "arm64")
|
if (ARM64)
|
||||||
set(NO_BINARY_MODE 1)
|
set(NO_BINARY_MODE 1)
|
||||||
set(BINARY_DEFINED 1)
|
set(BINARY_DEFINED 1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
|
@ -1,101 +0,0 @@
|
||||||
##
|
|
||||||
## Author: Hank Anderson <hank@statease.com>
|
|
||||||
## 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.
|
|
||||||
|
|
||||||
# CMake vars set by this file:
|
|
||||||
# OSNAME (use CMAKE_SYSTEM_NAME)
|
|
||||||
# ARCH
|
|
||||||
# C_COMPILER (use CMAKE_C_COMPILER)
|
|
||||||
# BINARY32
|
|
||||||
# BINARY64
|
|
||||||
# FU
|
|
||||||
# CROSS_SUFFIX
|
|
||||||
# CROSS
|
|
||||||
# CEXTRALIB
|
|
||||||
|
|
||||||
# Defines set by this file:
|
|
||||||
# OS_
|
|
||||||
# ARCH_
|
|
||||||
# C_
|
|
||||||
# __32BIT__
|
|
||||||
# __64BIT__
|
|
||||||
# FUNDERSCORE
|
|
||||||
# PTHREAD_CREATE_FUNC
|
|
||||||
|
|
||||||
# N.B. c_check (and ctest.c) is not cross-platform, so instead try to use CMake variables.
|
|
||||||
set(FU "")
|
|
||||||
if(APPLE)
|
|
||||||
set(FU "_")
|
|
||||||
elseif(MSVC AND ${CMAKE_C_COMPILER_ID} MATCHES "Clang")
|
|
||||||
set(FU "")
|
|
||||||
elseif(MSVC)
|
|
||||||
set(FU "_")
|
|
||||||
elseif(UNIX)
|
|
||||||
set(FU "")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Convert CMake vars into the format that OpenBLAS expects
|
|
||||||
string(TOUPPER ${CMAKE_SYSTEM_NAME} HOST_OS)
|
|
||||||
if (${HOST_OS} STREQUAL "WINDOWS")
|
|
||||||
set(HOST_OS WINNT)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
# added by hpa - check size of void ptr to detect 64-bit compile
|
|
||||||
if (NOT DEFINED BINARY)
|
|
||||||
set(BINARY 32)
|
|
||||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
||||||
set(BINARY 64)
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (BINARY EQUAL 64)
|
|
||||||
set(BINARY64 1)
|
|
||||||
else ()
|
|
||||||
set(BINARY32 1)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
# CMake docs define these:
|
|
||||||
# CMAKE_SYSTEM_PROCESSOR - The name of the CPU CMake is building for.
|
|
||||||
# CMAKE_HOST_SYSTEM_PROCESSOR - The name of the CPU CMake is running on.
|
|
||||||
#
|
|
||||||
# TODO: CMAKE_SYSTEM_PROCESSOR doesn't seem to be correct - instead get it from the compiler a la c_check
|
|
||||||
set(ARCH ${CMAKE_SYSTEM_PROCESSOR} CACHE STRING "Target Architecture")
|
|
||||||
|
|
||||||
if (${ARCH} STREQUAL "AMD64")
|
|
||||||
set(ARCH "x86_64")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
# If you are using a 32-bit compiler on a 64-bit system CMAKE_SYSTEM_PROCESSOR will be wrong
|
|
||||||
if (${ARCH} STREQUAL "x86_64" AND BINARY EQUAL 32)
|
|
||||||
set(ARCH x86)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (${ARCH} STREQUAL "X86")
|
|
||||||
set(ARCH x86)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (${ARCH} MATCHES "ppc")
|
|
||||||
set(ARCH power)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
set(COMPILER_ID ${CMAKE_CXX_COMPILER_ID})
|
|
||||||
if (${COMPILER_ID} STREQUAL "GNU")
|
|
||||||
set(COMPILER_ID "GCC")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
string(TOUPPER ${ARCH} UC_ARCH)
|
|
||||||
|
|
||||||
file(WRITE ${TARGET_CONF_TEMP}
|
|
||||||
"#define OS_${HOST_OS}\t1\n"
|
|
||||||
"#define ARCH_${UC_ARCH}\t1\n"
|
|
||||||
"#define C_${COMPILER_ID}\t1\n"
|
|
||||||
"#define __${BINARY}BIT__\t1\n"
|
|
||||||
"#define FUNDERSCORE\t${FU}\n")
|
|
||||||
|
|
||||||
if (${HOST_OS} STREQUAL "WINDOWSSTORE")
|
|
||||||
file(APPEND ${TARGET_CONF_TEMP}
|
|
||||||
"#define OS_WINNT\t1\n")
|
|
||||||
endif ()
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ if (${CMAKE_C_COMPILER} STREQUAL "GNU" OR ${CMAKE_C_COMPILER} STREQUAL "LSB" OR
|
||||||
|
|
||||||
if (NO_BINARY_MODE)
|
if (NO_BINARY_MODE)
|
||||||
|
|
||||||
if (${ARCH} STREQUAL "mips64")
|
if (MIPS64)
|
||||||
if (BINARY64)
|
if (BINARY64)
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -mabi=64")
|
set(CCOMMON_OPT "${CCOMMON_OPT} -mabi=64")
|
||||||
else ()
|
else ()
|
||||||
|
@ -24,17 +24,12 @@ if (${CMAKE_C_COMPILER} STREQUAL "GNU" OR ${CMAKE_C_COMPILER} STREQUAL "LSB" OR
|
||||||
set(BINARY_DEFINED 1)
|
set(BINARY_DEFINED 1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (${CORE} STREQUAL "LOONGSON3A")
|
if (${CORE} STREQUAL "LOONGSON3A" OR ${CORE} STREQUAL "LOONGSON3B")
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -march=mips64")
|
set(CCOMMON_OPT "${CCOMMON_OPT} -march=mips64")
|
||||||
set(FCOMMON_OPT "${FCOMMON_OPT} -march=mips64")
|
set(FCOMMON_OPT "${FCOMMON_OPT} -march=mips64")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (${CORE} STREQUAL "LOONGSON3B")
|
if (CMAKE_SYSTEM_NAME STREQUAL "AIX")
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -march=mips64")
|
|
||||||
set(FCOMMON_OPT "${FCOMMON_OPT} -march=mips64")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (${OSNAME} STREQUAL "AIX")
|
|
||||||
set(BINARY_DEFINED 1)
|
set(BINARY_DEFINED 1)
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
@ -66,7 +61,7 @@ endif ()
|
||||||
|
|
||||||
if (${CMAKE_C_COMPILER} STREQUAL "OPEN64")
|
if (${CMAKE_C_COMPILER} STREQUAL "OPEN64")
|
||||||
|
|
||||||
if (${ARCH} STREQUAL "mips64")
|
if (MIPS64)
|
||||||
|
|
||||||
if (NOT BINARY64)
|
if (NOT BINARY64)
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -n32")
|
set(CCOMMON_OPT "${CCOMMON_OPT} -n32")
|
||||||
|
@ -94,10 +89,10 @@ endif ()
|
||||||
|
|
||||||
if (${CMAKE_C_COMPILER} STREQUAL "SUN")
|
if (${CMAKE_C_COMPILER} STREQUAL "SUN")
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -w")
|
set(CCOMMON_OPT "${CCOMMON_OPT} -w")
|
||||||
if (${ARCH} STREQUAL "x86")
|
if (X86)
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -m32")
|
set(CCOMMON_OPT "${CCOMMON_OPT} -m32")
|
||||||
else ()
|
else ()
|
||||||
set(FCOMMON_OPT "${FCOMMON_OPT} -m64")
|
set(CCOMMON_OPT "${CCOMMON_OPT} -m64")
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
|
|
@ -34,11 +34,7 @@ else()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (NOT ONLY_CBLAS)
|
if (NOT ONLY_CBLAS)
|
||||||
# N.B. f_check is not cross-platform, so instead try to use CMake variables
|
|
||||||
# run f_check (appends to TARGET files)
|
# run f_check (appends to TARGET files)
|
||||||
# message(STATUS "Running f_check...")
|
|
||||||
# execute_process(COMMAND perl f_check ${TARGET_MAKE} ${TARGET_CONF} ${CMAKE_Fortran_COMPILER}
|
|
||||||
# WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
|
|
||||||
|
|
||||||
# TODO: detect whether underscore needed, set #defines and BU appropriately - use try_compile
|
# TODO: detect whether underscore needed, set #defines and BU appropriately - use try_compile
|
||||||
# TODO: set FEXTRALIB flags a la f_check?
|
# TODO: set FEXTRALIB flags a la f_check?
|
||||||
|
|
|
@ -50,7 +50,7 @@ if (${F_COMPILER} STREQUAL "GFORTRAN")
|
||||||
set(EXTRALIB "{EXTRALIB} -lgfortran")
|
set(EXTRALIB "{EXTRALIB} -lgfortran")
|
||||||
endif ()
|
endif ()
|
||||||
if (NO_BINARY_MODE)
|
if (NO_BINARY_MODE)
|
||||||
if (${ARCH} STREQUAL "mips64")
|
if (MIPS64)
|
||||||
if (BINARY64)
|
if (BINARY64)
|
||||||
set(FCOMMON_OPT "${FCOMMON_OPT} -mabi=64")
|
set(FCOMMON_OPT "${FCOMMON_OPT} -mabi=64")
|
||||||
else ()
|
else ()
|
||||||
|
@ -130,7 +130,7 @@ if (${F_COMPILER} STREQUAL "PATHSCALE")
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (NOT ${ARCH} STREQUAL "mips64")
|
if (NOT MIPS64)
|
||||||
if (NOT BINARY64)
|
if (NOT BINARY64)
|
||||||
set(FCOMMON_OPT "${FCOMMON_OPT} -m32")
|
set(FCOMMON_OPT "${FCOMMON_OPT} -m32")
|
||||||
else ()
|
else ()
|
||||||
|
@ -158,7 +158,7 @@ if (${F_COMPILER} STREQUAL "OPEN64")
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (${ARCH} STREQUAL "mips64")
|
if (MIPS64)
|
||||||
|
|
||||||
if (NOT BINARY64)
|
if (NOT BINARY64)
|
||||||
set(FCOMMON_OPT "${FCOMMON_OPT} -n32")
|
set(FCOMMON_OPT "${FCOMMON_OPT} -n32")
|
||||||
|
@ -189,7 +189,7 @@ endif ()
|
||||||
|
|
||||||
if (${F_COMPILER} STREQUAL "SUN")
|
if (${F_COMPILER} STREQUAL "SUN")
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_SUN")
|
set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_SUN")
|
||||||
if (${ARCH} STREQUAL "x86")
|
if (X86)
|
||||||
set(FCOMMON_OPT "${FCOMMON_OPT} -m32")
|
set(FCOMMON_OPT "${FCOMMON_OPT} -m32")
|
||||||
else ()
|
else ()
|
||||||
set(FCOMMON_OPT "${FCOMMON_OPT} -m64")
|
set(FCOMMON_OPT "${FCOMMON_OPT} -m64")
|
||||||
|
|
|
@ -3,19 +3,6 @@
|
||||||
## Description: Ported from portion of OpenBLAS/Makefile.system
|
## Description: Ported from portion of OpenBLAS/Makefile.system
|
||||||
## Detects the OS and sets appropriate variables.
|
## Detects the OS and sets appropriate variables.
|
||||||
|
|
||||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
|
|
||||||
set(ENV{MACOSX_DEPLOYMENT_TARGET} "10.2") # TODO: should be exported as an env var
|
|
||||||
set(MD5SUM "md5 -r")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
|
||||||
set(MD5SUM "md5 -r")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "NetBSD")
|
|
||||||
set(MD5SUM "md5 -n")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||||
set(EXTRALIB "${EXTRALIB} -lm")
|
set(EXTRALIB "${EXTRALIB} -lm")
|
||||||
set(NO_EXPRECISION 1)
|
set(NO_EXPRECISION 1)
|
||||||
|
@ -56,7 +43,7 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
||||||
|
|
||||||
# Ensure the correct stack alignment on Win32
|
# Ensure the correct stack alignment on Win32
|
||||||
# http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
|
# http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
|
||||||
if (${ARCH} STREQUAL "x86")
|
if (X86)
|
||||||
if (NOT MSVC AND NOT ${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
|
if (NOT MSVC AND NOT ${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -mincoming-stack-boundary=2")
|
set(CCOMMON_OPT "${CCOMMON_OPT} -mincoming-stack-boundary=2")
|
||||||
endif ()
|
endif ()
|
||||||
|
@ -78,7 +65,7 @@ if (CYGWIN)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows" AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Interix" AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Android")
|
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows" AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Interix" AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Android")
|
||||||
if (SMP)
|
if (USE_THREAD)
|
||||||
set(EXTRALIB "${EXTRALIB} -lpthread")
|
set(EXTRALIB "${EXTRALIB} -lpthread")
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
@ -88,7 +75,7 @@ if (QUAD_PRECISION)
|
||||||
set(NO_EXPRECISION 1)
|
set(NO_EXPRECISION 1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (${ARCH} STREQUAL "x86")
|
if (X86)
|
||||||
set(NO_EXPRECISION 1)
|
set(NO_EXPRECISION 1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
|
|
@ -37,53 +37,159 @@
|
||||||
|
|
||||||
# CPUIDEMU = ../../cpuid/table.o
|
# CPUIDEMU = ../../cpuid/table.o
|
||||||
|
|
||||||
|
|
||||||
if (DEFINED CPUIDEMU)
|
if (DEFINED CPUIDEMU)
|
||||||
set(EXFLAGS "-DCPUIDEMU -DVENDOR=99")
|
set(EXFLAGS "-DCPUIDEMU -DVENDOR=99")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (DEFINED TARGET_CORE)
|
if (BUILD_KERNEL)
|
||||||
# set the C flags for just this file
|
# set the C flags for just this file
|
||||||
set(GETARCH2_FLAGS "-DBUILD_KERNEL")
|
set(GETARCH2_FLAGS "-DBUILD_KERNEL")
|
||||||
set(TARGET_MAKE "Makefile_kernel.conf")
|
|
||||||
set(TARGET_CONF "config_kernel.h")
|
set(TARGET_CONF "config_kernel.h")
|
||||||
set(TARGET_CONF_DIR ${PROJECT_BINARY_DIR}/kernel_config/${TARGET_CORE})
|
set(TARGET_CONF_DIR ${PROJECT_BINARY_DIR}/kernel_config/${TARGET_CORE})
|
||||||
else()
|
else()
|
||||||
set(TARGET_MAKE "Makefile.conf")
|
|
||||||
set(TARGET_CONF "config.h")
|
set(TARGET_CONF "config.h")
|
||||||
set(TARGET_CONF_DIR ${PROJECT_BINARY_DIR})
|
set(TARGET_CONF_DIR ${PROJECT_BINARY_DIR})
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
set(TARGET_CONF_TEMP "${PROJECT_BINARY_DIR}/${TARGET_CONF}.tmp")
|
set(TARGET_CONF_TEMP "${PROJECT_BINARY_DIR}/${TARGET_CONF}.tmp")
|
||||||
include("${PROJECT_SOURCE_DIR}/cmake/c_check.cmake")
|
|
||||||
|
|
||||||
|
# c_check
|
||||||
|
set(FU "")
|
||||||
|
if (APPLE OR (MSVC AND NOT ${CMAKE_C_COMPILER_ID} MATCHES "Clang"))
|
||||||
|
set(FU "_")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(COMPILER_ID ${CMAKE_C_COMPILER_ID})
|
||||||
|
if (${COMPILER_ID} STREQUAL "GNU")
|
||||||
|
set(COMPILER_ID "GCC")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
string(TOUPPER ${ARCH} UC_ARCH)
|
||||||
|
|
||||||
|
file(WRITE ${TARGET_CONF_TEMP}
|
||||||
|
"#define OS_${HOST_OS}\t1\n"
|
||||||
|
"#define ARCH_${UC_ARCH}\t1\n"
|
||||||
|
"#define C_${COMPILER_ID}\t1\n"
|
||||||
|
"#define __${BINARY}BIT__\t1\n"
|
||||||
|
"#define FUNDERSCORE\t${FU}\n")
|
||||||
|
|
||||||
|
if (${HOST_OS} STREQUAL "WINDOWSSTORE")
|
||||||
|
file(APPEND ${TARGET_CONF_TEMP}
|
||||||
|
"#define OS_WINNT\t1\n")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# f_check
|
||||||
if (NOT NOFORTRAN)
|
if (NOT NOFORTRAN)
|
||||||
include("${PROJECT_SOURCE_DIR}/cmake/f_check.cmake")
|
include("${PROJECT_SOURCE_DIR}/cmake/f_check.cmake")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# compile getarch
|
# Cannot run getarch on target if we are cross-compiling
|
||||||
set(GETARCH_SRC
|
if (DEFINED CORE AND CMAKE_CROSSCOMPILING)
|
||||||
${PROJECT_SOURCE_DIR}/getarch.c
|
# Write to config as getarch would
|
||||||
${CPUIDEMO}
|
|
||||||
)
|
|
||||||
|
|
||||||
if ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
|
# TODO: Set up defines that getarch sets up based on every other target
|
||||||
|
# Perhaps this should be inside a different file as it grows larger
|
||||||
|
file(APPEND ${TARGET_CONF_TEMP}
|
||||||
|
"#define ${CORE}\n"
|
||||||
|
"#define CHAR_CORENAME \"${CORE}\"\n")
|
||||||
|
if ("${CORE}" STREQUAL "ARMV7")
|
||||||
|
file(APPEND ${TARGET_CONF_TEMP}
|
||||||
|
"#define L1_DATA_SIZE\t65536\n"
|
||||||
|
"#define L1_DATA_LINESIZE\t32\n"
|
||||||
|
"#define L2_SIZE\t512488\n"
|
||||||
|
"#define L2_LINESIZE\t32\n"
|
||||||
|
"#define DTB_DEFAULT_ENTRIES\t64\n"
|
||||||
|
"#define DTB_SIZE\t4096\n"
|
||||||
|
"#define L2_ASSOCIATIVE\t4\n"
|
||||||
|
"#define HAVE_VFPV3\n"
|
||||||
|
"#define HAVE_VFP\n")
|
||||||
|
set(SGEMM_UNROLL_M 4)
|
||||||
|
set(SGEMM_UNROLL_N 4)
|
||||||
|
set(DGEMM_UNROLL_M 4)
|
||||||
|
set(DGEMM_UNROLL_N 4)
|
||||||
|
elseif ("${CORE}" STREQUAL "ARMV8")
|
||||||
|
file(APPEND ${TARGET_CONF_TEMP}
|
||||||
|
"#define L1_DATA_SIZE\t32768\n"
|
||||||
|
"#define L1_DATA_LINESIZE\t64\n"
|
||||||
|
"#define L2_SIZE\t262144\n"
|
||||||
|
"#define L2_LINESIZE\t64\n"
|
||||||
|
"#define DTB_DEFAULT_ENTRIES\t64\n"
|
||||||
|
"#define DTB_SIZE\t4096\n"
|
||||||
|
"#define L2_ASSOCIATIVE\t32\n")
|
||||||
|
set(SGEMM_UNROLL_M 4)
|
||||||
|
set(SGEMM_UNROLL_N 4)
|
||||||
|
elseif ("${CORE}" STREQUAL "CORTEXA57")
|
||||||
|
file(APPEND ${TARGET_CONF_TEMP}
|
||||||
|
"#define L1_CODE_SIZE\t49152\n"
|
||||||
|
"#define L1_CODE_LINESIZE\t64\n"
|
||||||
|
"#define L1_CODE_ASSOCIATIVE\t3\n"
|
||||||
|
"#define L1_DATA_SIZE\t32768\n"
|
||||||
|
"#define L1_DATA_LINESIZE\t64\n"
|
||||||
|
"#define L1_DATA_ASSOCIATIVE\t2\n"
|
||||||
|
"#define L2_SIZE\t2097152\n"
|
||||||
|
"#define L2_LINESIZE\t64\n"
|
||||||
|
"#define L2_ASSOCIATIVE\t16\n"
|
||||||
|
"#define DTB_DEFAULT_ENTRIES\t64\n"
|
||||||
|
"#define DTB_SIZE\t4096\n"
|
||||||
|
"#define HAVE_VFPV4\n"
|
||||||
|
"#define HAVE_VFPV3\n"
|
||||||
|
"#define HAVE_VFP\n"
|
||||||
|
"#define HAVE_NEON\n")
|
||||||
|
set(SGEMM_UNROLL_M 16)
|
||||||
|
set(SGEMM_UNROLL_N 4)
|
||||||
|
set(DGEMM_UNROLL_M 8)
|
||||||
|
set(DGEMM_UNROLL_N 4)
|
||||||
|
set(CGEMM_UNROLL_M 8)
|
||||||
|
set(CGEMM_UNROLL_N 4)
|
||||||
|
set(ZGEMM_UNROLL_M 8)
|
||||||
|
set(ZGEMM_UNROLL_N 4)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Or should this actually be NUM_CORES?
|
||||||
|
if (${NUM_THREADS} GREATER 0)
|
||||||
|
file(APPEND ${TARGET_CONF_TEMP} "#define NUM_CORES\t${NUM_THREADS}\n")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# GetArch_2nd
|
||||||
|
foreach(float_char S;D;Q;C;Z;X)
|
||||||
|
if (NOT DEFINED ${float_char}GEMM_UNROLL_M)
|
||||||
|
set(${float_char}GEMM_UNROLL_M 2)
|
||||||
|
endif()
|
||||||
|
if (NOT DEFINED ${float_char}GEMM_UNROLL_N)
|
||||||
|
set(${float_char}GEMM_UNROLL_N 2)
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
file(APPEND ${TARGET_CONF_TEMP}
|
||||||
|
"#define GEMM_MULTITHREAD_THRESHOLD\t${GEMM_MULTITHREAD_THRESHOLD}\n")
|
||||||
|
# Move to where gen_config_h would place it
|
||||||
|
file(RENAME ${TARGET_CONF_TEMP} "${TARGET_CONF_DIR}/${TARGET_CONF}")
|
||||||
|
|
||||||
|
else(NOT CMAKE_CROSSCOMPILING)
|
||||||
|
# compile getarch
|
||||||
|
set(GETARCH_SRC
|
||||||
|
${PROJECT_SOURCE_DIR}/getarch.c
|
||||||
|
${CPUIDEMU}
|
||||||
|
)
|
||||||
|
|
||||||
|
if ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
#Use generic for MSVC now
|
#Use generic for MSVC now
|
||||||
message("MSVC")
|
message("MSVC")
|
||||||
set(GETARCH_FLAGS ${GETARCH_FLAGS} -DFORCE_GENERIC)
|
set(GETARCH_FLAGS ${GETARCH_FLAGS} -DFORCE_GENERIC)
|
||||||
else()
|
else()
|
||||||
list(APPEND GETARCH_SRC ${PROJECT_SOURCE_DIR}/cpuid.S)
|
list(APPEND GETARCH_SRC ${PROJECT_SOURCE_DIR}/cpuid.S)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
|
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
|
||||||
# disable WindowsStore strict CRT checks
|
# disable WindowsStore strict CRT checks
|
||||||
set(GETARCH_FLAGS ${GETARCH_FLAGS} -D_CRT_SECURE_NO_WARNINGS)
|
set(GETARCH_FLAGS ${GETARCH_FLAGS} -D_CRT_SECURE_NO_WARNINGS)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
set(GETARCH_DIR "${PROJECT_BINARY_DIR}/getarch_build")
|
set(GETARCH_DIR "${PROJECT_BINARY_DIR}/getarch_build")
|
||||||
set(GETARCH_BIN "getarch${CMAKE_EXECUTABLE_SUFFIX}")
|
set(GETARCH_BIN "getarch${CMAKE_EXECUTABLE_SUFFIX}")
|
||||||
file(MAKE_DIRECTORY ${GETARCH_DIR})
|
file(MAKE_DIRECTORY ${GETARCH_DIR})
|
||||||
configure_file(${TARGET_CONF_TEMP} ${GETARCH_DIR}/${TARGET_CONF} COPYONLY)
|
configure_file(${TARGET_CONF_TEMP} ${GETARCH_DIR}/${TARGET_CONF} COPYONLY)
|
||||||
if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
|
if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
|
||||||
try_compile(GETARCH_RESULT ${GETARCH_DIR}
|
try_compile(GETARCH_RESULT ${GETARCH_DIR}
|
||||||
SOURCES ${GETARCH_SRC}
|
SOURCES ${GETARCH_SRC}
|
||||||
COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} -I${GETARCH_DIR} -I${PROJECT_SOURCE_DIR} -I${PROJECT_BINARY_DIR}
|
COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} -I${GETARCH_DIR} -I${PROJECT_SOURCE_DIR} -I${PROJECT_BINARY_DIR}
|
||||||
|
@ -94,24 +200,24 @@ if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
|
||||||
if (NOT ${GETARCH_RESULT})
|
if (NOT ${GETARCH_RESULT})
|
||||||
MESSAGE(FATAL_ERROR "Compiling getarch failed ${GETARCH_LOG}")
|
MESSAGE(FATAL_ERROR "Compiling getarch failed ${GETARCH_LOG}")
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
message(STATUS "Running getarch")
|
message(STATUS "Running getarch")
|
||||||
|
|
||||||
# use the cmake binary w/ the -E param to run a shell command in a cross-platform way
|
# use the cmake binary w/ the -E param to run a shell command in a cross-platform way
|
||||||
execute_process(COMMAND ${PROJECT_BINARY_DIR}/${GETARCH_BIN} 0 OUTPUT_VARIABLE GETARCH_MAKE_OUT)
|
execute_process(COMMAND ${PROJECT_BINARY_DIR}/${GETARCH_BIN} 0 OUTPUT_VARIABLE GETARCH_MAKE_OUT)
|
||||||
execute_process(COMMAND ${PROJECT_BINARY_DIR}/${GETARCH_BIN} 1 OUTPUT_VARIABLE GETARCH_CONF_OUT)
|
execute_process(COMMAND ${PROJECT_BINARY_DIR}/${GETARCH_BIN} 1 OUTPUT_VARIABLE GETARCH_CONF_OUT)
|
||||||
|
|
||||||
message(STATUS "GETARCH results:\n${GETARCH_MAKE_OUT}")
|
message(STATUS "GETARCH results:\n${GETARCH_MAKE_OUT}")
|
||||||
|
|
||||||
# append config data from getarch to the TARGET file and read in CMake vars
|
# append config data from getarch to the TARGET file and read in CMake vars
|
||||||
file(APPEND ${TARGET_CONF_TEMP} ${GETARCH_CONF_OUT})
|
file(APPEND ${TARGET_CONF_TEMP} ${GETARCH_CONF_OUT})
|
||||||
ParseGetArchVars(${GETARCH_MAKE_OUT})
|
ParseGetArchVars(${GETARCH_MAKE_OUT})
|
||||||
|
|
||||||
set(GETARCH2_DIR "${PROJECT_BINARY_DIR}/getarch2_build")
|
set(GETARCH2_DIR "${PROJECT_BINARY_DIR}/getarch2_build")
|
||||||
set(GETARCH2_BIN "getarch_2nd${CMAKE_EXECUTABLE_SUFFIX}")
|
set(GETARCH2_BIN "getarch_2nd${CMAKE_EXECUTABLE_SUFFIX}")
|
||||||
file(MAKE_DIRECTORY ${GETARCH2_DIR})
|
file(MAKE_DIRECTORY ${GETARCH2_DIR})
|
||||||
configure_file(${TARGET_CONF_TEMP} ${GETARCH2_DIR}/${TARGET_CONF} COPYONLY)
|
configure_file(${TARGET_CONF_TEMP} ${GETARCH2_DIR}/${TARGET_CONF} COPYONLY)
|
||||||
if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
|
if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
|
||||||
try_compile(GETARCH2_RESULT ${GETARCH2_DIR}
|
try_compile(GETARCH2_RESULT ${GETARCH2_DIR}
|
||||||
SOURCES ${PROJECT_SOURCE_DIR}/getarch_2nd.c
|
SOURCES ${PROJECT_SOURCE_DIR}/getarch_2nd.c
|
||||||
COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} ${GETARCH2_FLAGS} -I${GETARCH2_DIR} -I${PROJECT_SOURCE_DIR} -I${PROJECT_BINARY_DIR}
|
COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} ${GETARCH2_FLAGS} -I${GETARCH2_DIR} -I${PROJECT_SOURCE_DIR} -I${PROJECT_BINARY_DIR}
|
||||||
|
@ -122,38 +228,17 @@ if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
|
||||||
if (NOT ${GETARCH2_RESULT})
|
if (NOT ${GETARCH2_RESULT})
|
||||||
MESSAGE(FATAL_ERROR "Compiling getarch_2nd failed ${GETARCH2_LOG}")
|
MESSAGE(FATAL_ERROR "Compiling getarch_2nd failed ${GETARCH2_LOG}")
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
|
||||||
|
|
||||||
# use the cmake binary w/ the -E param to run a shell command in a cross-platform way
|
|
||||||
execute_process(COMMAND ${PROJECT_BINARY_DIR}/${GETARCH2_BIN} 0 OUTPUT_VARIABLE GETARCH2_MAKE_OUT)
|
|
||||||
execute_process(COMMAND ${PROJECT_BINARY_DIR}/${GETARCH2_BIN} 1 OUTPUT_VARIABLE GETARCH2_CONF_OUT)
|
|
||||||
|
|
||||||
# append config data from getarch_2nd to the TARGET file and read in CMake vars
|
|
||||||
file(APPEND ${TARGET_CONF_TEMP} ${GETARCH2_CONF_OUT})
|
|
||||||
|
|
||||||
if (${BUILD_KERNEL})
|
|
||||||
configure_file(${TARGET_CONF_TEMP} ${PROJECT_BINARY_DIR}/kernel_config/${TARGET_CORE}/${TARGET_CONF} COPYONLY)
|
|
||||||
else ()
|
|
||||||
configure_file(${TARGET_CONF_TEMP} ${PROJECT_BINARY_DIR}/${TARGET_CONF} COPYONLY)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
ParseGetArchVars(${GETARCH2_MAKE_OUT})
|
|
||||||
|
|
||||||
# compile get_config_h
|
|
||||||
set(GEN_CONFIG_H_DIR "${PROJECT_BINARY_DIR}/genconfig_h_build")
|
|
||||||
set(GEN_CONFIG_H_BIN "gen_config_h${CMAKE_EXECUTABLE_SUFFIX}")
|
|
||||||
set(GEN_CONFIG_H_FLAGS "-DVERSION=\"${OpenBLAS_VERSION}\"")
|
|
||||||
file(MAKE_DIRECTORY ${GEN_CONFIG_H_DIR})
|
|
||||||
|
|
||||||
if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
|
|
||||||
try_compile(GEN_CONFIG_H_RESULT ${GEN_CONFIG_H_DIR}
|
|
||||||
SOURCES ${PROJECT_SOURCE_DIR}/gen_config_h.c
|
|
||||||
COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} ${GEN_CONFIG_H_FLAGS} -I${PROJECT_SOURCE_DIR}
|
|
||||||
OUTPUT_VARIABLE GEN_CONFIG_H_LOG
|
|
||||||
COPY_FILE ${PROJECT_BINARY_DIR}/${GEN_CONFIG_H_BIN}
|
|
||||||
)
|
|
||||||
|
|
||||||
if (NOT ${GEN_CONFIG_H_RESULT})
|
|
||||||
MESSAGE(FATAL_ERROR "Compiling gen_config_h failed ${GEN_CONFIG_H_LOG}")
|
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
|
||||||
|
# use the cmake binary w/ the -E param to run a shell command in a cross-platform way
|
||||||
|
execute_process(COMMAND ${PROJECT_BINARY_DIR}/${GETARCH2_BIN} 0 OUTPUT_VARIABLE GETARCH2_MAKE_OUT)
|
||||||
|
execute_process(COMMAND ${PROJECT_BINARY_DIR}/${GETARCH2_BIN} 1 OUTPUT_VARIABLE GETARCH2_CONF_OUT)
|
||||||
|
|
||||||
|
# append config data from getarch_2nd to the TARGET file and read in CMake vars
|
||||||
|
file(APPEND ${TARGET_CONF_TEMP} ${GETARCH2_CONF_OUT})
|
||||||
|
|
||||||
|
configure_file(${TARGET_CONF_TEMP} ${TARGET_CONF_DIR}/${TARGET_CONF} COPYONLY)
|
||||||
|
|
||||||
|
ParseGetArchVars(${GETARCH2_MAKE_OUT})
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
|
@ -4,10 +4,25 @@
|
||||||
##
|
##
|
||||||
set(NETLIB_LAPACK_DIR "${PROJECT_SOURCE_DIR}/lapack-netlib")
|
set(NETLIB_LAPACK_DIR "${PROJECT_SOURCE_DIR}/lapack-netlib")
|
||||||
|
|
||||||
# TODO: Makefile.system detects Darwin (mac) and switches to clang here -hpa
|
# System detection, via CMake.
|
||||||
# http://stackoverflow.com/questions/714100/os-detecting-makefile
|
include("${PROJECT_SOURCE_DIR}/cmake/system_check.cmake")
|
||||||
|
|
||||||
# TODO: Makefile.system sets HOSTCC = $(CC) here if not already set -hpa
|
if(CMAKE_CROSSCOMPILING AND NOT DEFINED TARGET)
|
||||||
|
# Detect target without running getarch
|
||||||
|
if (ARM64)
|
||||||
|
set(TARGET "ARMV8")
|
||||||
|
elseif(ARM)
|
||||||
|
set(TARGET "ARMV7") # TODO: Ask compiler which arch this is
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "When cross compiling, a TARGET is required.")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Other files expect CORE, which is actually TARGET and will become TARGET_CORE for kernel build. Confused yet?
|
||||||
|
# It seems we are meant to use TARGET as input and CORE internally as kernel.
|
||||||
|
if(NOT DEFINED CORE AND DEFINED TARGET)
|
||||||
|
set(CORE ${TARGET})
|
||||||
|
endif()
|
||||||
|
|
||||||
# TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
|
# TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
|
||||||
if (DEFINED TARGET_CORE)
|
if (DEFINED TARGET_CORE)
|
||||||
|
@ -27,7 +42,7 @@ if (DEFINED BINARY AND DEFINED TARGET AND BINARY EQUAL 32)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (DEFINED TARGET)
|
if (DEFINED TARGET)
|
||||||
message(STATUS "Targetting the ${TARGET} architecture.")
|
message(STATUS "Targeting the ${TARGET} architecture.")
|
||||||
set(GETARCH_FLAGS "-DFORCE_${TARGET}")
|
set(GETARCH_FLAGS "-DFORCE_${TARGET}")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
@ -52,21 +67,16 @@ if (NO_AVX2)
|
||||||
set(GETARCH_FLAGS "${GETARCH_FLAGS} -DNO_AVX2")
|
set(GETARCH_FLAGS "${GETARCH_FLAGS} -DNO_AVX2")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (CMAKE_BUILD_TYPE STREQUAL Debug)
|
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
set(GETARCH_FLAGS "${GETARCH_FLAGS} -g")
|
set(GETARCH_FLAGS "${GETARCH_FLAGS} ${CMAKE_C_FLAGS_DEBUG}")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# TODO: let CMake handle this? -hpa
|
|
||||||
#if (${QUIET_MAKE})
|
|
||||||
# set(MAKE "${MAKE} -s")
|
|
||||||
#endif()
|
|
||||||
|
|
||||||
if (NOT DEFINED NO_PARALLEL_MAKE)
|
if (NOT DEFINED NO_PARALLEL_MAKE)
|
||||||
set(NO_PARALLEL_MAKE 0)
|
set(NO_PARALLEL_MAKE 0)
|
||||||
endif ()
|
endif ()
|
||||||
set(GETARCH_FLAGS "${GETARCH_FLAGS} -DNO_PARALLEL_MAKE=${NO_PARALLEL_MAKE}")
|
set(GETARCH_FLAGS "${GETARCH_FLAGS} -DNO_PARALLEL_MAKE=${NO_PARALLEL_MAKE}")
|
||||||
|
|
||||||
if (CMAKE_CXX_COMPILER STREQUAL loongcc)
|
if (CMAKE_C_COMPILER STREQUAL loongcc)
|
||||||
set(GETARCH_FLAGS "${GETARCH_FLAGS} -static")
|
set(GETARCH_FLAGS "${GETARCH_FLAGS} -static")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
@ -77,51 +87,39 @@ else ()
|
||||||
set(ONLY_CBLAS 0)
|
set(ONLY_CBLAS 0)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
include("${PROJECT_SOURCE_DIR}/cmake/prebuild.cmake")
|
# N.B. this is NUM_THREAD in Makefile.system which is probably a bug -hpa
|
||||||
|
if (NOT CMAKE_CROSSCOMPILING)
|
||||||
|
if (NOT DEFINED NUM_CORES)
|
||||||
|
include(ProcessorCount)
|
||||||
|
ProcessorCount(NUM_CORES)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (NOT NUM_CORES EQUAL 0)
|
||||||
|
# HT?
|
||||||
|
set(NUM_THREADS ${NUM_CORES})
|
||||||
|
endif ()
|
||||||
|
endif()
|
||||||
|
|
||||||
if (NOT DEFINED NUM_THREADS)
|
if (NOT DEFINED NUM_THREADS)
|
||||||
set(NUM_THREADS ${NUM_CORES})
|
set(NUM_THREADS 0)
|
||||||
endif ()
|
endif()
|
||||||
|
|
||||||
if (${NUM_THREADS} EQUAL 1)
|
if (${NUM_THREADS} LESS 2)
|
||||||
set(USE_THREAD 0)
|
set(USE_THREAD 0)
|
||||||
|
elseif(NOT DEFINED USE_THREAD)
|
||||||
|
set(USE_THREAD 1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (DEFINED USE_THREAD)
|
if (USE_THREAD)
|
||||||
if (NOT ${USE_THREAD})
|
message(STATUS "Multi-threading enabled with ${NUM_THREADS} threads.")
|
||||||
unset(SMP)
|
|
||||||
else ()
|
|
||||||
set(SMP 1)
|
|
||||||
endif ()
|
|
||||||
else ()
|
|
||||||
# N.B. this is NUM_THREAD in Makefile.system which is probably a bug -hpa
|
|
||||||
if (${NUM_THREADS} EQUAL 1)
|
|
||||||
unset(SMP)
|
|
||||||
else ()
|
|
||||||
set(SMP 1)
|
|
||||||
endif ()
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (${SMP})
|
include("${PROJECT_SOURCE_DIR}/cmake/prebuild.cmake")
|
||||||
message(STATUS "SMP enabled.")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (NOT DEFINED NEED_PIC)
|
if (NOT DEFINED NEED_PIC)
|
||||||
set(NEED_PIC 1)
|
set(NEED_PIC 1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# TODO: I think CMake should be handling all this stuff -hpa
|
|
||||||
unset(ARFLAGS)
|
|
||||||
set(CPP "${COMPILER} -E")
|
|
||||||
set(AR "${CROSS_SUFFIX}ar")
|
|
||||||
set(AS "${CROSS_SUFFIX}as")
|
|
||||||
set(LD "${CROSS_SUFFIX}ld")
|
|
||||||
set(RANLIB "${CROSS_SUFFIX}ranlib")
|
|
||||||
set(NM "${CROSS_SUFFIX}nm")
|
|
||||||
set(DLLWRAP "${CROSS_SUFFIX}dllwrap")
|
|
||||||
set(OBJCOPY "${CROSS_SUFFIX}objcopy")
|
|
||||||
set(OBJCONV "${CROSS_SUFFIX}objconv")
|
|
||||||
|
|
||||||
# OS dependent settings
|
# OS dependent settings
|
||||||
include("${PROJECT_SOURCE_DIR}/cmake/os.cmake")
|
include("${PROJECT_SOURCE_DIR}/cmake/os.cmake")
|
||||||
|
|
||||||
|
@ -149,11 +147,13 @@ if (NEED_PIC)
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -fPIC")
|
set(CCOMMON_OPT "${CCOMMON_OPT} -fPIC")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
if (NOT NOFORTRAN)
|
||||||
if (${F_COMPILER} STREQUAL "SUN")
|
if (${F_COMPILER} STREQUAL "SUN")
|
||||||
set(FCOMMON_OPT "${FCOMMON_OPT} -pic")
|
set(FCOMMON_OPT "${FCOMMON_OPT} -pic")
|
||||||
else ()
|
else ()
|
||||||
set(FCOMMON_OPT "${FCOMMON_OPT} -fPIC")
|
set(FCOMMON_OPT "${FCOMMON_OPT} -fPIC")
|
||||||
endif ()
|
endif ()
|
||||||
|
endif()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (DYNAMIC_ARCH)
|
if (DYNAMIC_ARCH)
|
||||||
|
@ -174,7 +174,7 @@ if (NO_AVX)
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX")
|
set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (${ARCH} STREQUAL "x86")
|
if (X86)
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX")
|
set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
@ -182,25 +182,20 @@ if (NO_AVX2)
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX2")
|
set(CCOMMON_OPT "${CCOMMON_OPT} -DNO_AVX2")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (SMP)
|
if (USE_THREAD)
|
||||||
|
# USE_SIMPLE_THREADED_LEVEL3 = 1
|
||||||
|
# NO_AFFINITY = 1
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -DSMP_SERVER")
|
set(CCOMMON_OPT "${CCOMMON_OPT} -DSMP_SERVER")
|
||||||
|
|
||||||
if (${ARCH} STREQUAL "mips64")
|
if (MIPS64)
|
||||||
if (NOT ${CORE} STREQUAL "LOONGSON3B")
|
if (NOT ${CORE} STREQUAL "LOONGSON3B")
|
||||||
set(USE_SIMPLE_THREADED_LEVEL3 1)
|
set(USE_SIMPLE_THREADED_LEVEL3 1)
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (USE_OPENMP)
|
|
||||||
# USE_SIMPLE_THREADED_LEVEL3 = 1
|
|
||||||
# NO_AFFINITY = 1
|
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -DUSE_OPENMP")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (BIGNUMA)
|
if (BIGNUMA)
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -DBIGNUMA")
|
set(CCOMMON_OPT "${CCOMMON_OPT} -DBIGNUMA")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (NO_WARMUP)
|
if (NO_WARMUP)
|
||||||
|
@ -263,7 +258,7 @@ if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||||
set(NO_AFFINITY 1)
|
set(NO_AFFINITY 1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (NOT ${ARCH} STREQUAL "x86_64" AND NOT ${ARCH} STREQUAL "x86" AND NOT ${CORE} STREQUAL "LOONGSON3B")
|
if (NOT X86_64 AND NOT X86 AND NOT ${CORE} STREQUAL "LOONGSON3B")
|
||||||
set(NO_AFFINITY 1)
|
set(NO_AFFINITY 1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
@ -295,52 +290,19 @@ if (MIXED_MEMORY_ALLOCATION)
|
||||||
set(CCOMMON_OPT "${CCOMMON_OPT} -DMIXED_MEMORY_ALLOCATION")
|
set(CCOMMON_OPT "${CCOMMON_OPT} -DMIXED_MEMORY_ALLOCATION")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
|
|
||||||
set(TAR gtar)
|
|
||||||
set(PATCH gpatch)
|
|
||||||
set(GREP ggrep)
|
|
||||||
else ()
|
|
||||||
set(TAR tar)
|
|
||||||
set(PATCH patch)
|
|
||||||
set(GREP grep)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (NOT DEFINED MD5SUM)
|
|
||||||
set(MD5SUM md5sum)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
set(AWK awk)
|
|
||||||
|
|
||||||
set(SED sed)
|
|
||||||
|
|
||||||
set(REVISION "-r${OpenBLAS_VERSION}")
|
set(REVISION "-r${OpenBLAS_VERSION}")
|
||||||
set(MAJOR_VERSION ${OpenBLAS_MAJOR_VERSION})
|
set(MAJOR_VERSION ${OpenBLAS_MAJOR_VERSION})
|
||||||
|
|
||||||
if (DEBUG)
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CCOMMON_OPT}")
|
||||||
set(COMMON_OPT "${COMMON_OPT} -g")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (NOT DEFINED COMMON_OPT)
|
|
||||||
set(COMMON_OPT "-O2")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
#For x86 32-bit
|
|
||||||
if (DEFINED BINARY AND BINARY EQUAL 32)
|
|
||||||
if (NOT MSVC)
|
|
||||||
set(COMMON_OPT "${COMMON_OPT} -m32")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_OPT} ${CCOMMON_OPT}")
|
|
||||||
if(NOT MSVC)
|
if(NOT MSVC)
|
||||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${COMMON_OPT} ${CCOMMON_OPT}")
|
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${CCOMMON_OPT}")
|
||||||
endif()
|
endif()
|
||||||
# TODO: not sure what PFLAGS is -hpa
|
# TODO: not sure what PFLAGS is -hpa
|
||||||
set(PFLAGS "${PFLAGS} ${COMMON_OPT} ${CCOMMON_OPT} -I${TOPDIR} -DPROFILE ${COMMON_PROF}")
|
set(PFLAGS "${PFLAGS} ${CCOMMON_OPT} -I${TOPDIR} -DPROFILE ${COMMON_PROF}")
|
||||||
|
|
||||||
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${COMMON_OPT} ${FCOMMON_OPT}")
|
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${FCOMMON_OPT}")
|
||||||
# TODO: not sure what FPFLAGS is -hpa
|
# TODO: not sure what FPFLAGS is -hpa
|
||||||
set(FPFLAGS "${FPFLAGS} ${COMMON_OPT} ${FCOMMON_OPT} ${COMMON_PROF}")
|
set(FPFLAGS "${FPFLAGS} ${FCOMMON_OPT} ${COMMON_PROF}")
|
||||||
|
|
||||||
#For LAPACK Fortran codes.
|
#For LAPACK Fortran codes.
|
||||||
set(LAPACK_FFLAGS "${LAPACK_FFLAGS} ${CMAKE_Fortran_FLAGS}")
|
set(LAPACK_FFLAGS "${LAPACK_FFLAGS} ${CMAKE_Fortran_FLAGS}")
|
||||||
|
@ -348,7 +310,7 @@ set(LAPACK_FPFLAGS "${LAPACK_FPFLAGS} ${FPFLAGS}")
|
||||||
|
|
||||||
#Disable -fopenmp for LAPACK Fortran codes on Windows.
|
#Disable -fopenmp for LAPACK Fortran codes on Windows.
|
||||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
||||||
set(FILTER_FLAGS "-fopenmp;-mp;-openmp;-xopenmp=parralel")
|
set(FILTER_FLAGS "-fopenmp;-mp;-openmp;-xopenmp=parallel")
|
||||||
foreach (FILTER_FLAG ${FILTER_FLAGS})
|
foreach (FILTER_FLAG ${FILTER_FLAGS})
|
||||||
string(REPLACE ${FILTER_FLAG} "" LAPACK_FFLAGS ${LAPACK_FFLAGS})
|
string(REPLACE ${FILTER_FLAG} "" LAPACK_FFLAGS ${LAPACK_FFLAGS})
|
||||||
string(REPLACE ${FILTER_FLAG} "" LAPACK_FPFLAGS ${LAPACK_FPFLAGS})
|
string(REPLACE ${FILTER_FLAG} "" LAPACK_FPFLAGS ${LAPACK_FPFLAGS})
|
||||||
|
@ -386,7 +348,7 @@ if (NOT DEFINED LIBSUFFIX)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (DYNAMIC_ARCH)
|
if (DYNAMIC_ARCH)
|
||||||
if (DEFINED SMP)
|
if (USE_THREAD)
|
||||||
set(LIBNAME "${LIBPREFIX}p${REVISION}.${LIBSUFFIX}")
|
set(LIBNAME "${LIBPREFIX}p${REVISION}.${LIBSUFFIX}")
|
||||||
set(LIBNAME_P "${LIBPREFIX}p${REVISION}_p.${LIBSUFFIX}")
|
set(LIBNAME_P "${LIBPREFIX}p${REVISION}_p.${LIBSUFFIX}")
|
||||||
else ()
|
else ()
|
||||||
|
@ -394,7 +356,7 @@ if (DYNAMIC_ARCH)
|
||||||
set(LIBNAME_P "${LIBPREFIX}${REVISION}_p.${LIBSUFFIX}")
|
set(LIBNAME_P "${LIBPREFIX}${REVISION}_p.${LIBSUFFIX}")
|
||||||
endif ()
|
endif ()
|
||||||
else ()
|
else ()
|
||||||
if (DEFINED SMP)
|
if (USE_THREAD)
|
||||||
set(LIBNAME "${LIBPREFIX}_${LIBCORE}p${REVISION}.${LIBSUFFIX}")
|
set(LIBNAME "${LIBPREFIX}_${LIBCORE}p${REVISION}.${LIBSUFFIX}")
|
||||||
set(LIBNAME_P "${LIBPREFIX}_${LIBCORE}p${REVISION}_p.${LIBSUFFIX}")
|
set(LIBNAME_P "${LIBPREFIX}_${LIBCORE}p${REVISION}_p.${LIBSUFFIX}")
|
||||||
else ()
|
else ()
|
||||||
|
@ -436,7 +398,7 @@ endif ()
|
||||||
set(USE_GEMM3M 0)
|
set(USE_GEMM3M 0)
|
||||||
|
|
||||||
if (DEFINED ARCH)
|
if (DEFINED ARCH)
|
||||||
if (${ARCH} STREQUAL "x86" OR ${ARCH} STREQUAL "x86_64" OR ${ARCH} STREQUAL "ia64" OR ${ARCH} STREQUAL "MIPS")
|
if (X86 OR X86_64 OR ${ARCH} STREQUAL "ia64" OR MIPS64)
|
||||||
set(USE_GEMM3M 1)
|
set(USE_GEMM3M 1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
@ -519,35 +481,3 @@ endif ()
|
||||||
# export CUFLAGS
|
# export CUFLAGS
|
||||||
# export CULIB
|
# export CULIB
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#.SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
|
|
||||||
#
|
|
||||||
#.f.$(SUFFIX):
|
|
||||||
# $(FC) $(FFLAGS) -c $< -o $(@F)
|
|
||||||
#
|
|
||||||
#.f.$(PSUFFIX):
|
|
||||||
# $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
|
|
||||||
|
|
||||||
# these are not cross-platform
|
|
||||||
#ifdef BINARY64
|
|
||||||
#PATHSCALEPATH = /opt/pathscale/lib/3.1
|
|
||||||
#PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
|
|
||||||
#else
|
|
||||||
#PATHSCALEPATH = /opt/pathscale/lib/3.1/32
|
|
||||||
#PGIPATH = /opt/pgi/linux86/7.1-5/lib
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ACMLPATH = /opt/acml/4.3.0
|
|
||||||
#ifneq ($(OSNAME), Darwin)
|
|
||||||
#MKLPATH = /opt/intel/mkl/10.2.2.025/lib
|
|
||||||
#else
|
|
||||||
#MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
|
|
||||||
#endif
|
|
||||||
#ATLASPATH = /opt/atlas/3.9.17/opteron
|
|
||||||
#FLAMEPATH = $(HOME)/flame/lib
|
|
||||||
#ifneq ($(OSNAME), SunOS)
|
|
||||||
#SUNPATH = /opt/sunstudio12.1
|
|
||||||
#else
|
|
||||||
#SUNPATH = /opt/SUNWspro
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
##
|
||||||
|
## Author: Hank Anderson <hank@statease.com>
|
||||||
|
## 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.
|
||||||
|
|
||||||
|
# Convert CMake vars into the format that OpenBLAS expects
|
||||||
|
string(TOUPPER ${CMAKE_SYSTEM_NAME} HOST_OS)
|
||||||
|
if (${HOST_OS} STREQUAL "WINDOWS")
|
||||||
|
set(HOST_OS WINNT)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if(CMAKE_COMPILER_IS_GNUCC AND WIN32)
|
||||||
|
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpmachine
|
||||||
|
OUTPUT_VARIABLE OPENBLAS_GCC_TARGET_MACHINE
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(OPENBLAS_GCC_TARGET_MACHINE MATCHES "amd64|x86_64|AMD64")
|
||||||
|
set(MINGW64 1)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Pretty thorough determination of arch. Add more if needed
|
||||||
|
if(CMAKE_CL_64 OR MINGW64)
|
||||||
|
set(X86_64 1)
|
||||||
|
elseif(MINGW OR (MSVC AND NOT CMAKE_CROSSCOMPILING))
|
||||||
|
set(X86 1)
|
||||||
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc.*|power.*|Power.*")
|
||||||
|
set(PPC 1)
|
||||||
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips64.*")
|
||||||
|
set(MIPS64 1)
|
||||||
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
|
||||||
|
set(X86_64 1)
|
||||||
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*|amd64.*|AMD64.*")
|
||||||
|
set(X86 1)
|
||||||
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)")
|
||||||
|
set(ARM 1)
|
||||||
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)")
|
||||||
|
set(ARM64 1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (X86_64)
|
||||||
|
set(ARCH "x86_64")
|
||||||
|
elseif(X86)
|
||||||
|
set(ARCH "x86")
|
||||||
|
elseif(PPC)
|
||||||
|
set(ARCH "power")
|
||||||
|
elseif(ARM)
|
||||||
|
set(ARCH "arm")
|
||||||
|
elseif(ARM64)
|
||||||
|
set(ARCH "arm64")
|
||||||
|
else()
|
||||||
|
set(ARCH ${CMAKE_SYSTEM_PROCESSOR} CACHE STRING "Target Architecture")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (NOT BINARY)
|
||||||
|
if (X86_64 OR ARM64 OR PPC OR MIPS64)
|
||||||
|
set(BINARY 64)
|
||||||
|
else ()
|
||||||
|
set(BINARY 32)
|
||||||
|
endif ()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(BINARY EQUAL 64)
|
||||||
|
set(BINARY64 1)
|
||||||
|
else()
|
||||||
|
set(BINARY32 1)
|
||||||
|
endif()
|
||||||
|
|
|
@ -16,7 +16,7 @@ foreach(float_type ${FLOAT_TYPES})
|
||||||
add_executable(x${float_char}cblat1
|
add_executable(x${float_char}cblat1
|
||||||
c_${float_char}blat1.f
|
c_${float_char}blat1.f
|
||||||
c_${float_char}blas1.c)
|
c_${float_char}blas1.c)
|
||||||
target_link_libraries(x${float_char}cblat1 ${OpenBLAS_LIBNAME}_static)
|
target_link_libraries(x${float_char}cblat1 ${OpenBLAS_LIBNAME})
|
||||||
add_test(NAME "x${float_char}cblat1"
|
add_test(NAME "x${float_char}cblat1"
|
||||||
COMMAND "${CMAKE_CURRENT_BINARY_DIR}/x${float_char}cblat1")
|
COMMAND "${CMAKE_CURRENT_BINARY_DIR}/x${float_char}cblat1")
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ foreach(float_type ${FLOAT_TYPES})
|
||||||
auxiliary.c
|
auxiliary.c
|
||||||
c_xerbla.c
|
c_xerbla.c
|
||||||
constant.c)
|
constant.c)
|
||||||
target_link_libraries(x${float_char}cblat2 ${OpenBLAS_LIBNAME}_static)
|
target_link_libraries(x${float_char}cblat2 ${OpenBLAS_LIBNAME})
|
||||||
add_test(NAME "x${float_char}cblat2"
|
add_test(NAME "x${float_char}cblat2"
|
||||||
COMMAND sh "${CMAKE_CURRENT_BINARY_DIR}/test_cblas_helper.sh" "${CMAKE_CURRENT_BINARY_DIR}/x${float_char}cblat2" "${PROJECT_SOURCE_DIR}/ctest/${float_char}in2")
|
COMMAND sh "${CMAKE_CURRENT_BINARY_DIR}/test_cblas_helper.sh" "${CMAKE_CURRENT_BINARY_DIR}/x${float_char}cblat2" "${PROJECT_SOURCE_DIR}/ctest/${float_char}in2")
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ foreach(float_type ${FLOAT_TYPES})
|
||||||
auxiliary.c
|
auxiliary.c
|
||||||
c_xerbla.c
|
c_xerbla.c
|
||||||
constant.c)
|
constant.c)
|
||||||
target_link_libraries(x${float_char}cblat3 ${OpenBLAS_LIBNAME}_static)
|
target_link_libraries(x${float_char}cblat3 ${OpenBLAS_LIBNAME})
|
||||||
add_test(NAME "x${float_char}cblat3"
|
add_test(NAME "x${float_char}cblat3"
|
||||||
COMMAND sh "${CMAKE_CURRENT_BINARY_DIR}/test_cblas_helper.sh" "${CMAKE_CURRENT_BINARY_DIR}/x${float_char}cblat3" "${PROJECT_SOURCE_DIR}/ctest/${float_char}in3")
|
COMMAND sh "${CMAKE_CURRENT_BINARY_DIR}/test_cblas_helper.sh" "${CMAKE_CURRENT_BINARY_DIR}/x${float_char}cblat3" "${PROJECT_SOURCE_DIR}/ctest/${float_char}in3")
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,7 @@ GenerateNamedObjects("zgbmv_k.c" "TRANS;CONJ;XCONJ" "gbmv_d" false "" "" "" 2)
|
||||||
# special defines for complex
|
# special defines for complex
|
||||||
foreach (float_type ${FLOAT_TYPES})
|
foreach (float_type ${FLOAT_TYPES})
|
||||||
|
|
||||||
if (SMP)
|
if (USE_THREAD)
|
||||||
GenerateNamedObjects("gemv_thread.c" "" "gemv_thread_n" false "" "" false ${float_type})
|
GenerateNamedObjects("gemv_thread.c" "" "gemv_thread_n" false "" "" false ${float_type})
|
||||||
GenerateNamedObjects("gemv_thread.c" "TRANSA" "gemv_thread_t" false "" "" false ${float_type})
|
GenerateNamedObjects("gemv_thread.c" "TRANSA" "gemv_thread_t" false "" "" false ${float_type})
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ foreach (float_type ${FLOAT_TYPES})
|
||||||
GenerateNamedObjects("z${ulvm_source}" "LOWER;HEMVREV" "${op_name}_M" false "" "" false ${float_type})
|
GenerateNamedObjects("z${ulvm_source}" "LOWER;HEMVREV" "${op_name}_M" false "" "" false ${float_type})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
if (SMP)
|
if (USE_THREAD)
|
||||||
|
|
||||||
GenerateNamedObjects("gemv_thread.c" "CONJ" "gemv_thread_r" false "" "" false ${float_type})
|
GenerateNamedObjects("gemv_thread.c" "CONJ" "gemv_thread_r" false "" "" false ${float_type})
|
||||||
GenerateNamedObjects("gemv_thread.c" "CONJ;TRANSA" "gemv_thread_c" false "" "" false ${float_type})
|
GenerateNamedObjects("gemv_thread.c" "CONJ;TRANSA" "gemv_thread_c" false "" "" false ${float_type})
|
||||||
|
@ -186,7 +186,7 @@ foreach (float_type ${FLOAT_TYPES})
|
||||||
GenerateCombinationObjects("${l_source}" "UNIT" "N" "TRANSA" 0 "${op_name}_TU" false ${float_type})
|
GenerateCombinationObjects("${l_source}" "UNIT" "N" "TRANSA" 0 "${op_name}_TU" false ${float_type})
|
||||||
endforeach ()
|
endforeach ()
|
||||||
|
|
||||||
if (SMP)
|
if (USE_THREAD)
|
||||||
GenerateNamedObjects("ger_thread.c" "" "" false "" "" false ${float_type})
|
GenerateNamedObjects("ger_thread.c" "" "" false "" "" false ${float_type})
|
||||||
foreach(nu_smp_source ${NU_SMP_SOURCES})
|
foreach(nu_smp_source ${NU_SMP_SOURCES})
|
||||||
string(REGEX MATCH "[a-z]+_[a-z]+" op_name ${nu_smp_source})
|
string(REGEX MATCH "[a-z]+_[a-z]+" op_name ${nu_smp_source})
|
||||||
|
@ -197,7 +197,7 @@ foreach (float_type ${FLOAT_TYPES})
|
||||||
endif ()
|
endif ()
|
||||||
endforeach ()
|
endforeach ()
|
||||||
|
|
||||||
if (SMP)
|
if (USE_THREAD)
|
||||||
GenerateCombinationObjects("${UL_SMP_SOURCES}" "LOWER" "U" "" 2)
|
GenerateCombinationObjects("${UL_SMP_SOURCES}" "LOWER" "U" "" 2)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ set(GEMM_COMPLEX_DEFINES RN CN RT CT NR TR RR CR NC TC RC CC)
|
||||||
foreach (GEMM_DEFINE ${GEMM_DEFINES})
|
foreach (GEMM_DEFINE ${GEMM_DEFINES})
|
||||||
string(TOLOWER ${GEMM_DEFINE} GEMM_DEFINE_LC)
|
string(TOLOWER ${GEMM_DEFINE} GEMM_DEFINE_LC)
|
||||||
GenerateNamedObjects("gemm.c" "${GEMM_DEFINE}" "gemm_${GEMM_DEFINE_LC}" 0)
|
GenerateNamedObjects("gemm.c" "${GEMM_DEFINE}" "gemm_${GEMM_DEFINE_LC}" 0)
|
||||||
if (SMP AND NOT USE_SIMPLE_THREADED_LEVEL3)
|
if (USE_THREAD AND NOT USE_SIMPLE_THREADED_LEVEL3)
|
||||||
GenerateNamedObjects("gemm.c" "${GEMM_DEFINE};THREADED_LEVEL3" "gemm_thread_${GEMM_DEFINE_LC}" 0)
|
GenerateNamedObjects("gemm.c" "${GEMM_DEFINE};THREADED_LEVEL3" "gemm_thread_${GEMM_DEFINE_LC}" 0)
|
||||||
endif ()
|
endif ()
|
||||||
endforeach ()
|
endforeach ()
|
||||||
|
@ -32,7 +32,7 @@ GenerateCombinationObjects("syrk_k.c" "LOWER;TRANS" "U;N" "" 1)
|
||||||
GenerateCombinationObjects("syr2k_k.c" "LOWER;TRANS" "U;N" "" 1)
|
GenerateCombinationObjects("syr2k_k.c" "LOWER;TRANS" "U;N" "" 1)
|
||||||
GenerateCombinationObjects("syrk_kernel.c" "LOWER" "U" "" 2)
|
GenerateCombinationObjects("syrk_kernel.c" "LOWER" "U" "" 2)
|
||||||
GenerateCombinationObjects("syr2k_kernel.c" "LOWER" "U" "" 2)
|
GenerateCombinationObjects("syr2k_kernel.c" "LOWER" "U" "" 2)
|
||||||
if (SMP)
|
if (USE_THREAD)
|
||||||
|
|
||||||
# N.B. these do NOT have a float type (e.g. DOUBLE) defined!
|
# N.B. these do NOT have a float type (e.g. DOUBLE) defined!
|
||||||
GenerateNamedObjects("gemm_thread_m.c;gemm_thread_n.c;gemm_thread_mn.c;gemm_thread_variable.c;syrk_thread.c" "" "" 0 "" "" 1)
|
GenerateNamedObjects("gemm_thread_m.c;gemm_thread_n.c;gemm_thread_mn.c;gemm_thread_variable.c;syrk_thread.c" "" "" 0 "" "" 1)
|
||||||
|
@ -71,7 +71,7 @@ foreach (float_type ${FLOAT_TYPES})
|
||||||
GenerateNamedObjects("zher2k_k.c" "HER2K;LOWER" "her2k_LN" false "" "" false ${float_type})
|
GenerateNamedObjects("zher2k_k.c" "HER2K;LOWER" "her2k_LN" false "" "" false ${float_type})
|
||||||
GenerateNamedObjects("zher2k_k.c" "HER2K;LOWER;TRANS;CONJ" "her2k_LC" false "" "" false ${float_type})
|
GenerateNamedObjects("zher2k_k.c" "HER2K;LOWER;TRANS;CONJ" "her2k_LC" false "" "" false ${float_type})
|
||||||
|
|
||||||
if (SMP AND NOT USE_SIMPLE_THREADED_LEVEL3)
|
if (USE_THREAD AND NOT USE_SIMPLE_THREADED_LEVEL3)
|
||||||
#herk
|
#herk
|
||||||
GenerateCombinationObjects("zherk_k.c" "LOWER" "U" "HERK;THREADED_LEVEL3" 3 "herk_thread_N" false ${float_type})
|
GenerateCombinationObjects("zherk_k.c" "LOWER" "U" "HERK;THREADED_LEVEL3" 3 "herk_thread_N" false ${float_type})
|
||||||
GenerateCombinationObjects("zherk_k.c" "LOWER" "U" "HERK;THREADED_LEVEL3;TRANS;CONJ" 3 "herk_thread_C" false ${float_type})
|
GenerateCombinationObjects("zherk_k.c" "LOWER" "U" "HERK;THREADED_LEVEL3;TRANS;CONJ" 3 "herk_thread_C" false ${float_type})
|
||||||
|
@ -93,7 +93,7 @@ foreach (float_type ${FLOAT_TYPES})
|
||||||
if(USE_GEMM3M)
|
if(USE_GEMM3M)
|
||||||
GenerateNamedObjects("gemm3m.c" "${gemm_define}" "gemm3m_${gemm_define_LC}" false "" "" false ${float_type})
|
GenerateNamedObjects("gemm3m.c" "${gemm_define}" "gemm3m_${gemm_define_LC}" false "" "" false ${float_type})
|
||||||
endif()
|
endif()
|
||||||
if (SMP AND NOT USE_SIMPLE_THREADED_LEVEL3)
|
if (USE_THREAD AND NOT USE_SIMPLE_THREADED_LEVEL3)
|
||||||
GenerateNamedObjects("gemm.c" "${gemm_define};THREADED_LEVEL3" "gemm_thread_${gemm_define_LC}" false "" "" false ${float_type})
|
GenerateNamedObjects("gemm.c" "${gemm_define};THREADED_LEVEL3" "gemm_thread_${gemm_define_LC}" false "" "" false ${float_type})
|
||||||
if(USE_GEMM3M)
|
if(USE_GEMM3M)
|
||||||
GenerateNamedObjects("gemm3m.c" "${gemm_define};THREADED_LEVEL3" "gemm3m_thread_${gemm_define_LC}" false "" "" false ${float_type})
|
GenerateNamedObjects("gemm3m.c" "${gemm_define};THREADED_LEVEL3" "gemm3m_thread_${gemm_define_LC}" false "" "" false ${float_type})
|
||||||
|
@ -106,7 +106,7 @@ foreach (float_type ${FLOAT_TYPES})
|
||||||
foreach (GEMM_DEFINE ${GEMM_DEFINES})
|
foreach (GEMM_DEFINE ${GEMM_DEFINES})
|
||||||
string(TOLOWER ${GEMM_DEFINE} GEMM_DEFINE_LC)
|
string(TOLOWER ${GEMM_DEFINE} GEMM_DEFINE_LC)
|
||||||
GenerateNamedObjects("gemm3m.c" "${GEMM_DEFINE}" "gemm3m_${GEMM_DEFINE_LC}" false "" "" false ${float_type})
|
GenerateNamedObjects("gemm3m.c" "${GEMM_DEFINE}" "gemm3m_${GEMM_DEFINE_LC}" false "" "" false ${float_type})
|
||||||
if (SMP AND NOT USE_SIMPLE_THREADED_LEVEL3)
|
if (USE_THREAD AND NOT USE_SIMPLE_THREADED_LEVEL3)
|
||||||
GenerateNamedObjects("gemm3m.c" "${GEMM_DEFINE};THREADED_LEVEL3" "gemm3m_thread_${GEMM_DEFINE_LC}" false "" "" false ${float_type})
|
GenerateNamedObjects("gemm3m.c" "${GEMM_DEFINE};THREADED_LEVEL3" "gemm3m_thread_${GEMM_DEFINE_LC}" false "" "" false ${float_type})
|
||||||
endif ()
|
endif ()
|
||||||
endforeach ()
|
endforeach ()
|
||||||
|
|
|
@ -7,7 +7,7 @@ else ()
|
||||||
set(MEMORY memory.c)
|
set(MEMORY memory.c)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (SMP)
|
if (USE_THREAD)
|
||||||
|
|
||||||
if (USE_OPENMP)
|
if (USE_OPENMP)
|
||||||
set(BLAS_SERVER blas_server_omp.c)
|
set(BLAS_SERVER blas_server_omp.c)
|
||||||
|
|
|
@ -21,8 +21,8 @@ function (build_core TARGET_CORE KDIR TSUFFIX KERNEL_DEFINITIONS)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (${ADD_COMMONOBJS})
|
if (${ADD_COMMONOBJS})
|
||||||
if (${ARCH} STREQUAL "x86")
|
if (X86)
|
||||||
if (NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
if (NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
GenerateNamedObjects("${KERNELDIR}/cpuid.S" "" "" false "" "" true)
|
GenerateNamedObjects("${KERNELDIR}/cpuid.S" "" "" false "" "" true)
|
||||||
else()
|
else()
|
||||||
GenerateNamedObjects("${KERNELDIR}/cpuid_win.c" "" "" false "" "" true)
|
GenerateNamedObjects("${KERNELDIR}/cpuid_win.c" "" "" false "" "" true)
|
||||||
|
@ -121,7 +121,7 @@ function (build_core TARGET_CORE KDIR TSUFFIX KERNEL_DEFINITIONS)
|
||||||
# Makefile.L3
|
# Makefile.L3
|
||||||
set(USE_TRMM false)
|
set(USE_TRMM false)
|
||||||
|
|
||||||
if (${ARCH} STREQUAL "arm" OR ${ARCH} STREQUAL "arm64" OR "${TARGET}" STREQUAL "LONGSOON3B" OR "${TARGET}" STREQUAL "GENERIC" OR "${CORE}" STREQUAL "generic" OR "${TARGET}" STREQUAL "HASWELL" OR "${CORE}" STREQUAL "haswell" OR "{CORE}" STREQUAL "zen")
|
if (ARM OR ARM64 OR "${TARGET}" STREQUAL "LONGSOON3B" OR "${TARGET}" STREQUAL "GENERIC" OR "${CORE}" STREQUAL "generic" OR "${TARGET}" STREQUAL "HASWELL" OR "${CORE}" STREQUAL "haswell" OR "{CORE}" STREQUAL "zen")
|
||||||
set(USE_TRMM true)
|
set(USE_TRMM true)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
@ -464,6 +464,30 @@ function (build_core TARGET_CORE KDIR TSUFFIX KERNEL_DEFINITIONS)
|
||||||
GenerateNamedObjects("${KERNELDIR}/${${float_char}GEADD_KERNEL}" "" "geadd_k" false "" "" false ${float_type})
|
GenerateNamedObjects("${KERNELDIR}/${${float_char}GEADD_KERNEL}" "" "geadd_k" false "" "" false ${float_type})
|
||||||
endforeach ()
|
endforeach ()
|
||||||
|
|
||||||
|
# Makefile.LA
|
||||||
|
if(NOT NO_LAPACK)
|
||||||
|
foreach (float_type ${FLOAT_TYPES})
|
||||||
|
if (NOT DEFINED ${float_char}NEG_TCOPY)
|
||||||
|
if (${float_char} STREQUAL "Z" OR ${float_char} STREQUAL "C" OR ${float_char} STREQUAL "X")
|
||||||
|
set(${float_char}NEG_TCOPY ../generic/zneg_tcopy.c)
|
||||||
|
else ()
|
||||||
|
set(${float_char}NEG_TCOPY ../generic/neg_tcopy.c)
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (NOT DEFINED ${float_char}LASWP_NCOPY)
|
||||||
|
if (${float_char} STREQUAL "Z" OR ${float_char} STREQUAL "C" OR ${float_char} STREQUAL "X")
|
||||||
|
set(${float_char}LASWP_NCOPY ../generic/zlaswp_ncopy.c)
|
||||||
|
else ()
|
||||||
|
set(${float_char}LASWP_NCOPY ../generic/laswp_ncopy.c)
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
string(SUBSTRING ${float_type} 0 1 float_char)
|
||||||
|
GenerateNamedObjects("${KERNELDIR}/${${float_char}NEG_TCOPY}_${${float_char}GEMM_UNROLL_M}" "" "neg_tcopy" false "" "" false ${float_type})
|
||||||
|
GenerateNamedObjects("${KERNELDIR}/${${float_char}LASWP_NCOPY}_${${float_char}GEMM_UNROLL_N}" "" "laswp_ncopy" false "" "" false ${float_type})
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
if (${DYNAMIC_ARCH})
|
if (${DYNAMIC_ARCH})
|
||||||
set(SETPARAM_TARGET_DIR ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY})
|
set(SETPARAM_TARGET_DIR ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY})
|
||||||
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/setparam-ref.c SETPARAM_REF_CONTENTS)
|
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/setparam-ref.c SETPARAM_REF_CONTENTS)
|
||||||
|
@ -484,9 +508,6 @@ function (build_core TARGET_CORE KDIR TSUFFIX KERNEL_DEFINITIONS)
|
||||||
file(REMOVE ${SETPARAM_TARGET_DIR}/kernel${TSUFFIX}.tmp)
|
file(REMOVE ${SETPARAM_TARGET_DIR}/kernel${TSUFFIX}.tmp)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# Makefile.LA
|
|
||||||
#DBLASOBJS += dneg_tcopy$(TSUFFIX).$(SUFFIX) dlaswp_ncopy$(TSUFFIX).$(SUFFIX)
|
|
||||||
|
|
||||||
add_library(kernel${TSUFFIX} OBJECT ${OPENBLAS_SRC})
|
add_library(kernel${TSUFFIX} OBJECT ${OPENBLAS_SRC})
|
||||||
set_target_properties(kernel${TSUFFIX} PROPERTIES COMPILE_FLAGS "${KERNEL_DEFINITIONS}")
|
set_target_properties(kernel${TSUFFIX} PROPERTIES COMPILE_FLAGS "${KERNEL_DEFINITIONS}")
|
||||||
get_target_property(KERNEL_INCLUDE_DIRECTORIES kernel${TSUFFIX} INCLUDE_DIRECTORIES)
|
get_target_property(KERNEL_INCLUDE_DIRECTORIES kernel${TSUFFIX} INCLUDE_DIRECTORIES)
|
||||||
|
|
|
@ -46,7 +46,7 @@ GenerateNamedObjects("${LAPACK_MANGLED_SOURCES}" "" "" false "" "" false 3)
|
||||||
GenerateNamedObjects("laswp/generic/laswp_k.c" "" "laswp_plus" false "" "" false 3)
|
GenerateNamedObjects("laswp/generic/laswp_k.c" "" "laswp_plus" false "" "" false 3)
|
||||||
GenerateNamedObjects("laswp/generic/laswp_k.c" "MINUS" "laswp_minus" false "" "" false 3)
|
GenerateNamedObjects("laswp/generic/laswp_k.c" "MINUS" "laswp_minus" false "" "" false 3)
|
||||||
|
|
||||||
if (SMP)
|
if (USE_THREAD)
|
||||||
|
|
||||||
if (USE_OPENMP)
|
if (USE_OPENMP)
|
||||||
set(GETRF_SRC getrf/getrf_parallel_omp.c)
|
set(GETRF_SRC getrf/getrf_parallel_omp.c)
|
||||||
|
|
|
@ -11,7 +11,7 @@ set(OpenBLAS_Tests
|
||||||
|
|
||||||
foreach(test_bin ${OpenBLAS_Tests})
|
foreach(test_bin ${OpenBLAS_Tests})
|
||||||
add_executable(${test_bin} ${test_bin}.f)
|
add_executable(${test_bin} ${test_bin}.f)
|
||||||
target_link_libraries(${test_bin} ${OpenBLAS_LIBNAME}_static)
|
target_link_libraries(${test_bin} ${OpenBLAS_LIBNAME})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
# $1 exec, $2 input, $3 output_result
|
# $1 exec, $2 input, $3 output_result
|
||||||
|
|
Loading…
Reference in New Issue