From 7022bc522e1409205a0051a8bc84579ba8eab7ff Mon Sep 17 00:00:00 2001 From: Andrea Iob Date: Fri, 23 May 2025 09:48:44 +0200 Subject: [PATCH 1/9] cmake: add PETSc imported targets --- CMakeLists.txt | 3 +- external/PETSc/cmake/FindPETSc.cmake | 56 ++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fd27e901f3..7f99da72cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -116,8 +116,7 @@ function(configureBitpitTargetDependencies TARGET_NAME DEPENDENCIES_SCOPE) 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) diff --git a/external/PETSc/cmake/FindPETSc.cmake b/external/PETSc/cmake/FindPETSc.cmake index 5b56b4b62a..3472317b6e 100644 --- a/external/PETSc/cmake/FindPETSc.cmake +++ b/external/PETSc/cmake/FindPETSc.cmake @@ -444,3 +444,59 @@ find_package_handle_standard_args (PETSc REQUIRED_VARS PETSC_INCLUDES PETSC_LIBRARIES PETSC_EXECUTABLE_RUNS VERSION_VAR PETSC_VERSION FAIL_MESSAGE "PETSc could not be found. Be sure to set PETSC_DIR and PETSC_ARCH.") + +#----------------------------------------------------------------------------- +# Create imported target +#----------------------------------------------------------------------------- +if (NOT TARGET PETSc::PETSc) + set(PETSC_LIBRARY_TARGETS "") + foreach(LIBRARY_PATH ${PETSC_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 "PETSc::${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" + ) + + set(TARGET_TYPE "STATIC") + set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}") + foreach(LIBRARY_DLL_SEARCH_PATH IN LISTS LIBRARY_DLL_SEARCH_PATHS) + set(CANDIDATE_LIBRARY_DLL_PATH "${LIBRARY_DLL_SEARCH_PATH}/${LIBRARY_BASENAME}.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 "${PETSC_INCLUDES}") + target_compile_definitions(${LIBRARY_TARGET} INTERFACE ${PETSC_DEFINITIONS}) + list(APPEND PETSC_LIBRARY_TARGETS ${LIBRARY_TARGET}) + endforeach() + + add_library(PETSc::PETSc INTERFACE IMPORTED) + set_target_properties(PETSc::PETSc PROPERTIES INTERFACE_LINK_LIBRARIES "${PETSC_LIBRARY_TARGETS}") +endif() From 49a7986008a55660208d017f614f70b891ea94c8 Mon Sep 17 00:00:00 2001 From: Andrea Iob Date: Mon, 26 May 2025 13:16:48 +0200 Subject: [PATCH 2/9] cmake: add METIS imported targets --- CMakeLists.txt | 3 +- external/METIS/cmake/FindMETIS.cmake | 56 ++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7f99da72cd..c71a570de3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -126,8 +126,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() diff --git a/external/METIS/cmake/FindMETIS.cmake b/external/METIS/cmake/FindMETIS.cmake index dfed58b08e..372590a9bb 100644 --- a/external/METIS/cmake/FindMETIS.cmake +++ b/external/METIS/cmake/FindMETIS.cmake @@ -332,3 +332,59 @@ find_package_handle_standard_args(METIS DEFAULT_MSG # # TODO: Add possibility to check for specific functions in the library # + +#----------------------------------------------------------------------------- +# Create imported target +#----------------------------------------------------------------------------- +if (NOT TARGET METIS::METIS) + set(METIS_LIBRARY_TARGETS "") + foreach(LIBRARY_PATH ${METIS_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 "METIS::${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" + ) + + set(TARGET_TYPE "STATIC") + set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}") + foreach(LIBRARY_DLL_SEARCH_PATH IN LISTS LIBRARY_DLL_SEARCH_PATHS) + set(CANDIDATE_LIBRARY_DLL_PATH "${LIBRARY_DLL_SEARCH_PATH}/${LIBRARY_BASENAME}.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 "${METIS_INCLUDE_DIRS}") + list(APPEND METIS_LIBRARY_TARGETS ${LIBRARY_TARGET}) + endforeach() + + add_library(METIS::METIS INTERFACE IMPORTED) + set_target_properties(METIS::METIS PROPERTIES INTERFACE_LINK_LIBRARIES "${METIS_LIBRARY_TARGETS}") +endif() From 53df09e5207526e9ca7508b8df35912ce0459b90 Mon Sep 17 00:00:00 2001 From: Andrea Iob Date: Mon, 26 May 2025 14:00:48 +0200 Subject: [PATCH 3/9] cmake: add LAPACKE imported targets --- CMakeLists.txt | 5 +- external/LAPACKE/cmake/FindLAPACKE.cmake | 73 ++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c71a570de3..8f3872e5c8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -108,11 +108,10 @@ function(configureBitpitTargetDependencies TARGET_NAME DEPENDENCIES_SCOPE) 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) diff --git a/external/LAPACKE/cmake/FindLAPACKE.cmake b/external/LAPACKE/cmake/FindLAPACKE.cmake index c86470b3c6..8fe0afc149 100644 --- a/external/LAPACKE/cmake/FindLAPACKE.cmake +++ b/external/LAPACKE/cmake/FindLAPACKE.cmake @@ -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() From 13767c8a7eb37e6ef8715166745db028c5a30167 Mon Sep 17 00:00:00 2001 From: Andrea Iob Date: Tue, 27 May 2025 14:01:57 +0200 Subject: [PATCH 4/9] cmake: cosmetic changes --- CMakeLists.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f3872e5c8..9a70286a62 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1026,31 +1026,26 @@ 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_SUPPORTS_WEXTRA) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wextra") endif() From d71de3e5600a49e89c314cc49a0ebc1d199ad40e Mon Sep 17 00:00:00 2001 From: Andrea Iob Date: Tue, 27 May 2025 14:06:53 +0200 Subject: [PATCH 5/9] cmake: check if C language is enabled before setting C compiler flags --- CMakeLists.txt | 71 +++++++++++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 27 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a70286a62..e2bd06909d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -940,9 +940,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) @@ -957,9 +959,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) @@ -1000,24 +1004,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") @@ -1040,23 +1051,27 @@ else() 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() + 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() - CHECK_C_COMPILER_FLAG("-Wextra" C_SUPPORTS_WEXTRA) - 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) @@ -1134,7 +1149,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 From 3d045cd84f367b633c55c19c1ed66877ec4ab312 Mon Sep 17 00:00:00 2001 From: Andrea Iob Date: Tue, 27 May 2025 14:07:16 +0200 Subject: [PATCH 6/9] cmake: add missing LAPACKE dependency to the LA module --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e2bd06909d..a0047e5ec9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -497,7 +497,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 "") From 7a27d1465b753ef5c850e771e81b6bd89bdf2cd3 Mon Sep 17 00:00:00 2001 From: Andrea Iob Date: Tue, 27 May 2025 14:07:40 +0200 Subject: [PATCH 7/9] cmake: use BLAS imported target --- CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a0047e5ec9..6b0e8b8f58 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,8 +90,7 @@ 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) From e209e36906cb59c7041889857ef6010dd6b37db6 Mon Sep 17 00:00:00 2001 From: Andrea Iob Date: Tue, 27 May 2025 14:07:46 +0200 Subject: [PATCH 8/9] cmake: use LAPACK imported target --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b0e8b8f58..5767199c5d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -102,7 +102,7 @@ function(configureBitpitTargetDependencies TARGET_NAME DEPENDENCIES_SCOPE) 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() From 177573f52944cc3553c6de8b94f67b5ba6ff6f12 Mon Sep 17 00:00:00 2001 From: Andrea Iob Date: Tue, 27 May 2025 08:50:26 +0200 Subject: [PATCH 9/9] cmake: add CBLAS imported targets --- CMakeLists.txt | 5 +- external/CBLAS/cmake/FindCBLAS.cmake | 73 ++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5767199c5d..03382ab787 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,11 +94,10 @@ function(configureBitpitTargetDependencies TARGET_NAME DEPENDENCIES_SCOPE) 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) diff --git a/external/CBLAS/cmake/FindCBLAS.cmake b/external/CBLAS/cmake/FindCBLAS.cmake index eb3f47db00..82073a99bb 100644 --- a/external/CBLAS/cmake/FindCBLAS.cmake +++ b/external/CBLAS/cmake/FindCBLAS.cmake @@ -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()