2023-12-08 02:10:19 -08:00
|
|
|
cmake_minimum_required(VERSION 3.12)
|
|
|
|
|
|
|
|
|
|
project(BLAS C)
|
|
|
|
|
|
2023-12-09 03:03:42 -08:00
|
|
|
set(BLAS_MAJOR_VERSION 0)
|
|
|
|
|
set(BLAS_MINOR_VERSION 1)
|
2023-12-08 02:10:19 -08:00
|
|
|
set(BLAS_PATCH_VERSION 0)
|
|
|
|
|
set(
|
|
|
|
|
BLAS_VERSION
|
|
|
|
|
${BLAS_MAJOR_VERSION}.${BLAS_MINOR_VERSION}.${BLAS_PATCH_VERSION}
|
|
|
|
|
)
|
|
|
|
|
|
2023-12-09 03:03:42 -08:00
|
|
|
set(CMAKE_C_STANDARD 99)
|
|
|
|
|
set(CMAKE_C_STANDARD_REQUIRED True)
|
|
|
|
|
|
2023-12-08 02:10:19 -08:00
|
|
|
# Add the CMake directory for custom CMake modules
|
|
|
|
|
set(CMAKE_MODULE_PATH "${BLAS_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
|
|
|
|
|
|
|
|
|
|
# Export all symbols on Windows when building shared libraries
|
|
|
|
|
SET(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
|
|
|
|
|
|
|
|
|
|
# Set a default build type if none was specified
|
|
|
|
|
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
|
|
|
message(STATUS "Setting build type to 'Release' as none was specified.")
|
|
|
|
|
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
|
|
|
|
|
# Set the possible values of build type for cmake-gui
|
|
|
|
|
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo" "Coverage")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
# Coverage
|
|
|
|
|
set(_is_coverage_build 0)
|
|
|
|
|
set(_msg "Checking if build type is 'Coverage'")
|
|
|
|
|
message(STATUS "${_msg}")
|
|
|
|
|
if(NOT CMAKE_CONFIGURATION_TYPES)
|
|
|
|
|
string(TOLOWER ${CMAKE_BUILD_TYPE} _build_type_lc)
|
|
|
|
|
if(${_build_type_lc} STREQUAL "coverage")
|
|
|
|
|
set(_is_coverage_build 1)
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
message(STATUS "${_msg}: ${_is_coverage_build}")
|
|
|
|
|
|
|
|
|
|
if(_is_coverage_build)
|
|
|
|
|
message(STATUS "Adding coverage")
|
|
|
|
|
find_package(codecov)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
# By default static library
|
|
|
|
|
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
|
|
|
|
|
|
|
|
|
|
# By default build index32 library
|
|
|
|
|
option(BUILD_INDEX64 "Build Index-64 API libraries" OFF)
|
|
|
|
|
if(BUILD_INDEX64)
|
|
|
|
|
set(BLASLIB "blas64")
|
|
|
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWeirdNEC -DLAPACK_ILP64 -DHAVE_LAPACK_CONFIG_H")
|
|
|
|
|
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fdefault-integer-8")
|
|
|
|
|
else()
|
|
|
|
|
set(BLASLIB "blas")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
# --------------------------------------------------
|
|
|
|
|
set(BLAS_INSTALL_EXPORT_NAME ${BLASLIB}-targets)
|
|
|
|
|
|
|
|
|
|
macro(blas_install_library lib)
|
|
|
|
|
install(TARGETS ${lib}
|
|
|
|
|
EXPORT ${BLAS_INSTALL_EXPORT_NAME}
|
|
|
|
|
ARCHIVE DESTINATION lib COMPONENT Development
|
|
|
|
|
LIBRARY DESTINATION lib COMPONENT RuntimeLibraries
|
|
|
|
|
RUNTIME DESTINATION lib COMPONENT RuntimeLibraries
|
|
|
|
|
)
|
|
|
|
|
endmacro()
|
|
|
|
|
|
|
|
|
|
set(PKG_CONFIG_DIR lib/pkgconfig)
|
|
|
|
|
|
|
|
|
|
# --------------------------------------------------
|
|
|
|
|
# Precision to build
|
|
|
|
|
# By default all precisions are generated
|
|
|
|
|
option(BUILD_SINGLE "Build single precision real" ON)
|
|
|
|
|
option(BUILD_DOUBLE "Build double precision real" ON)
|
|
|
|
|
option(BUILD_COMPLEX "Build single precision complex" ON)
|
|
|
|
|
option(BUILD_COMPLEX16 "Build double precision complex" ON)
|
|
|
|
|
message(STATUS "Build single precision real: ${BUILD_SINGLE}")
|
|
|
|
|
message(STATUS "Build double precision real: ${BUILD_DOUBLE}")
|
|
|
|
|
message(STATUS "Build single precision complex: ${BUILD_COMPLEX}")
|
|
|
|
|
message(STATUS "Build double precision complex: ${BUILD_COMPLEX16}")
|
|
|
|
|
|
2023-12-09 03:03:42 -08:00
|
|
|
include_directories(src/)
|
|
|
|
|
|
2023-12-08 02:10:19 -08:00
|
|
|
if(NOT (BUILD_SINGLE OR BUILD_DOUBLE OR BUILD_COMPLEX OR BUILD_COMPLEX16))
|
|
|
|
|
message(FATAL_ERROR "Nothing to build, no precision selected.
|
|
|
|
|
Please enable at least one of these:
|
|
|
|
|
BUILD_SINGLE, BUILD_DOUBLE, BUILD_COMPLEX, BUILD_COMPLEX16.")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
|
|
|
|
|
|
# Updated OSX RPATH settings
|
|
|
|
|
# In response to CMake 3.0 generating warnings regarding policy CMP0042,
|
|
|
|
|
# the OSX RPATH settings have been updated per recommendations found
|
|
|
|
|
# in the CMake Wiki:
|
|
|
|
|
# http://www.cmake.org/Wiki/CMake_RPATH_handling#Mac_OS_X_and_the_RPATH
|
|
|
|
|
set(CMAKE_MACOSX_RPATH ON)
|
|
|
|
|
set(CMAKE_SKIP_BUILD_RPATH FALSE)
|
|
|
|
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
|
|
|
|
|
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES ${CMAKE_INSTALL_FULL_LIBDIR} isSystemDir)
|
|
|
|
|
if("${isSystemDir}" STREQUAL "-1")
|
|
|
|
|
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR})
|
|
|
|
|
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
include(PreventInSourceBuilds)
|
|
|
|
|
include(PreventInBuildInstalls)
|
|
|
|
|
|
|
|
|
|
# --------------------------------------------------
|
|
|
|
|
# Check for any necessary platform specific compiler flags
|
|
|
|
|
include(CheckLAPACKCompilerFlags)
|
|
|
|
|
CheckLAPACKCompilerFlags("-recursive" _recursiveFlag)
|
|
|
|
|
CheckLAPACKCompilerFlags("-frecursive" _frecursiveFlag)
|
|
|
|
|
CheckLAPACKCompilerFlags("-Mrecursive" _MrecursiveFlag)
|
|
|
|
|
|
|
|
|
|
# Add recursive flag
|
|
|
|
|
if(_recursiveFlag)
|
|
|
|
|
string(REGEX MATCH "-recursive" output_test <string> "${CMAKE_Fortran_FLAGS}")
|
|
|
|
|
if(NOT output_test)
|
|
|
|
|
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -recursive"
|
|
|
|
|
CACHE STRING "Recursive flag must be set" FORCE)
|
|
|
|
|
endif()
|
|
|
|
|
elseif(_frecursiveFlag)
|
|
|
|
|
string(REGEX MATCH "-frecursive" output_test <string> "${CMAKE_Fortran_FLAGS}")
|
|
|
|
|
if(NOT output_test)
|
|
|
|
|
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -frecursive"
|
|
|
|
|
CACHE STRING "Recursive flag must be set" FORCE)
|
|
|
|
|
endif()
|
|
|
|
|
elseif(_MrecursiveFlag)
|
|
|
|
|
string(REGEX MATCH "-Mrecursive" output_test <string> "${CMAKE_Fortran_FLAGS}")
|
|
|
|
|
if(NOT output_test)
|
|
|
|
|
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mrecursive"
|
|
|
|
|
CACHE STRING "Recursive flag must be set" FORCE)
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
set(BLAS_LIBRARIES ${BLASLIB})
|
|
|
|
|
|
|
|
|
|
add_subdirectory(src)
|
|
|
|
|
|
|
|
|
|
# --------------------------------------------------
|
|
|
|
|
# Testing
|
|
|
|
|
option(BUILD_TESTING "Build tests" ${_is_coverage_build})
|
|
|
|
|
include(CTest)
|
|
|
|
|
message(STATUS "Build tests: ${BUILD_TESTING}")
|
|
|
|
|
|
|
|
|
|
if(BUILD_TESTING)
|
|
|
|
|
add_subdirectory(TESTING)
|
|
|
|
|
endif()
|
|
|
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/blas.pc.in ${CMAKE_CURRENT_BINARY_DIR}/${BLASLIB}.pc @ONLY)
|
|
|
|
|
install(FILES
|
|
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/${BLASLIB}.pc
|
|
|
|
|
DESTINATION ${PKG_CONFIG_DIR}
|
|
|
|
|
COMPONENT Development
|
|
|
|
|
)
|