forked from celeritas-project/celeritas
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
133 lines (121 loc) · 3.82 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#----------------------------------*-CMake-*----------------------------------#
# Copyright 2023-2024 UT-Battelle, LLC, and other Celeritas developers.
# See the top-level COPYRIGHT file for details.
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
#-----------------------------------------------------------------------------#
set(SOURCES
celer-sim.cc
Runner.cc
RunnerOutput.cc
Transporter.cc
)
set(LIBRARIES
Celeritas::celeritas
Celeritas::DeviceToolkit
)
if(CELERITAS_USE_JSON)
list(APPEND SOURCES
RunnerInputIO.json.cc
)
list(APPEND LIBRARIES
nlohmann_json::nlohmann_json
)
endif()
if(CELERITAS_USE_CUDA AND CELERITAS_CORE_GEO STREQUAL "VecGeom")
list(APPEND LIBRARIES VecGeom::vecgeom)
endif()
if(CELERITAS_USE_OpenMP)
list(APPEND LIBRARIES OpenMP::OpenMP_CXX)
endif()
if(CELERITAS_USE_ROOT)
list(APPEND SOURCES RootOutput.cc)
list(APPEND LIBRARIES ROOT::Core ROOT::Tree)
endif()
# Add the executable
celeritas_add_executable(celer-sim ${SOURCES})
celeritas_target_link_libraries(celer-sim ${LIBRARIES})
#-----------------------------------------------------------------------------#
# TESTS
#-----------------------------------------------------------------------------#
if(NOT BUILD_TESTING)
return()
endif()
set(_driver "${CMAKE_CURRENT_SOURCE_DIR}/simple-driver.py")
set(_gdml_inp "${CELER_APP_DATA_DIR}/simple-cms.gdml")
set(_hepmc3_inp "${CELER_APP_DATA_DIR}/gamma-3evt-15prim.hepmc3")
set(_mctruth_out "")
set(_geant_exporter_env "CELER_EXPORT_GEANT_EXE=")
if(CELERITAS_USE_ROOT)
set(_geant_exporter_env
"CELER_EXPORT_GEANT_EXE=$<TARGET_FILE:celer-export-geant>")
endif()
set(_env
"CELERITAS_DEMO_EXE=$<TARGET_FILE:celer-sim>"
"${_geant_exporter_env}"
"CELER_DISABLE_PARALLEL=1"
"CELER_CORE_GEO=${CELERITAS_CORE_GEO}"
)
if(CELERITAS_USE_Geant4 AND CELERITAS_USE_HepMC3 AND CELERITAS_USE_Python
AND (NOT CELERITAS_CORE_GEO STREQUAL "Geant4")
AND (VecGeom_GDML_FOUND OR NOT (CELERITAS_CORE_GEO STREQUAL "VecGeom")))
set(_needs_deps)
else()
set(_needs_deps DISABLED true)
endif()
if(CELER_DISABLE_DEVICE)
set(_needs_device DISABLED true)
else()
set(_needs_device)
endif()
if(CELERITAS_REAL_TYPE STREQUAL "float")
# FIXME: propagation fails in single precision
set(_needs_deps DISABLED true)
endif()
add_test(NAME "app/celer-sim:gpu"
COMMAND "${CELER_PYTHON}"
"${_driver}" "${_gdml_inp}" "${_hepmc3_inp}" "${_mctruth_out}"
)
set_tests_properties("app/celer-sim:gpu" PROPERTIES
ENVIRONMENT "${_env};${CELER_G4ENV}"
RESOURCE_LOCK gpu
REQUIRED_FILES "${_driver};${_gdml_inp};${_hepmc3_inp}"
LABELS "app;nomemcheck;gpu"
${_needs_deps}
${_needs_device}
${CELER_NEEDS_PYTHON}
)
# Enable ROOT output for the celer-sim-cpu test when ROOT is available
if(CELERITAS_USE_ROOT)
set(_mctruth_out "${CMAKE_CURRENT_BINARY_DIR}/mctruth_output.root")
endif()
set(CELER_GEO ${CELERITAS_CORE_GEO})
if(CELERITAS_CORE_GEO STREQUAL "ORANGE" AND NOT CELERITAS_USE_Geant4)
# Signal to the app that we have to use the JSON input
set(CELER_GEO "${CELER_CORE_GEO}-JSON")
endif()
add_test(NAME "app/celer-sim:cpu"
COMMAND "${CELER_PYTHON}"
"${_driver}" "${_gdml_inp}" "${_hepmc3_inp}" "${_mctruth_out}"
)
set(_env
"CELERITAS_DEMO_EXE=$<TARGET_FILE:celer-sim>"
"${_geant_exporter_env}"
"CELER_LOG=debug"
"CELER_LOG_LOCAL=debug"
"CELER_DISABLE_DEVICE=1"
"CELER_DISABLE_PARALLEL=1"
"CELER_CORE_GEO=${CELERITAS_CORE_GEO}"
)
if(CELERITAS_USE_OpenMP AND CELERITAS_USE_ROOT)
# TODO: ROOT writer is not currently thread safe
set(CELER_OMP_ENV "OMP_NUM_THREADS=1")
set(CELER_PROCESSORS)
endif()
set_tests_properties("app/celer-sim:cpu" PROPERTIES
ENVIRONMENT "${_env};${CELER_G4ENV};${CELER_OMP_ENV}"
REQUIRED_FILES "${_driver};${_gdml_inp};${_hepmc3_inp}"
LABELS "app;nomemcheck"
${CELER_PROCESSORS}
${_needs_deps}
)
#-----------------------------------------------------------------------------#