CMakeLists.txt 7.76 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})

Millian Poquet's avatar
Millian Poquet committed
79
80
81
################
# Source files #
################
Olivier Richard's avatar
Olivier Richard committed
82
83

## Batsim
84
85
file(GLOB batsim_SRC
    "src/*.hpp"
86
87
    "src/*.cpp"
    "src/pugixml-1.7/*.hpp"
88
89
90
    "src/pugixml-1.7/*.cpp"
    "src/docopt/*.cpp"
    "src/docopt/*.h")
91
92

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

95
# Libraries to link
96
97
target_link_libraries(batsim
                      ${HAVE_SIMGRID_LIB}
98
                      ${GMP_LIBRARIES}
99
                      ${Boost_FILESYSTEM_LIBRARY_DEBUG}
100
                      ${Boost_LOCALE_LIBRARY_DEBUG}
Millian Poquet's avatar
Millian Poquet committed
101
                      ${Boost_REGEX_LIBRARY_DEBUG}
102
                      ${Boost_SYSTEM_LIBRARY_DEBUG}
103
                      ${OPENSSL_LIBRARIES}
104
105
106
                      ${REDOX_LIBRARY}
                      ${LIBEV_LIBRARY}
                      ${HIREDIS_LIBRARY})
Olivier Richard's avatar
Olivier Richard committed
107

Millian Poquet's avatar
Millian Poquet committed
108
109
110
111
112
################
# Installation #
################
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/batsim
        DESTINATION bin)
113

Millian Poquet's avatar
Millian Poquet committed
114
115
# Let's enable warnings if needed
if (enable_warnings)
116
    set(warning_flags " -Wall -Wextra")
Millian Poquet's avatar
Millian Poquet committed
117
118

    if (treat_warnings_as_errors)
119
        set(warning_flags "${warning_flags} -Werror")
Millian Poquet's avatar
Millian Poquet committed
120
121
122
    endif()

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

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

###########
# 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})

add_test(execN_mixed
         ${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})

add_test(execN_ssh1
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_no_energy.yaml
         -bwd ${CMAKE_SOURCE_DIR}
Millian Poquet's avatar
Millian Poquet committed
165
         -bod /tmp/batsim_tools_tests/ssh1
166
167
168
169
170
171
172
         --mpi_hostfile ${CMAKE_SOURCE_DIR}/test/mpi_hostfile_localhost
         --nb_workers_per_host 1)

add_test(execN_ssh2
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_no_energy.yaml
         -bwd ${CMAKE_SOURCE_DIR}
Millian Poquet's avatar
Millian Poquet committed
173
         -bod /tmp/batsim_tools_tests/ssh2
174
175
176
177
178
179
180
         --mpi_hostfile ${CMAKE_SOURCE_DIR}/test/mpi_hostfile_localhost
         --nb_workers_per_host 2)

add_test(execN_ssh4
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
         ${CMAKE_SOURCE_DIR}/test/test_no_energy.yaml
         -bwd ${CMAKE_SOURCE_DIR}
Millian Poquet's avatar
Millian Poquet committed
181
         -bod /tmp/batsim_tools_tests/ssh4
182
183
184
185
186
187
188
         --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
189
         -bod /tmp/batsim_tests/no_energy
190
191
192
193
194
         -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
195
         -bod /tmp/batsim_tests/energy
196
197
198
199
200
         -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
201
         -bod /tmp/batsim_tests/walltime
202
203
204
205
206
         -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
207
         -bod /tmp/batsim_tests/long_simulation_time
208
209
         -bwd ${CMAKE_SOURCE_DIR})

210
add_test(time_sharing
211
         ${CMAKE_SOURCE_DIR}/tools/experiments/execute_instances.py
212
213
         ${CMAKE_SOURCE_DIR}/test/test_time_sharing.yaml
         -bod /tmp/batsim_tests/time_sharing
214
215
216
217
218
         -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
219
         -bod /tmp/batsim_tests/smpi
220
221
222
223
224
         -bwd ${CMAKE_SOURCE_DIR})

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
225
         -bod /tmp/batsim_tests/batexec
226
227
228
229
230
231
232
233
234
         -bwd ${CMAKE_SOURCE_DIR})