Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 53 additions & 46 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -90,34 +90,30 @@ function(configureBitpitTargetDependencies TARGET_NAME DEPENDENCIES_SCOPE)
endif()

if (BLAS_FOUND)
target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} ${BLAS_LIBRARIES})
target_include_directories(${TARGET_NAME} ${DEPENDENCIES_SCOPE} ${BLAS_INCLUDE_DIRS})
target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} BLAS::BLAS)
endif()

if (CBLAS_FOUND)
set(CBLAS_PRIVATE_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/external/CBLAS/include")
target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} CBLAS::CBLAS)

target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} ${CBLAS_LIBRARIES})
set(CBLAS_PRIVATE_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/external/CBLAS/include")
target_include_directories(${TARGET_NAME} PRIVATE ${CBLAS_PRIVATE_INCLUDE_DIR})
target_include_directories(${TARGET_NAME} ${DEPENDENCIES_SCOPE} ${CBLAS_INCLUDE_DIRS})
endif()

if (LAPACK_FOUND)
target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} ${LAPACK_LIBRARIES})
target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} LAPACK::LAPACK)
target_include_directories(${TARGET_NAME} ${DEPENDENCIES_SCOPE}${LAPACK_INCLUDE_DIRS})
endif()

if (LAPACKE_FOUND)
set(LAPACKE_PRIVATE_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/external/LAPACKE/include")
target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} LAPACKE::LAPACKE)

target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} ${LAPACKE_LIBRARIES})
set(LAPACKE_PRIVATE_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/external/LAPACKE/include")
target_include_directories(${TARGET_NAME} PRIVATE ${LAPACKE_PRIVATE_INCLUDE_DIR})
target_include_directories(${TARGET_NAME} ${DEPENDENCIES_SCOPE} ${LAPACKE_INCLUDE_DIRS})
endif()

if (PETSC_FOUND)
target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} ${PETSC_LIBRARIES})
target_include_directories(${TARGET_NAME} ${DEPENDENCIES_SCOPE} ${PETSC_INCLUDES})
target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} PETSc::PETSc)
endif()
unset(_PETSc_index)

Expand All @@ -127,8 +123,7 @@ function(configureBitpitTargetDependencies TARGET_NAME DEPENDENCIES_SCOPE)
endif()

if (METIS_FOUND)
target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} ${METIS_LIBRARIES})
target_include_directories(${TARGET_NAME} ${DEPENDENCIES_SCOPE} ${METIS_INCLUDE_DIRS})
target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} METIS::METIS)

target_compile_definitions(${BITPIT_LIBRARY} ${DEPENDENCIES_SCOPE} "BITPIT_ENABLE_METIS=1")
else()
Expand Down Expand Up @@ -500,7 +495,7 @@ set(OPERATORS_EXTERNAL_DEPS "")
set(CONTAINERS_EXTERNAL_DEPS "")
set(IO_EXTERNAL_DEPS "Boost")
set(COMMUNICATIONS_EXTERNAL_DEPS "MPI")
set(LA_EXTERNAL_DEPS "PETSc")
set(LA_EXTERNAL_DEPS "PETSc;LAPACKE")
set(SA_EXTERNAL_DEPS "")
set(CG_EXTERNAL_DEPS "")
set(PABLO_EXTERNAL_DEPS "")
Expand Down Expand Up @@ -943,9 +938,11 @@ SET(CMAKE_CXX_FLAGS_GNUPROFILING "-pg" CACHE STRING
"Flags used by the C++ compiler during GNU profiling builds." FORCE)
MARK_AS_ADVANCED(CMAKE_CXX_FLAGS_GNUPROFILING)

SET(CMAKE_C_FLAGS_GNUPROFILING "-pg" CACHE STRING
"Flags used by the C compiler during GNU profiling builds." FORCE)
MARK_AS_ADVANCED(CMAKE_C_FLAGS_GNUPROFILING)
if ("C" IN_LIST BITPIT_LANGUAGES)
SET(CMAKE_C_FLAGS_GNUPROFILING "-pg" CACHE STRING
"Flags used by the C compiler during GNU profiling builds." FORCE)
MARK_AS_ADVANCED(CMAKE_C_FLAGS_GNUPROFILING)
endif()

