Import Geant4 11.3.0 source tree

This commit is contained in:
Gabriele Cosmo
2024-12-06 11:11:40 +01:00
parent e58e650b32
commit 32390e802b
1984 changed files with 98713 additions and 83996 deletions
+8 -1
View File
@@ -271,7 +271,14 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|.*Clang")
# Add flags - longer term, make compile/link options
# frame pointer flag to get more meaningful stack traces
# May need others for better/reliable output
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -fsanitize=${GEANT4_BUILD_SANITIZER}")
set(__geant4_sanitizer_flags "-fno-omit-frame-pointer -fsanitize=${GEANT4_BUILD_SANITIZER}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${__geant4_sanitizer_flags}")
# Xcode does not forward CXX_FLAGS to the linker, and sanitizer link flags need propagating to final
# link steps
if(CMAKE_GENERATOR MATCHES Xcode)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${__geant4_sanitizer_flags}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${__geant4_sanitizer_flags}")
endif()
geant4_add_feature(GEANT4_BUILD_SANITIZER "Compiling/linking with sanitizer '${GEANT4_BUILD_SANITIZER}'")
endif()
+9 -9
View File
@@ -14,10 +14,15 @@ if(GEANT4_ENABLE_TESTING)
# - Core CTest
enable_testing()
include(CTest)
include(G4TestAPI)
# - Geant4_DIR is needed to locate GeantConfig.cmake file required
# by tests and examples
set(Geant4_DIR ${PROJECT_BINARY_DIR} CACHE PATH "Current build directory")
# for tests and examples that are built as direct subprojects
# (as opposed to "build-and-test" type situations)
set(Geant4_DIR ${PROJECT_BINARY_DIR})
# - Base URL for test reference files
set(GEANT4_TEST_REFERENCES_URL "http://cern.ch/geant4-data/stt/references/")
# - Add datasets to testing environment
geant4_get_datasetnames(_dslist)
@@ -27,18 +32,13 @@ if(GEANT4_ENABLE_TESTING)
list(APPEND GEANT4_TEST_ENVIRONMENT ${_dsenvvar}=${_dspath})
endforeach()
# - Add base URL for test reference files
set(GEANT4_TEST_REFERENCES_URL "http://cern.ch/geant4-data/stt/references/" CACHE
STRING "base URL for test reference files")
mark_as_advanced(GEANT4_TEST_REFERENCES_URL)
# - Add TOOLS_FONT_PATH if freetype enabled
# - Add TOOLS_FONT_PATH to testing environment if required
if(GEANT4_USE_FREETYPE)
list(APPEND GEANT4_TEST_ENVIRONMENT TOOLS_FONT_PATH=${PROJECT_SOURCE_DIR}/source/externals/g4tools/fonts)
endif()
# - Configure 'G4RunManagerFactory::CreateRunManager(G4RunManagerType::Default)'
# to use TBB
# to use TBB if required
if(GEANT4_BUILD_MULTITHREADED AND GEANT4_USE_TBB)
list(APPEND GEANT4_TEST_ENVIRONMENT G4RUN_MANAGER_TYPE=TBB)
endif()
+3 -8
View File
@@ -206,12 +206,6 @@ configure_file(
COPYONLY
)
configure_file(
${PROJECT_SOURCE_DIR}/cmake/Templates/UseGeant4_internal.cmake
${PROJECT_BINARY_DIR}/UseGeant4_internal.cmake
COPYONLY
)
#-----------------------------------------------------------------------
# - Generate Install Tree Configuration Files
#-----------------------------------------------------------------------
@@ -272,8 +266,9 @@ install(FILES
COMPONENT Development
)
# Install the package settings file if required (always for now)
option(GEANT4_INSTALL_PACKAGE_CACHE "Install file recording build-time locations of required packages" ON)
# Install the package settings file if required
# Default to OFF because it's a hand-holding solution that hinders more than helps.
option(GEANT4_INSTALL_PACKAGE_CACHE "Install file recording build-time locations of required packages" OFF)
mark_as_advanced(GEANT4_INSTALL_PACKAGE_CACHE)
if(GEANT4_INSTALL_PACKAGE_CACHE)
install(FILES ${PROJECT_BINARY_DIR}/Geant4PackageCache.cmake
+20 -10
View File
@@ -18,31 +18,31 @@ geant4_add_dataset(
# - Low energy electromagnetics
geant4_add_dataset(
NAME G4EMLOW
VERSION 8.6
VERSION 8.6.1
FILENAME G4EMLOW
EXTENSION tar.gz
ENVVAR G4LEDATA
MD5SUM 080576674061a0649629649879655bb9
MD5SUM 9db67a37acc3eae9b0ffdace41a23b74
)
# - Photon evaporation
geant4_add_dataset(
NAME PhotonEvaporation
VERSION 5.7
VERSION 6.1
FILENAME G4PhotonEvaporation
EXTENSION tar.gz
ENVVAR G4LEVELGAMMADATA
MD5SUM 81ff27deb23af4aa225423e6b3a06b39
MD5SUM 92d68b937cdad0fd49892a66878863de
)
# - Radioisotopes
geant4_add_dataset(
NAME RadioactiveDecay
VERSION 5.6
VERSION 6.1.2
FILENAME G4RadioactiveDecay
EXTENSION tar.gz
ENVVAR G4RADIOACTIVEDATA
MD5SUM acc1dbeb87b6b708b2874ced729a3a8f
MD5SUM 20d494f73d4bddabd7fab5c06a58895c
)
# - Particle XS - replaces Neutron XS
@@ -109,11 +109,21 @@ geant4_add_dataset(
# - ENSDFSTATE
geant4_add_dataset(
NAME G4ENSDFSTATE
VERSION 2.3
VERSION 3.0
FILENAME G4ENSDFSTATE
EXTENSION tar.gz
ENVVAR G4ENSDFSTATEDATA
MD5SUM 6f18fce8f217e7aaeaa3711be9b2c7bf
MD5SUM c500728534ce3e9fb2fefa0112eb3a74
)
# - Channeling
geant4_add_dataset(
NAME G4CHANNELING
VERSION 1.0
FILENAME G4CHANNELING
EXTENSION tar.gz
ENVVAR G4CHANNELINGDATA
MD5SUM b2f692ec7109418c6354ea1ecbc62da7
)
# - TENDL
@@ -153,10 +163,10 @@ mark_as_advanced(GEANT4_INSTALL_DATASETS_URRPT)
if(GEANT4_INSTALL_DATASETS_URRPT)
geant4_add_dataset(
NAME G4URRPT
VERSION 1.0
VERSION 1.1
FILENAME G4URRPT
EXTENSION tar.gz
ENVVAR G4URRPTDATA
MD5SUM acc94698e4199455b4fac33c3384ccb4
MD5SUM ec9a2acb0745c8bfb6365ca3434bd3b8
)
endif()
+242
View File
@@ -0,0 +1,242 @@
#-----------------------------------------------------------------------
# Special internal functions for building tests.
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
# function geant4_add_test(<name> COMMAND cmd [arg1... ]
# [PRECMD cmd [arg1...]] [POSTCMD cmd [arg1...]]
# [OUTPUT outfile] [ERROR errfile]
# [WORKING_DIRECTORY directory]
# [ENVIRONMENT var1=val1 var2=val2 ...
# [DEPENDS test1 ...]
# [TIMEOUT seconds]
# [DEBUG]
# [SOURCE_DIR dir] [BINARY_DIR dir]
# [BUILD target] [PROJECT project]
# [PASSREGEX exp] [FAILREGEX epx]
# [LABELS label1 label2 ...])
#
function(geant4_add_test test)
cmake_parse_arguments(ARG
"DEBUG"
"TIMEOUT;BUILD;OUTPUT;ERROR;SOURCE_DIR;BINARY_DIR;PROJECT;PASSREGEX;FAILREGEX;WORKING_DIRECTORY"
"COMMAND;PRECMD;POSTCMD;ENVIRONMENT;DEPENDS;LABELS"
${ARGN})
if(CMAKE_CONFIGURATION_TYPES)
set(_cfg $<CONFIGURATION>/)
endif()
# ARG_BUILD is treated as "zero or one"
# zero arg: build everything
# one arg: just that target
if(ARG_BUILD OR "BUILD" IN_LIST ARG_KEYWORDS_MISSING_VALUES)
set(_is_build_test TRUE)
endif()
# COMMAND AND BUILD: split test
# - In this case, we have to create a -build and a -run test with the latter depending on the former
# NOT COMMAND AND BUILD: pure build
# COMMAND AND NOT BUILD: pure test
if(ARG_COMMAND AND _is_build_test)
set(_is_split_test TRUE)
endif()
# Supplying a PROJECT argument is now a deprecation warning and will be removed
if(ARG_PROJECT)
message(WARNING "Test '${test}' uses the deprecated 'PROJECT' argument to 'geant4_add_test'. This argument is obsolete")
endif()
#- Handle COMMAND argument
list(LENGTH ARG_COMMAND _len)
if(_len LESS 1)
if(NOT _is_build_test)
message(FATAL_ERROR "geant4_add_test: COMMAND argument is mandatory when BUILD argument is not supplied")
endif()
else()
list(GET ARG_COMMAND 0 _prg)
list(REMOVE_AT ARG_COMMAND 0)
if(NOT IS_ABSOLUTE ${_prg})
if(TARGET ${_prg})
set(_prg "$<TARGET_FILE:${_prg}>")
else()
set(_prg ${CMAKE_CURRENT_BINARY_DIR}/${_cfg}${_prg})
endif()
elseif(EXISTS ${_prg})
# Calling a prexisting/system program
else()
get_filename_component(_path ${_prg} PATH)
get_filename_component(_file ${_prg} NAME)
set(_prg ${_path}/${_cfg}${_file})
endif()
set(_cmd ${_prg} ${ARG_COMMAND})
string(REPLACE ";" "#" _cmd "${_cmd}")
string(REPLACE "=" "@" _cmd "${_cmd}")
endif()
set(_command ${CMAKE_COMMAND} -DTST=${test} -DCMD=${_cmd})
#- Handle PRE and POST commands
if(ARG_PRECMD)
set(_pre ${ARG_PRECMD})
string(REPLACE ";" "#" _pre "${_pre}")
set(_command ${_command} -DPRE=${_pre})
endif()
if(ARG_POSTCMD)
set(_post ${ARG_POSTCMD})
string(REPLACE ";" "#" _post "${_post}")
set(_command ${_command} -DPOST=${_post})
endif()
#- Handle OUTPUT, ERROR, DEBUG arguments
if(ARG_OUTPUT)
set(_command ${_command} -DOUT=${ARG_OUTPUT})
endif()
if(ARG_ERROR)
set(_command ${_command} -DERR=${ARG_ERROR})
endif()
if(ARG_DEBUG)
set(_command ${_command} -DDBG=ON)
endif()
if(ARG_WORKING_DIRECTORY)
set(_command ${_command} -DCWD=${ARG_WORKING_DIRECTORY})
endif()
if(ARG_TIMEOUT)
set(_command ${_command} -DTIM=${ARG_TIMEOUT})
endif()
#- Handle ENVIRONMENT argument
if(ARG_ENVIRONMENT)
string(REPLACE ";" "#" _env "${ARG_ENVIRONMENT}")
string(REPLACE "=" "@" _env "${_env}")
set(_command ${_command} -DENV=${_env})
endif()
#- Locate the test driver
# This is one of the few cases where we require ..._SOURCE_DIR to be scoped to Geant4
# because we may have called geant4_add_test after a project() call, as in the integration tests
set(_driver ${Geant4_SOURCE_DIR}/cmake/Modules/G4TestDriver.cmake)
if(NOT EXISTS ${_driver})
message(FATAL_ERROR "geant4_add_test: G4TestDriver.cmake not found!")
endif()
set(_command ${_command} -P ${_driver})
#- Now we can actually add the test
if(_is_build_test)
if(NOT ARG_SOURCE_DIR)
set(ARG_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
endif()
if(NOT ARG_BINARY_DIR)
set(ARG_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
endif()
set(__build_test_name "${test}")
set(__run_test_name "")
if(_is_split_test)
set(__build_test_name "${test}-build")
set(__run_test_name "${test}")
endif()
if(ARG_BUILD)
set(__build_argument --build-target ${ARG_BUILD})
endif()
# Build part of the test
# Again, note that we scope Geant4_DIR to Geant4_BINARY_DIR so we don't accidentally pickup
# local or higher scopes
add_test(NAME ${__build_test_name} COMMAND ${CMAKE_CTEST_COMMAND}
--build-and-test ${ARG_SOURCE_DIR} ${ARG_BINARY_DIR}
--build-generator ${CMAKE_GENERATOR}
--build-makeprogram ${CMAKE_MAKE_PROGRAM}
${__build_argument}
--build-config $<CONFIGURATION>
--build-noclean
--build-options
--no-warn-unused-cli
-DGeant4_DIR=${Geant4_BINARY_DIR}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
-DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}
-DCMAKE_C_FLAGS_MINSIZEREL=${CMAKE_C_FLAGS_MINSIZEREL}
-DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}
-DCMAKE_C_FLAGS_RELWITHDEBINFO=${CMAKE_C_FLAGS_RELWITHDEBINFO}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
-DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}
-DCMAKE_CXX_FLAGS_MINSIZEREL=${CMAKE_CXX_FLAGS_MINSIZEREL}
-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}
-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=${CMAKE_CXX_FLAGS_RELWITHDEBINFO}
-DCMAKE_CXX_FLAGS_FULLRELWITHDEBINFO=${CMAKE_CXX_FLAGS_FULLRELWITHDEBINFO}
-DCMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS}
-DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS}
-DCMAKE_STATIC_LINKER_FLAGS=${CMAKE_STATIC_LINKER_FLAGS}
-DCMAKE_DISABLE_FIND_PACKAGE_ROOT=$<BOOL:${CMAKE_DISABLE_FIND_PACKAGE_ROOT}>
)
# Build part of the test should have additional regex, and *must* have same labels
if(ARG_FAILREGEX)
set_property(TEST ${__build_test_name} PROPERTY FAIL_REGULAR_EXPRESSION "warning:|(${ARG_FAILREGEX})")
else()
set_property(TEST ${__build_test_name} PROPERTY FAIL_REGULAR_EXPRESSION "warning:")
endif()
if(ARG_LABELS)
set_property(TEST ${__build_test_name} PROPERTY LABELS ${ARG_LABELS})
else()
set_property(TEST ${__build_test_name} PROPERTY LABELS Nightly)
endif()
# (Optional) Run part of the test
if(__run_test_name)
add_test(NAME ${__run_test_name} COMMAND ${_command})
set_property(TEST ${__run_test_name} PROPERTY DEPENDS ${__build_test_name})
if(ARG_FAILREGEX)
set_property(TEST ${__run_test_name} PROPERTY FAIL_REGULAR_EXPRESSION ${ARG_FAILREGEX})
endif()
# If WORKING_DIRECTORY supplied, make sure testdriver is run in
# that directory, otherwise use specific binary dir
if(ARG_WORKING_DIRECTORY)
set_property(TEST ${__run_test_name} PROPERTY WORKING_DIRECTORY "${ARG_WORKING_DIRECTORY}")
else()
set_property(TEST ${__run_test_name} PROPERTY WORKING_DIRECTORY "${ARG_BINARY_DIR}")
endif()
endif()
else()
add_test(NAME ${test} COMMAND ${_command})
if(ARG_FAILREGEX)
set_property(TEST ${test} PROPERTY FAIL_REGULAR_EXPRESSION ${ARG_FAILREGEX})
endif()
# If WORKING_DIRECTORY supplied, make sure testdriver is run in
# that directory.
if(ARG_WORKING_DIRECTORY)
set_property(TEST ${test} PROPERTY WORKING_DIRECTORY "${ARG_WORKING_DIRECTORY}")
endif()
endif()
#- Handle TIMOUT and DEPENDS arguments
if(ARG_TIMEOUT)
set_property(TEST ${test} PROPERTY TIMEOUT ${ARG_TIMEOUT})
endif()
if(ARG_DEPENDS)
# MUST be append because a split test may set this earlier
set_property(TEST ${test} APPEND PROPERTY DEPENDS ${ARG_DEPENDS})
endif()
if(ARG_PASSREGEX)
set_property(TEST ${test} PROPERTY PASS_REGULAR_EXPRESSION ${ARG_PASSREGEX})
endif()
if(ARG_LABELS)
set_property(TEST ${test} PROPERTY LABELS ${ARG_LABELS})
else()
set_property(TEST ${test} PROPERTY LABELS Nightly)
endif()
endfunction()