CMakeLists.txt 10.4 KB
Newer Older
1
2
# Let's use at least v3.1 for sanity's sake.
cmake_minimum_required(VERSION 3.1)
Olivier Richard's avatar
Olivier Richard committed
3

4
5
project("Batsim")

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Enable C++11
# Let's check that the used compiler handles c++11 correctly
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
    if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.1")
        message(FATAL_ERROR "Insufficient gcc version: 4.8.1 is needed to support C++11")
    elseif(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5")
        message(WARNING "Old gcc version found: Using version 5 or greater is recommended")
    endif()
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
    if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.3")
        message(FATAL_ERROR "Insufficient clang version: 3.3 is needed to support C++11")
    elseif(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.4")
        message(WARNING "Old clang version found: Using version 3.4 or greater is recommended")
    endif()
else()
    message(WARNING "Unknown compiler. Make sure it fully supports C++11.")
endif()

# Let's enable C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

Millian Poquet's avatar
Millian Poquet committed
28
29
30
31
# Options
option(enable_warnings "Enable compilation warnings" ON)
option(treat_warnings_as_errors "Treat compilation warnings as compilation errors" OFF)
option(ignore_assertions "Ignore assertions, which could make the simulation unstable, but could improve its performance" OFF)
Olivier Richard's avatar
Olivier Richard committed
32

33
34
35
36
37
38
39
40
41
42
# Build type
# Set a default build type if none was specified
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  message(STATUS "Setting build type to 'Debug' as none was specified.")
  set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE)
  # Set the possible values of build type for cmake-gui
  set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
    "MinSizeRel" "RelWithDebInfo")
endif()

Millian Poquet's avatar
Millian Poquet committed
43
44
45
################
# Dependencies #
################
46
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
47

48
49
50
## SimGrid dependency
find_package(SimGrid REQUIRED)
include_directories(${SIMGRID_INCLUDE_DIR})
Millian Poquet's avatar
Millian Poquet committed
51

52
## Boost dependency
53
find_package(Boost 1.58 REQUIRED COMPONENTS system filesystem regex locale)
54
55
include_directories(${Boost_INCLUDE_DIR})

56
57
58
59
## GMP
find_package(GMP REQUIRED)
include_directories(${GMP_INCLUDE_DIR})

60
61
62
63
## Rapidjson dependency
find_package(rapidjson REQUIRED)
include_directories(${RAPIDJSON_INCLUDE_DIRS})

64
65
66
67
## OpenSSL dependency
find_package(OpenSSL REQUIRED)
include_directories(${OPENSSL_INCLUDE_DIR})

68
69
70
71
72
73
74
75
76
77
78
## Redox dependency
find_package(redox REQUIRED)
include_directories(${REDOX_INCLUDE_DIR})

## Redox sub dependencies
find_package(hiredis REQUIRED)
include_directories(${HIREDIS_INCLUDE_DIRS})

find_package(libev REQUIRED)
include_directories(${LIBEV_INCLUDE_DIRS})

79
80
81
82
# ZeroMQ dependency
find_package(ZMQ REQUIRED)
include_directories(${ZMQ_INCLUDE_DIRS})

Millian Poquet's avatar
Millian Poquet committed
83
84
85
################
# Source files #
################
Olivier Richard's avatar
Olivier Richard committed
86
87

## Batsim
88
89
file(GLOB batsim_SRC
    "src/*.hpp"
90
91
    "src/*.cpp"
    "src/pugixml-1.7/*.hpp"
92
93
94
    "src/pugixml-1.7/*.cpp"
    "src/docopt/*.cpp"
    "src/docopt/*.h")
95
96

# Executables
97
add_executable(batsim ${batsim_SRC})
Olivier Richard's avatar
Olivier Richard committed
98