SET(CMAKE_EXE_LINKER_FLAGS_GNUPROFILING "-pg" CACHE STRING
"Flags used for linking binaries during GNU profiling builds." FORCE)
Expand All @@ -960,9 +957,11 @@ SET(CMAKE_CXX_FLAGS_SCALASCAPROFILING "-O2" CACHE STRING
"Flags used by the C++ compiler during Scalasca profiling builds." FORCE)
MARK_AS_ADVANCED(CMAKE_CXX_FLAGS_SCALASCAPROFILING)

SET(CMAKE_C_FLAGS_SCALASCAPROFILING "-O2" CACHE STRING
"Flags used by the C compiler during Scalasca builds." FORCE)
MARK_AS_ADVANCED(CMAKE_C_FLAGS_SCALASCAPROFILING)
if ("C" IN_LIST BITPIT_LANGUAGES)
SET(CMAKE_C_FLAGS_SCALASCAPROFILING "-O2" CACHE STRING
"Flags used by the C compiler during Scalasca builds." FORCE)
MARK_AS_ADVANCED(CMAKE_C_FLAGS_SCALASCAPROFILING)
endif()

SET(CMAKE_EXE_LINKER_FLAGS_SCALASCAPROFILING "" CACHE STRING
"Flags used for linking binaries during Scalasca builds." FORCE)
Expand Down Expand Up @@ -1003,24 +1002,31 @@ endif()

# Standard build types
if (MSVC)
set(CMAKE_C_FLAGS_RELWITHDEBINFO "/O2 /Zi /Zo /Oy- /Ob0 /MDd")
set(CMAKE_C_FLAGS_DEBUG "/Od /Zi /Oy- /Ob0 /MDd")
set(CMAKE_C_FLAGS_RELEASE "/O2 /MD")
set(CMAKE_C_FLAGS_MINSIZEREL "/O1 /MD")
if ("C" IN_LIST BITPIT_LANGUAGES)
set(CMAKE_C_FLAGS_RELWITHDEBINFO "/O2 /Zi /Zo /Oy- /Ob0 /MDd")
set(CMAKE_C_FLAGS_DEBUG "/Od /Zi /Oy- /Ob0 /MDd")
set(CMAKE_C_FLAGS_RELEASE "/O2 /MD")
set(CMAKE_C_FLAGS_MINSIZEREL "/O1 /MD")
endif()

set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/O2 /Zi /Zo /Oy- /Ob0 /MDd")
set(CMAKE_CXX_FLAGS_DEBUG "/Od /Zi /Oy- /Ob0 /MDd")
set(CMAKE_CXX_FLAGS_RELEASE "/O2 /MD")
set(CMAKE_CXX_FLAGS_MINSIZEREL "/O1 /MD")

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 /wd4267 /wd4250 /Zc:preprocessor")
if ("C" IN_LIST BITPIT_LANGUAGES)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 /wd4267 /wd4250 /Zc:preprocessor")
endif()

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /wd4267 /wd4250 /Zc:preprocessor")
else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
set(CMAKE_C_FLAGS_RELWITHSANITIZE "-O2 -g -fno-omit-frame-pointer -fno-common ${C_SANITIZE_MODULE_FLAGS}")
set(CMAKE_C_FLAGS_DEBUG "-O0 -g")
set(CMAKE_C_FLAGS_RELEASE "-O2")
if ("C" IN_LIST BITPIT_LANGUAGES)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
set(CMAKE_C_FLAGS_RELWITHSANITIZE "-O2 -g -fno-omit-frame-pointer -fno-common ${C_SANITIZE_MODULE_FLAGS}")
set(CMAKE_C_FLAGS_DEBUG "-O0 -g")
set(CMAKE_C_FLAGS_RELEASE "-O2")
endif()

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmessage-length=0")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
Expand All @@ -1029,42 +1035,41 @@ else()
set(CMAKE_CXX_FLAGS_RELEASE "-O2")

CHECK_CXX_COMPILER_FLAG("-Wall" CXX_SUPPORTS_WALL)

if(CXX_SUPPORTS_WALL)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
endif()

CHECK_CXX_COMPILER_FLAG("-Wextra" CXX_SUPPORTS_WEXTRA)

if(CXX_SUPPORTS_WEXTRA)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra")
endif()

