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
122 changes: 62 additions & 60 deletions cmake/configure.cmake
Original file line number Diff line number Diff line change
@@ -1,89 +1,91 @@
if(MSVC)
option(gtest_force_shared_crt "" TRUE)
option(gtest_force_shared_crt "" TRUE)
endif(MSVC)

if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
endif(NOT CMAKE_BUILD_TYPE)

if (MSVC)
add_compile_options("/utf-8")
if(MSVC)
add_compile_options("/utf-8")
endif()

set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/arch" )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/lib" )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/bin" )
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/arch")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/bin")

set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/arch" )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/lib" )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/bin" )
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/arch")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/bin")

set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/arch" )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" )
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/arch")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")

set( CMAKE_CXX_STANDARD 23 )
set(CMAKE_CXX_STANDARD 23)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_COMPILE_WARNING_AS_ERROR ON)

if (USE_COVERAGE)
set(CMAKE_INSTALL_RPATH "${CMAKE_BINARY_DIR}/ppc_onetbb/install/lib")
if(USE_COVERAGE)
set(CMAKE_INSTALL_RPATH "${CMAKE_BINARY_DIR}/ppc_onetbb/install/lib")
else()
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
endif ()
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
endif()

set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH ON)
set(CMAKE_SKIP_BUILD_RPATH OFF)