99
# Libraries to link
100
101
target_link_libraries(batsim
                      ${HAVE_SIMGRID_LIB}
102
                      ${GMP_LIBRARIES}
103
                      ${Boost_FILESYSTEM_LIBRARY_DEBUG}
104
                      ${Boost_LOCALE_LIBRARY_DEBUG}
Millian Poquet's avatar
Millian Poquet committed
105
                      ${Boost_REGEX_LIBRARY_DEBUG}
106
                      ${Boost_SYSTEM_LIBRARY_DEBUG}
107
                      ${OPENSSL_LIBRARIES}
108
109
                      ${REDOX_LIBRARY}
                      ${LIBEV_LIBRARY}
110
111
                      ${HIREDIS_LIBRARY}
                      ${ZMQ_LIBRARIES})
Olivier Richard's avatar
Olivier Richard committed
112

Millian Poquet's avatar
Millian Poquet committed
113
114
115
116
117
################
# Installation #
################
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/batsim
        DESTINATION bin)
118

Millian Poquet's avatar
Millian Poquet committed
119
120
# Let's enable warnings if needed
if (enable_warnings)
121
    set(warning_flags " -Wall -Wextra")
Millian Poquet's avatar
Millian Poquet committed
122
123

    if (treat_warnings_as_errors)
124
        set(warning_flags "${warning_flags} -Werror")
Millian Poquet's avatar
Millian Poquet committed
125
126
127
    endif()

    if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
128
        set_property(TARGET batsim APPEND_STRING PROPERTY COMPILE_FLAGS ${warning_flags})
Millian Poquet's avatar
Millian Poquet committed
129
    elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
130
        set_property(TARGET batsim APPEND_STRING PROPERTY COMPILE_FLAGS ${warning_flags})
Millian Poquet's avatar
Millian Poquet committed
131
132
    else()
        message(WARNING "Unknown compiler. Warnings should not be enabled correctly.")
133
        set_property(TARGET batsim APPEND_STRING PROPERTY COMPILE_FLAGS ${warning_flags})
Millian Poquet's avatar
Millian Poquet committed
134
135
136
    endif()
endif()

137
# Let's ignore assertions if needed (might improve performance but can be dangerous)
Millian Poquet's avatar
Millian Poquet committed
138
139
if (ignore_assertions)
    target_compile_definitions(batsim PRIVATE NDEBUG)
140
endif()
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159

###########
# Testing #
###########
enable_testing()

# Execution scripts tests
add_test(exec1_tiny
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_one_instance.py
         ${CMAKE_SOURCE_DIR}/tools/experiments/instance_examples/pybatsim_filler_tiny.yaml
         -od /tmp/batsim_tools_tests/exec1/out/instance_examples/pftiny
         -wd ${CMAKE_SOURCE_DIR})

add_test(exec1_medium
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_one_instance.py
         ${CMAKE_SOURCE_DIR}/tools/experiments/instance_examples/pybatsim_filler_medium.yaml
         -od /tmp/batsim_tools_tests/exec1/out/instance_examples/pfmedium
         -wd ${CMAKE_SOURCE_DIR})

160
add_test(execN
161
162
163
164
165
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/tools/experiments/instances_examples/pyfiller_tiny_medium_mixed.yaml
         -bod /tmp/batsim_tools_tests/execN
         -bwd ${CMAKE_SOURCE_DIR})

166
add_test(execN_np2
167
168
169
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_no_energy.yaml
         -bwd ${CMAKE_SOURCE_DIR}
170
171
         -bod /tmp/batsim_tools_tests/execN_np2
         --nb_workers_per_host 2)
172

173
add_test(execN_np4
174
175
176
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_no_energy.yaml
         -bwd ${CMAKE_SOURCE_DIR}
177
178
         -bod /tmp/batsim_tools_tests/execN_np4
         --nb_workers_per_host 4)
179

180
add_test(execN_np4_remote
181
182
183
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_no_energy.yaml
         -bwd ${CMAKE_SOURCE_DIR}
184
         -bod /tmp/batsim_tools_tests/execN_np4_remote
185
186
187
188
189
190
191
         --mpi_hostfile ${CMAKE_SOURCE_DIR}/test/mpi_hostfile_localhost
         --nb_workers_per_host 4)

# Batsim tests
add_test(no_energy
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_no_energy.yaml
Millian Poquet's avatar
Millian Poquet committed
192
         -bod /tmp/batsim_tests/no_energy
193
194
195
196
197
         -bwd ${CMAKE_SOURCE_DIR})

