-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathCMakeLists.txt
117 lines (92 loc) · 3.51 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
#----------------------------------------------------------------------------
# Setup the project
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(PileRoomSim)
#----------------------------------------------------------------------------
# Find Geant4 package, activating all available UI and Vis drivers by default
# You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui
# to build a batch mode only executable
#
option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON)
option(PORTABLE "Make a static build")
option(DRAWBOXES "Draw settings and results boxes in console" ON)
option(COLOURS "Use colours in console outputs" ON)
option(NOTIFY "Send message to notification area when run is complete" ON)
if(PORTABLE AND WITH_GEANT4_UIVIS)
message("Cannot have portable build with visulization turned on. Visualization will be disabled")
set(WITH_GEANT4_UIVIS OFF)
endif()
if(PORTABLE AND NOTIFY)
message("Cannot have portable build with notification message. Notification message will be disabled")
set(NOTIFY OFF)
endif()
if(WITH_GEANT4_UIVIS)
find_package(Geant4 REQUIRED ui_all vis_all)
else()
find_package(Geant4 REQUIRED)
endif()
if(PORTABLE)
find_package(Geant4 REQUIRED static)
set(Geant4_USES_QT5 0)
endif()
#----------------------------------------------------------------------------
# Setup Geant4 include directories and compile definitions
#
include(${Geant4_USE_FILE})
#----------------------------------------------------------------------------
# Locate sources and headers for this project
#
include_directories(${PROJECT_SOURCE_DIR}/include
${Geant4_INCLUDE_DIR})
file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc)
file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh)
#----------------------------------------------------------------------------
# Add the executable, and link it to the Geant4 libraries
#
if(PORTABLE)
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
SET(BUILD_SHARED_LIBRARIES OFF)
SET(CMAKE_EXE_LINKER_FLAGS "-static")
endif()
add_executable(PileRoomSim PileRoomSim.cc ${sources} ${headers} ${TOOLS_FORTRAN_OBJECTS})
target_link_libraries(PileRoomSim ${Geant4_LIBRARIES} ${HBOOK_LIBRARIES})
if(PORTABLE)
target_link_libraries(PileRoomSim -static-libgcc -static-libstdc++)
target_compile_options(PileRoomSim PUBLIC -DPORTABLE)
endif()
if(DRAWBOXES)
target_compile_options(PileRoomSim PUBLIC -DDRAWBOX)
endif()
if(COLOURS)
target_compile_options(PileRoomSim PUBLIC -DCOLOURS)
endif()
if(NOTIFY)
find_package(PkgConfig)
if (PKG_CONFIG_FOUND)
pkg_check_modules(GTK "libnotify")
if (GTK_FOUND)
target_link_libraries(PileRoomSim ${GTK_LIBRARIES})
add_definitions(${GTK_CFLAGS} ${GTK_CFLAGS_OTHER})
endif()
endif()
target_compile_options(PileRoomSim PUBLIC -DNOTIFY)
endif()
#----------------------------------------------------------------------------
# Copy all scripts to the build directory, i.e. the directory in which we
# build PileRoomSim. This is so that we can run the executable directly because it
# relies on these scripts being in the current working directory.
#
set(PileRoomSim_SCRIPTS
in.mac vis.mac one.mac 43-Geant4-logoV5.png
)
foreach(_script ${PileRoomSim_SCRIPTS})
configure_file(
${PROJECT_SOURCE_DIR}/${_script}
${PROJECT_BINARY_DIR}/${_script}
COPYONLY
)
endforeach()
#----------------------------------------------------------------------------
# Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX
#
install(TARGETS PileRoomSim DESTINATION bin)