if( UNIX )
set(COMMON_COMPILER_FLAGS
"${COMMON_COMPILER_FLAGS} \
-Wall -Wextra \
-Wno-unused-parameter \
-Wno-cast-function-type \
if(UNIX)
set(COMMON_COMPILER_FLAGS
"${COMMON_COMPILER_FLAGS} \
-Wall -Wextra \
-Wno-unused-parameter \
-Wno-cast-function-type \
-Wsign-compare")
if (NOT APPLE)
set(COMMON_COMPILER_FLAGS
"${COMMON_COMPILER_FLAGS} \
-Wpedantic \
-Wpointer-arith \
-Wcast-align \
-Wwrite-strings \
-Wswitch-enum \
-Wnull-dereference \
-Wswitch-enum \
-Wformat=2 \
-Wmissing-declarations \
if(NOT APPLE)
set(COMMON_COMPILER_FLAGS
"${COMMON_COMPILER_FLAGS} \
-Wpedantic \
-Wpointer-arith \
-Wcast-align \
-Wwrite-strings \
-Wswitch-enum \
-Wnull-dereference \
-Wswitch-enum \
-Wformat=2 \
-Wmissing-declarations \
-Wno-c11-extensions")
endif (NOT APPLE)
set(CMAKE_C_FLAGS
"${CMAKE_C_FLAGS} \
-Wold-style-definition \
endif(NOT APPLE)
set(CMAKE_C_FLAGS
"${CMAKE_C_FLAGS} \
-Wold-style-definition \
-Wmissing-prototypes")

if ("${ENABLE_ADDRESS_SANITIZER}" OR "${ENABLE_UB_SANITIZER}" OR "${ENABLE_LEAK_SANITIZER}")
set (COMMON_COMPILER_FLAGS "${COMMON_COMPILER_FLAGS} -Wno-cast-align")
endif()
if("${ENABLE_ADDRESS_SANITIZER}"
OR "${ENABLE_UB_SANITIZER}"
OR "${ENABLE_LEAK_SANITIZER}")
set(COMMON_COMPILER_FLAGS "${COMMON_COMPILER_FLAGS} -Wno-cast-align")
endif()

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_COMPILER_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_COMPILER_FLAGS}")
if (USE_COVERAGE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
endif(USE_COVERAGE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_COMPILER_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_COMPILER_FLAGS}")
if(USE_COVERAGE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
endif(USE_COVERAGE)
endif()

if( MSVC )
set(COMMON_FLAGS "/W4 /wd4267 /wd4244")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${COMMON_FLAGS}" )
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${COMMON_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_FLAGS}" )
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${COMMON_FLAGS}" )
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${COMMON_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_FLAGS}" )
endif( MSVC )
if(MSVC)
set(COMMON_FLAGS "/W4 /wd4267 /wd4244")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${COMMON_FLAGS}")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${COMMON_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_FLAGS}")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${COMMON_FLAGS}")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${COMMON_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_FLAGS}")
endif(MSVC)

find_package( Threads REQUIRED )
find_package(Threads REQUIRED)
150 changes: 71 additions & 79 deletions cmake/functions.cmake
Original file line number Diff line number Diff line change
@@ -1,105 +1,97 @@
# ——— Helper function to add & register tests —————————————————————————
function(ppc_add_test test_name test_src USE_FLAG)
if(${USE_FLAG})
add_executable(${test_name} "${PROJECT_SOURCE_DIR}/${test_src}")
enable_testing()
add_test(NAME ${test_name} COMMAND ${test_name})
install(TARGETS ${test_name} RUNTIME DESTINATION bin)
endif()
if(${USE_FLAG})
add_executable(${test_name} "${PROJECT_SOURCE_DIR}/${test_src}")
enable_testing()
add_test(NAME ${test_name} COMMAND ${test_name})
install(TARGETS ${test_name} RUNTIME DESTINATION bin)
endif()
endfunction()

# Function to configure tests
function(add_tests test_flag exec_target subdir)
if(${test_flag})
# Gather all source files under tests/<subdir>
file(GLOB_RECURSE src_files
"${TEST_DIR}/${subdir}/*.cpp"
"${TEST_DIR}/${subdir}/*.cxx"
"${TEST_DIR}/${subdir}/*.cc"
)
target_sources(${exec_target} PRIVATE ${src_files})
list(APPEND TEST_EXECUTABLES ${exec_target})
set(TEST_EXECUTABLES "${TEST_EXECUTABLES}" PARENT_SCOPE)
endif()
if(${test_flag})
# Gather all source files under tests/<subdir>
file(GLOB_RECURSE src_files "${TEST_DIR}/${subdir}/*.cpp"
"${TEST_DIR}/${subdir}/*.cxx" "${TEST_DIR}/${subdir}/*.cc")
target_sources(${exec_target} PRIVATE ${src_files})
list(APPEND TEST_EXECUTABLES ${exec_target})
set(TEST_EXECUTABLES
"${TEST_EXECUTABLES}"
PARENT_SCOPE)
endif()
endfunction()

# ============================================================================
# Function: setup_implementation
# - NAME: implementation sub‐directory name (e.g. “mpi”)
# - PROJ_NAME: project base name
# - BASE_DIR: root source directory
# - TESTS: list of test executables to link against
# Function: setup_implementation - NAME: implementation sub‐directory name
# (e.g. “mpi”) - PROJ_NAME: project base name - BASE_DIR: root source
# directory - TESTS: list of test executables to link against
# ============================================================================
function(setup_implementation)
# parse named args: NAME, PROJ_NAME, BASE_DIR; multi‐value: TESTS
cmake_parse_arguments(
SETUP
"" # no plain options
"NAME;PROJ_NAME;BASE_DIR"
"TESTS"
${ARGN}
)
# parse named args: NAME, PROJ_NAME, BASE_DIR; multi‐value: TESTS
cmake_parse_arguments(SETUP "" # no plain options
"NAME;PROJ_NAME;BASE_DIR" "TESTS" ${ARGN})

# skip if impl dir doesn't exist
set(IMP_DIR "${SETUP_BASE_DIR}/${SETUP_NAME}")
if(NOT EXISTS "${IMP_DIR}")
return()
endif()
message(STATUS " -- ${SETUP_NAME}")
# skip if impl dir doesn't exist
set(IMP_DIR "${SETUP_BASE_DIR}/${SETUP_NAME}")
if(NOT EXISTS "${IMP_DIR}")
return()
endif()
message(STATUS " -- ${SETUP_NAME}")

# collect sources
file(GLOB_RECURSE CPP_SOURCES "${IMP_DIR}/src/*.cpp")
file(GLOB_RECURSE ALL_SOURCES
"${IMP_DIR}/include/*.h"
"${IMP_DIR}/include/*.hpp"
"${IMP_DIR}/src/*.cpp"
)
# collect sources
file(GLOB_RECURSE CPP_SOURCES "${IMP_DIR}/src/*.cpp")
file(GLOB_RECURSE ALL_SOURCES "${IMP_DIR}/include/*.h"
"${IMP_DIR}/include/*.hpp" "${IMP_DIR}/src/*.cpp")

# create library (STATIC if .cpp exist, otherwise INTERFACE)
set(LIB_NAME "${SETUP_PROJ_NAME}_${SETUP_NAME}")
if(CPP_SOURCES)
add_library(${LIB_NAME} STATIC ${ALL_SOURCES})
else()
add_library(${LIB_NAME} INTERFACE ${ALL_SOURCES})
endif()
# create library (STATIC if .cpp exist, otherwise INTERFACE)
set(LIB_NAME "${SETUP_PROJ_NAME}_${SETUP_NAME}")
if(CPP_SOURCES)
add_library(${LIB_NAME} STATIC ${ALL_SOURCES})
else()
add_library(${LIB_NAME} INTERFACE ${ALL_SOURCES})
endif()

# link core module
target_link_libraries(${LIB_NAME} PUBLIC core_module_lib)
# link core module
target_link_libraries(${LIB_NAME} PUBLIC core_module_lib)

# and link into each enabled test executable
foreach(test_exec ${SETUP_TESTS})
target_link_libraries(${test_exec} PUBLIC ${LIB_NAME})
endforeach()
# and link into each enabled test executable
foreach(test_exec ${SETUP_TESTS})
target_link_libraries(${test_exec} PUBLIC ${LIB_NAME})
endforeach()
endfunction()

# Function to configure each subproject
function(ppc_configure_subproject SUBDIR)
# Module-specific compile-time definitions
add_compile_definitions(
PPC_SETTINGS_${SUBDIR}="${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIR}/settings.json"
PPC_ID_${SUBDIR}="${SUBDIR}"
)
# Module-specific compile-time definitions
add_compile_definitions(
PPC_SETTINGS_${SUBDIR}="${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIR}/settings.json"
PPC_ID_${SUBDIR}="${SUBDIR}")

# Switch project context to the subproject
project(${SUBDIR})
# Switch project context to the subproject
project(${SUBDIR})

# Directory with tests and list of test executables (populated by setup_implementation)
set(TEST_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIR}/tests")
set(TEST_EXECUTABLES "")
# Directory with tests and list of test executables (populated by
# setup_implementation)
set(TEST_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIR}/tests")
set(TEST_EXECUTABLES "")

# Register functional and performance test runners
add_tests(USE_FUNC_TESTS ${FUNC_TEST_EXEC} functional)
add_tests(USE_PERF_TESTS ${PERF_TEST_EXEC} performance)
# Register functional and performance test runners
add_tests(USE_FUNC_TESTS ${FUNC_TEST_EXEC} functional)
add_tests(USE_PERF_TESTS ${PERF_TEST_EXEC} performance)

message(STATUS "${SUBDIR}")
message(STATUS "${SUBDIR}")

# List of implementations to configure
foreach(IMPL IN LISTS IMPLEMENTATIONS)
setup_implementation(
NAME ${IMPL}
PROJ_NAME ${SUBDIR}
TESTS "${TEST_EXECUTABLES}"
BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIR}"
)
endforeach()
# List of implementations to configure
foreach(IMPL IN LISTS IMPLEMENTATIONS)
setup_implementation(
NAME
${IMPL}
PROJ_NAME
${SUBDIR}
TESTS
"${TEST_EXECUTABLES}"
BASE_DIR
"${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIR}")
endforeach()
endfunction()
45 changes: 24 additions & 21 deletions cmake/gtest.cmake
Original file line number Diff line number Diff line change
@@ -1,24 +1,27 @@
include_directories(${CMAKE_SOURCE_DIR}/3rdparty/googletest/googletest/include)
include(ExternalProject)

ExternalProject_Add(ppc_googletest
SOURCE_DIR "${CMAKE_SOURCE_DIR}/3rdparty/googletest"
PREFIX "${CMAKE_CURRENT_BINARY_DIR}/ppc_googletest"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/ppc_googletest/build"
INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/ppc_googletest/install"

CMAKE_ARGS
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER}
-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}
-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
-DCMAKE_CXX_STANDARD_REQUIRED=ON
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DCMAKE_C_FLAGS=-w
-DCMAKE_CXX_FLAGS=-w
$<$<BOOL:MSVC>:-Dgtest_force_shared_crt=ON>