CHECK_CXX_COMPILER_FLAG("-Wsuggest-override" CXX_SUPPORTS_WSUGGEST_OVERRIDE)

if(CXX_SUPPORTS_WSUGGEST_OVERRIDE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsuggest-override")
endif()

CHECK_C_COMPILER_FLAG("-Wall" C_SUPPORTS_WALL)

if(C_SUPPORTS_WALL)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
endif()

CHECK_C_COMPILER_FLAG("-Wextra" C_SUPPORTS_WEXTRA)
if ("C" IN_LIST BITPIT_LANGUAGES)
CHECK_C_COMPILER_FLAG("-Wall" C_SUPPORTS_WALL)
if(C_SUPPORTS_WALL)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
endif()

if(C_SUPPORTS_WEXTRA)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wextra")
CHECK_C_COMPILER_FLAG("-Wextra" C_SUPPORTS_WEXTRA)
if(C_SUPPORTS_WEXTRA)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wextra")
endif()
endif()

set(CMAKE_EXE_LINKER_FLAGS_RELWITHSANITIZE "-fno-omit-frame-pointer -fno-common ${CXX_SANITIZE_MODULE_FLAGS}")
endif()

# Coverage build type
SET(CMAKE_C_FLAGS_COVERAGE "-g -O0 -fprofile-arcs -ftest-coverage" CACHE STRING
"Flags used by the C compiler during coverage builds." FORCE)
MARK_AS_ADVANCED(CMAKE_C_FLAGS_COVERAGE)
if ("C" IN_LIST BITPIT_LANGUAGES)
SET(CMAKE_C_FLAGS_COVERAGE "-g -O0 -fprofile-arcs -ftest-coverage" CACHE STRING
"Flags used by the C compiler during coverage builds." FORCE)
MARK_AS_ADVANCED(CMAKE_C_FLAGS_COVERAGE)
endif()

SET(CMAKE_CXX_FLAGS_COVERAGE "-g -O0 -fprofile-arcs -ftest-coverage" CACHE STRING
"Flags used by the C++ compiler during coverage builds." FORCE)
Expand Down Expand Up @@ -1142,7 +1147,9 @@ scalasca ${C_FLAGS_INSTRUMENT} \"$@\"
file(REMOVE scalasca_c_compiler)

set(CMAKE_CXX_COMPILER "${PROJECT_BINARY_DIR}/scalasca_cxx_compiler")
set(CMAKE_C_COMPILER "${PROJECT_BINARY_DIR}/scalasca_c_compiler")
if ("C" IN_LIST BITPIT_LANGUAGES)
set(CMAKE_C_COMPILER "${PROJECT_BINARY_DIR}/scalasca_c_compiler")
endif()
endif ()

# Check the features supported by the compiler
Expand Down
73 changes: 73 additions & 0 deletions external/CBLAS/cmake/FindCBLAS.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -394,3 +394,76 @@ include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(CBLAS DEFAULT_MSG
CBLAS_LIBRARIES
CBLAS_WORKS)

#-----------------------------------------------------------------------------
# Create imported target
#-----------------------------------------------------------------------------
if (NOT TARGET CBLAS::CBLAS)
set(CBLAS_LIBRARY_TARGETS "")
foreach(LIBRARY_PATH ${CBLAS_LIBRARIES})
get_filename_component(LIBRARY_FILENAME "${LIBRARY_PATH}" NAME)
get_filename_component(LIBRARY_EXTENSION "${LIBRARY_PATH}" LAST_EXT)

string(REGEX REPLACE "\\.[^.]*$" "" LIBRARY_TARGET "${LIBRARY_FILENAME}")
string(REGEX REPLACE "^lib" "" LIBRARY_TARGET "${LIBRARY_TARGET}")
set(LIBRARY_TARGET "CBLAS::${LIBRARY_TARGET}_library")

if (LIBRARY_EXTENSION STREQUAL ".a")
set(TARGET_TYPE "STATIC")
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
elseif (LIBRARY_EXTENSION STREQUAL ".lib")
get_filename_component(LIBRARY_BASENAME "${LIBRARY_FILENAME}" NAME_WE)
get_filename_component(LIBRARY_DIRECTORY "${LIBRARY_PATH}" DIRECTORY)
set(LIBRARY_DLL_SEARCH_PATHS
"${LIBRARY_DIRECTORY}"
"${LIBRARY_DIRECTORY}/../bin"
"${LIBRARY_DIRECTORY}/../../redist/intel64"
"${LIBRARY_DIRECTORY}/../../../redist/intel64"
"${LIBRARY_DIRECTORY}/../../redist/intel64/compiler"
"${LIBRARY_DIRECTORY}/../../../redist/intel64/compiler"
"${LIBRARY_DIRECTORY}/../../redist/intel64_win/compiler"
"${LIBRARY_DIRECTORY}/../../../redist/intel64_win/compiler"

)

set(TARGET_TYPE "STATIC")
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
foreach(LIBRARY_DLL_SEARCH_PATH IN LISTS LIBRARY_DLL_SEARCH_PATHS)
string(REGEX REPLACE "_dll$" "" CANDIDATE_LIBRARY_DLL_PATH "${LIBRARY_BASENAME}")
set(CANDIDATE_LIBRARY_DLL_PATH "${LIBRARY_DLL_SEARCH_PATH}/${CANDIDATE_LIBRARY_DLL_PATH}.dll")
if(EXISTS "${CANDIDATE_LIBRARY_DLL_PATH}")
set(TARGET_TYPE "SHARED")
set(TARGET_IMPORTED_LOCATION "${CANDIDATE_LIBRARY_DLL_PATH}")
break()
endif()

string(REGEX REPLACE "_dll$" "" CANDIDATE_LIBRARY_DLL_PATH "${LIBRARY_BASENAME}")
set(CANDIDATE_LIBRARY_DLL_PATH "${LIBRARY_DLL_SEARCH_PATH}/${CANDIDATE_LIBRARY_DLL_PATH}.2.dll")
if(EXISTS "${CANDIDATE_LIBRARY_DLL_PATH}")
set(TARGET_TYPE "SHARED")
set(TARGET_IMPORTED_LOCATION "${CANDIDATE_LIBRARY_DLL_PATH}")
break()
endif()
endforeach()
elseif (LIBRARY_EXTENSION STREQUAL ".so")
set(TARGET_TYPE "SHARED")
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
elseif (LIBRARY_EXTENSION STREQUAL ".dll")
set(TARGET_TYPE "SHARED")
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
endif()

add_library(${LIBRARY_TARGET} ${TARGET_TYPE} IMPORTED)
set_target_properties(${LIBRARY_TARGET} PROPERTIES IMPORTED_LOCATION ${TARGET_IMPORTED_LOCATION})
if (WIN32 AND TARGET_TYPE STREQUAL "SHARED")
set_target_properties(${LIBRARY_TARGET} PROPERTIES IMPORTED_IMPLIB "${LIBRARY_PATH}")
endif()
set_target_properties(${LIBRARY_TARGET} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${CBLAS_INCLUDE_DIRS}")
set_target_properties(${LIBRARY_TARGET} PROPERTIES INTERFACE_LINK_OPTIONS "${CBLAS_LINKER_FLAGS}")

list(APPEND CBLAS_LIBRARY_TARGETS ${LIBRARY_TARGET})
endforeach()

add_library(CBLAS::CBLAS INTERFACE IMPORTED)
set_target_properties(CBLAS::CBLAS PROPERTIES INTERFACE_LINK_LIBRARIES "${CBLAS_LIBRARY_TARGETS}")
endif()
73 changes: 73 additions & 0 deletions external/LAPACKE/cmake/FindLAPACKE.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -424,3 +424,76 @@ include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LAPACKE DEFAULT_MSG
LAPACKE_LIBRARIES
LAPACKE_WORKS)

#-----------------------------------------------------------------------------
# Create imported target
#-----------------------------------------------------------------------------
if (NOT TARGET LAPACKE::LAPACKE)
set(LAPACKE_LIBRARY_TARGETS "")
foreach(LIBRARY_PATH ${LAPACKE_LIBRARIES})
get_filename_component(LIBRARY_FILENAME "${LIBRARY_PATH}" NAME)
get_filename_component(LIBRARY_EXTENSION "${LIBRARY_PATH}" LAST_EXT)

string(REGEX REPLACE "\\.[^.]*$" "" LIBRARY_TARGET "${LIBRARY_FILENAME}")
string(REGEX REPLACE "^lib" "" LIBRARY_TARGET "${LIBRARY_TARGET}")
set(LIBRARY_TARGET "LAPACKE::${LIBRARY_TARGET}_library")

if (LIBRARY_EXTENSION STREQUAL ".a")
set(TARGET_TYPE "STATIC")
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
elseif (LIBRARY_EXTENSION STREQUAL ".lib")
get_filename_component(LIBRARY_BASENAME "${LIBRARY_FILENAME}" NAME_WE)
get_filename_component(LIBRARY_DIRECTORY "${LIBRARY_PATH}" DIRECTORY)
set(LIBRARY_DLL_SEARCH_PATHS
"${LIBRARY_DIRECTORY}"
"${LIBRARY_DIRECTORY}/../bin"
"${LIBRARY_DIRECTORY}/../../bin"
"${LIBRARY_DIRECTORY}/../../redist/intel64"
"${LIBRARY_DIRECTORY}/../../../redist/intel64"
"${LIBRARY_DIRECTORY}/../../redist/intel64/compiler"
"${LIBRARY_DIRECTORY}/../../../redist/intel64/compiler"
"${LIBRARY_DIRECTORY}/../../redist/intel64_win/compiler"
"${LIBRARY_DIRECTORY}/../../../redist/intel64_win/compiler"
)

set(TARGET_TYPE "STATIC")
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
foreach(LIBRARY_DLL_SEARCH_PATH IN LISTS LIBRARY_DLL_SEARCH_PATHS)
string(REGEX REPLACE "_dll$" "" CANDIDATE_LIBRARY_DLL_PATH "${LIBRARY_BASENAME}")
set(CANDIDATE_LIBRARY_DLL_PATH "${LIBRARY_DLL_SEARCH_PATH}/${CANDIDATE_LIBRARY_DLL_PATH}.dll")
if(EXISTS "${CANDIDATE_LIBRARY_DLL_PATH}")
set(TARGET_TYPE "SHARED")
set(TARGET_IMPORTED_LOCATION "${CANDIDATE_LIBRARY_DLL_PATH}")
break()
endif()

string(REGEX REPLACE "_dll$" "" CANDIDATE_LIBRARY_DLL_PATH "${LIBRARY_BASENAME}")
set(CANDIDATE_LIBRARY_DLL_PATH "${LIBRARY_DLL_SEARCH_PATH}/${CANDIDATE_LIBRARY_DLL_PATH}.2.dll")
if(EXISTS "${CANDIDATE_LIBRARY_DLL_PATH}")
set(TARGET_TYPE "SHARED")
set(TARGET_IMPORTED_LOCATION "${CANDIDATE_LIBRARY_DLL_PATH}")
break()
endif()
endforeach()
elseif (LIBRARY_EXTENSION STREQUAL ".so")
set(TARGET_TYPE "SHARED")
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
elseif (LIBRARY_EXTENSION STREQUAL ".dll")
set(TARGET_TYPE "SHARED")
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
endif()

add_library(${LIBRARY_TARGET} ${TARGET_TYPE} IMPORTED)
set_target_properties(${LIBRARY_TARGET} PROPERTIES IMPORTED_LOCATION ${TARGET_IMPORTED_LOCATION})
if (WIN32 AND TARGET_TYPE STREQUAL "SHARED")
set_target_properties(${LIBRARY_TARGET} PROPERTIES IMPORTED_IMPLIB "${LIBRARY_PATH}")
endif()
set_target_properties(${LIBRARY_TARGET} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LAPACKE_INCLUDE_DIRS}")
set_target_properties(${LIBRARY_TARGET} PROPERTIES INTERFACE_LINK_OPTIONS "${LAPACKE_LINKER_FLAGS}")

list(APPEND LAPACKE_LIBRARY_TARGETS ${LIBRARY_TARGET})
endforeach()

add_library(LAPACKE::LAPACKE INTERFACE IMPORTED)
set_target_properties(LAPACKE::LAPACKE PROPERTIES INTERFACE_LINK_LIBRARIES "${LAPACKE_LIBRARY_TARGETS}")
endif()
Loading