From 9797403e8162263d8bc2501200d2af9bdd7a487c Mon Sep 17 00:00:00 2001 From: boeschf <48126478+boeschf@users.noreply.github.com> Date: Tue, 22 Nov 2022 14:13:25 +0100 Subject: [PATCH] simplify make catalogue (#2042) - unit tests and some examples build their own mechanism catalogue - repeated logic for detecting GPUs, passing compile time flags - leverage the cmake variables and targets which are already there since these catalogues are internal to arbor - build a static library with mechanisms, which links to arbor-private-deps --- example/ornstein_uhlenbeck/CMakeLists.txt | 16 ++------ mechanisms/BuildModules.cmake | 16 ++++++++ test/unit/CMakeLists.txt | 45 +++-------------------- 3 files changed, 26 insertions(+), 51 deletions(-) diff --git a/example/ornstein_uhlenbeck/CMakeLists.txt b/example/ornstein_uhlenbeck/CMakeLists.txt index 70981afa..e6ed7a83 100644 --- a/example/ornstein_uhlenbeck/CMakeLists.txt +++ b/example/ornstein_uhlenbeck/CMakeLists.txt @@ -1,20 +1,12 @@ include(${PROJECT_SOURCE_DIR}/mechanisms/BuildModules.cmake) -make_catalogue( +make_catalogue_lib( NAME ornstein_uhlenbeck MOD ornstein_uhlenbeck - VERBOSE ${ARB_CAT_VERBOSE} - ADD_DEPS OFF) + VERBOSE ${ARB_CAT_VERBOSE}) -add_executable(ou EXCLUDE_FROM_ALL ou.cpp ${catalogue-ornstein_uhlenbeck-mechanisms}) -add_dependencies(ou catalogue-ornstein_uhlenbeck-target) - -if(ARB_WITH_CUDA_CLANG OR ARB_WITH_HIP_CLANG) - set_source_files_properties(${catalogue-ornstein_uhlenbeck-meachanisms} PROPERTIES LANGUAGE CXX) -endif() -target_include_directories(ou PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/generated/ornstein_uhlenbeck") - -target_link_libraries(ou PRIVATE arbor-private-deps) # compiler flags, GPU options etc +add_executable(ou EXCLUDE_FROM_ALL ou.cpp) +target_link_libraries(ou PRIVATE catalogue-ornstein_uhlenbeck) target_link_libraries(ou PRIVATE arbor arborio) if (ARB_USE_BUNDLED_FMT) target_include_directories(ou PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../ext/fmt/include") diff --git a/mechanisms/BuildModules.cmake b/mechanisms/BuildModules.cmake index 80385088..afaaae9d 100644 --- a/mechanisms/BuildModules.cmake +++ b/mechanisms/BuildModules.cmake @@ -114,3 +114,19 @@ function("make_catalogue_standalone") target_link_libraries(${MK_CAT_NAME}-catalogue PRIVATE arbor::arbor) endif() endfunction() + +function("make_catalogue_lib") + cmake_parse_arguments(MK_CAT "" "NAME;VERBOSE" "MOD;CXX" ${ARGN}) + set(MK_CAT_OUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated/${MK_CAT_NAME}") + make_catalogue( + NAME ${MK_CAT_NAME} + MOD ${MK_CAT_MOD} + VERBOSE ${MK_CAT_VERBOSE} + ADD_DEPS OFF) + if(ARB_WITH_CUDA_CLANG OR ARB_WITH_HIP_CLANG) + set_source_files_properties(${catalogue-${MK_CAT_NAME}-mechanisms} PROPERTIES LANGUAGE CXX) + endif() + add_library(catalogue-${MK_CAT_NAME} STATIC EXCLUDE_FROM_ALL ${catalogue-${MK_CAT_NAME}-mechanisms}) + target_link_libraries(catalogue-${MK_CAT_NAME} PRIVATE arbor arbor-private-deps) + target_include_directories(catalogue-${MK_CAT_NAME} INTERFACE ${MK_CAT_OUT_DIR}) +endfunction() diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt index f42737eb..360028f2 100644 --- a/test/unit/CMakeLists.txt +++ b/test/unit/CMakeLists.txt @@ -48,11 +48,10 @@ set(test_mechanisms include(${PROJECT_SOURCE_DIR}/mechanisms/BuildModules.cmake) -make_catalogue( +make_catalogue_lib( NAME testing MOD ${test_mechanisms} - VERBOSE ${ARB_CAT_VERBOSE} - ADD_DEPS OFF) + VERBOSE ${ARB_CAT_VERBOSE}) # Unit test sources @@ -177,14 +176,12 @@ endif() if(ARB_WITH_CUDA_CLANG OR ARB_WITH_HIP_CLANG) set_source_files_properties(${unit_sources} PROPERTIES LANGUAGE CXX) - set_source_files_properties(${test_mech_sources} PROPERTIES LANGUAGE CXX) endif() -add_executable(unit EXCLUDE_FROM_ALL ${unit_sources} ${catalogue-testing-mechanisms}) -add_dependencies(unit catalogue-testing-target) +add_executable(unit EXCLUDE_FROM_ALL ${unit_sources}) +target_link_libraries(unit PRIVATE catalogue-testing) add_dependencies(tests unit) - make_catalogue_standalone( NAME dummy SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/dummy" @@ -193,40 +190,10 @@ make_catalogue_standalone( CXX_FLAGS_TARGET ${ARB_CXX_FLAGS_TARGET_FULL} VERBOSE ON) -if(ARB_WITH_NVCC) - target_compile_options(dummy-catalogue PRIVATE -DARB_CUDA) -endif() - -if(ARB_WITH_CUDA_CLANG) - set(clang_options_ -DARB_CUDA -xcuda --cuda-gpu-arch=sm_60 --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}) - target_compile_options(unit PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${clang_options_}>) -endif() - -if(ARB_WITH_HIP_CLANG) - set(clang_options_ -DARB_HIP -xhip --amdgpu-target=gfx906 --amdgpu-target=gfx900) - target_compile_options(unit PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${clang_options_}>) -endif() +target_link_libraries(dummy-catalogue PRIVATE arbor-private-deps) add_dependencies(unit dummy-catalogue) -if(ARB_WITH_GPU) - target_compile_definitions(unit PRIVATE ARB_GPU_ENABLED) -endif() - -if(ARB_WITH_NVCC) - target_compile_options(unit PRIVATE -DARB_CUDA) -endif() - -if(ARB_WITH_CUDA_CLANG) - set(clang_options_ -DARB_CUDA -xcuda --cuda-gpu-arch=sm_60 --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}) - target_compile_options(unit PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${clang_options_}>) -endif() - -if(ARB_WITH_HIP_CLANG) - set(clang_options_ -DARB_HIP -xhip --amdgpu-target=gfx906 --amdgpu-target=gfx900) - target_compile_options(unit PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${clang_options_}>) -endif() - -target_compile_options(unit PRIVATE ${ARB_CXX_FLAGS_TARGET_FULL}) +target_link_libraries(unit PRIVATE arbor-private-deps) target_compile_definitions(unit PRIVATE "-DDATADIR=\"${CMAKE_CURRENT_SOURCE_DIR}/../swc\"") target_compile_definitions(unit PRIVATE "-DLIBDIR=\"${PROJECT_BINARY_DIR}/lib\"") target_include_directories(unit PRIVATE "${CMAKE_CURRENT_BINARY_DIR}") -- GitLab