BUILD_COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_CURRENT_BINARY_DIR}/ppc_googletest/build" --config ${CMAKE_BUILD_TYPE} --parallel
INSTALL_COMMAND "${CMAKE_COMMAND}" --install "${CMAKE_CURRENT_BINARY_DIR}/ppc_googletest/build" --prefix "${CMAKE_CURRENT_BINARY_DIR}/ppc_googletest/install"
)
ExternalProject_Add(
ppc_googletest
SOURCE_DIR "${CMAKE_SOURCE_DIR}/3rdparty/googletest"
PREFIX "${CMAKE_CURRENT_BINARY_DIR}/ppc_googletest"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/ppc_googletest/build"
INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/ppc_googletest/install"
CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER}
-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}
-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
-DCMAKE_CXX_STANDARD_REQUIRED=ON
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DCMAKE_C_FLAGS=-w
-DCMAKE_CXX_FLAGS=-w
$<$<BOOL:MSVC>:-Dgtest_force_shared_crt=ON>
BUILD_COMMAND
"${CMAKE_COMMAND}" --build
"${CMAKE_CURRENT_BINARY_DIR}/ppc_googletest/build" --config
${CMAKE_BUILD_TYPE} --parallel
INSTALL_COMMAND
"${CMAKE_COMMAND}" --install
"${CMAKE_CURRENT_BINARY_DIR}/ppc_googletest/build" --prefix
"${CMAKE_CURRENT_BINARY_DIR}/ppc_googletest/install")
Loading
Loading