add_test(energy
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_energy.yaml
Millian Poquet's avatar
Millian Poquet committed
198
         -bod /tmp/batsim_tests/energy
199
200
201
202
203
         -bwd ${CMAKE_SOURCE_DIR})

add_test(walltime
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_walltime.yaml
Millian Poquet's avatar
Millian Poquet committed
204
         -bod /tmp/batsim_tests/walltime
205
206
207
208
209
         -bwd ${CMAKE_SOURCE_DIR})

add_test(long_simulation_time
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_long_simulation_time.yaml
Millian Poquet's avatar
Millian Poquet committed
210
         -bod /tmp/batsim_tests/long_simulation_time
211
212
         -bwd ${CMAKE_SOURCE_DIR})

213
add_test(time_sharing
214
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
215
216
         ${CMAKE_SOURCE_DIR}/test/test_time_sharing.yaml
         -bod /tmp/batsim_tests/time_sharing
217
218
219
220
221
         -bwd ${CMAKE_SOURCE_DIR})

add_test(smpi
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_smpi.yaml
Millian Poquet's avatar
Millian Poquet committed
222
         -bod /tmp/batsim_tests/smpi
223
224
         -bwd ${CMAKE_SOURCE_DIR})

225
226
227
228
229
230
add_test(smpi_mapping
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_smpi_mapping.yaml
         -bod /tmp/batsim_tests/smpi_mapping
         -bwd ${CMAKE_SOURCE_DIR})

231
232
233
234
235
236
add_test(smpi_batexec
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_smpi_batexec.yaml
         -bod /tmp/batsim_tests/smpi_batexec
         -bwd ${CMAKE_SOURCE_DIR})

237
238
239
add_test(batexec
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_batexec.yaml
Millian Poquet's avatar
Millian Poquet committed
240
         -bod /tmp/batsim_tests/batexec
241
242
         -bwd ${CMAKE_SOURCE_DIR})

Millian Poquet's avatar
Millian Poquet committed
243
244
245
246
247
248
add_test(reject
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_reject.yaml
         -bod /tmp/batsim_tests/reject
         -bwd ${CMAKE_SOURCE_DIR})

Millian Poquet's avatar
Millian Poquet committed
249
250
251
252
253
254
add_test(pfs0
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_pfs0.yaml
         -bod /tmp/batsim_tests/pfs0
         -bwd ${CMAKE_SOURCE_DIR})

255
256
257
258
259
add_test(same_submit_time
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_same_submit_time.yaml
         -bod /tmp/batsim_tests/same_submit_time
         -bwd ${CMAKE_SOURCE_DIR})
260

261
262
263
264
265
266
add_test(sequence_delay
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_sequence_delay.yaml
         -bod /tmp/batsim_tests/sequence_delay
         -bwd ${CMAKE_SOURCE_DIR})

267
add_test(redis_enabled
268
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
269
270
271
272
273
274
275
276
         ${CMAKE_SOURCE_DIR}/test/test_redis_enabled.yaml
         -bod /tmp/batsim_tests/redis_enabled
         -bwd ${CMAKE_SOURCE_DIR})

add_test(redis_disabled
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_redis_disabled.yaml
         -bod /tmp/batsim_tests/redis_disabled
277
278
279
280
281
282
         -bwd ${CMAKE_SOURCE_DIR})

add_test(dynamic_submit
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_dynamic_submit.yaml
         -bod /tmp/batsim_tests/dynamic_submit
283
284
         -bwd ${CMAKE_SOURCE_DIR}
         --nb_workers_per_host 2)
285

286
287
288
289
290
291
add_test(kill
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_kill.yaml
         -bod /tmp/batsim_tests/kill
         -bwd ${CMAKE_SOURCE_DIR})

292
293
294
295
296
297
add_test(kill_multiple
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_kill_multiple.yaml
         -bod /tmp/batsim_tests/kill_multiple
         -bwd ${CMAKE_SOURCE_DIR})

298
299
300
301
302
add_test(pybatsim_tests
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/pybatsim_tests.yaml
         -bod /tmp/pybatsim_tests
         -bwd ${CMAKE_SOURCE_DIR})