Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
further factorize our cmake code to run the s4u examples
[simgrid.git] / examples / s4u / CMakeLists.txt
1
2 # Regular examples: with only one source and tested with all factories by default
3 #################################################################################
4 set(_actor-stacksize_factories "raw;boost;ucontext") # Threads ignore modifications of the stack size
5
6 # The maestro-set example only works for threads and when not using windows.
7 set(_maestro-set_factories "thread")
8 if(WIN32)
9   set(_maestro-set_disable 1)
10 endif()
11
12 foreach (example actor-create actor-daemon actor-exiting actor-join actor-kill
13                  actor-lifetime actor-migrate actor-suspend actor-yield actor-stacksize
14                  app-chainsend app-pingpong app-token-ring
15                  async-ready async-wait async-waitany async-waitall async-waituntil
16                  comm-dependent
17                  cloud-capping cloud-migration cloud-simple
18                  energy-exec energy-boot energy-link energy-vm energy-exec-ptask
19                  engine-filtering
20                  exec-async exec-basic exec-dvfs exec-ptask exec-remote exec-waitany exec-waitfor exec-dependent
21                  maestro-set
22                  io-async io-file-system io-file-remote io-disk-raw io-dependent
23                  platform-failures platform-profile platform-properties
24                  plugin-hostload
25                  replay-comm replay-io
26                  routing-get-clusters
27                  synchro-barrier synchro-condition-variable synchro-mutex synchro-semaphore)
28   add_executable       (s4u-${example} EXCLUDE_FROM_ALL ${example}/s4u-${example}.cpp)
29   add_dependencies     (tests s4u-${example})
30   target_link_libraries(s4u-${example} simgrid)
31   set_target_properties(s4u-${example} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${example})
32
33   set(tesh_files    ${tesh_files}    ${CMAKE_CURRENT_SOURCE_DIR}/${example}/s4u-${example}.tesh)
34   set(examples_src  ${examples_src}  ${CMAKE_CURRENT_SOURCE_DIR}/${example}/s4u-${example}.cpp)
35
36   # Use default factories unless specified otherwise
37   if(NOT DEFINED _${example}_factories)
38     set(_${example}_factories "thread;ucontext;raw;boost")
39   endif()
40 #  message("Factories of ${example}: ${_${example}_factories}")
41
42   if(NOT DEFINED _${example}_disabled)
43     ADD_TESH_FACTORIES(s4u-${example} "${_${example}_factories}"
44                                       --setenv bindir=${CMAKE_CURRENT_BINARY_DIR}/${example} 
45                                       --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms 
46                                       --cd ${CMAKE_CURRENT_SOURCE_DIR}/${example} 
47                                       ${CMAKE_HOME_DIRECTORY}/examples/s4u/${example}/s4u-${example}.tesh)
48   else()
49     message(STATUS "Example disabled on this system/architecture")
50     unset(_${example}_disabled)
51   endif()
52
53   unset(_${example}_factories)
54 endforeach()
55
56
57 # Model-checking examples: with only one source and tested with all factories but thread
58 ######################################################################
59
60 foreach (example mc-failing-assert)
61   if(SIMGRID_HAVE_MC)
62     add_executable       (s4u-${example} EXCLUDE_FROM_ALL ${example}/s4u-${example}.cpp)
63     add_dependencies     (tests s4u-${example})
64     target_link_libraries(s4u-${example} simgrid)
65     set_target_properties(s4u-${example} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${example})
66
67   
68     ADD_TESH_FACTORIES(s4u-${example} "ucontext;raw;boost"
69                                       --setenv bindir=${CMAKE_CURRENT_BINARY_DIR}/${example} 
70                                     --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms 
71                                     --cd ${CMAKE_CURRENT_SOURCE_DIR}/${example} 
72                                     ${CMAKE_HOME_DIRECTORY}/examples/s4u/${example}/s4u-${example}.tesh)
73   endif()
74   
75   set(tesh_files    ${tesh_files}    ${CMAKE_CURRENT_SOURCE_DIR}/${example}/s4u-${example}.tesh)
76   set(examples_src  ${examples_src}  ${CMAKE_CURRENT_SOURCE_DIR}/${example}/s4u-${example}.cpp)
77 endforeach()
78
79
80 # Multi-files examples
81 ######################
82
83 # MASTERWORKERS EXAMPLE
84 foreach(variant fun class) 
85   add_executable       (s4u-app-masterworkers-${variant} EXCLUDE_FROM_ALL app-masterworkers/s4u-app-masterworkers-${variant}.cpp)
86   target_link_libraries(s4u-app-masterworkers-${variant} simgrid)
87   set_target_properties(s4u-app-masterworkers-${variant} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/app-masterworkers)
88   add_dependencies(tests s4u-app-masterworkers-${variant})
89
90   set(examples_src  ${examples_src}  ${CMAKE_CURRENT_SOURCE_DIR}/app-masterworkers/s4u-app-masterworkers-${variant}.cpp)
91 endforeach()
92 set(tesh_files    ${tesh_files}    ${CMAKE_CURRENT_SOURCE_DIR}/app-masterworkers/s4u-app-masterworkers.tesh)
93
94 # CHORD EXAMPLE
95 add_executable       (s4u-dht-chord EXCLUDE_FROM_ALL dht-chord/s4u-dht-chord.cpp dht-chord/s4u-dht-chord-node.cpp)
96 target_link_libraries(s4u-dht-chord simgrid)
97 set_target_properties(s4u-dht-chord PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/dht-chord)
98 add_dependencies(tests s4u-dht-chord)
99 foreach (file s4u-dht-chord.cpp s4u-dht-chord-node.cpp s4u-dht-chord.hpp)
100   set(examples_src  ${examples_src}  ${CMAKE_CURRENT_SOURCE_DIR}/dht-chord/${file})
101 endforeach()
102
103 # KADEMLIA EXAMPLE
104 add_executable       (s4u-dht-kademlia EXCLUDE_FROM_ALL dht-kademlia/s4u-dht-kademlia.cpp dht-kademlia/node.cpp 
105                       dht-kademlia/routing_table.cpp dht-kademlia/answer.cpp)
106 target_link_libraries(s4u-dht-kademlia simgrid)
107 set_target_properties(s4u-dht-kademlia PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/dht-kademlia)
108 add_dependencies(tests s4u-dht-kademlia)
109 foreach (file answer routing_table node s4u-dht-kademlia)
110   set(examples_src  ${examples_src}  ${CMAKE_CURRENT_SOURCE_DIR}/dht-kademlia/${file}.cpp 
111                                      ${CMAKE_CURRENT_SOURCE_DIR}/dht-kademlia/${file}.hpp)
112 endforeach()
113 set(examples_src  ${examples_src}  ${CMAKE_CURRENT_SOURCE_DIR}/dht-kademlia/message.hpp)
114
115 # BITTORRENT EXAMPLE
116 add_executable       (s4u-bittorrent EXCLUDE_FROM_ALL app-bittorrent/s4u-bittorrent.cpp app-bittorrent/s4u-peer.cpp
117                       app-bittorrent/s4u-tracker.cpp)
118 target_link_libraries(s4u-bittorrent simgrid)
119 set_target_properties(s4u-bittorrent PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/app-bittorrent)
120 add_dependencies(tests s4u-bittorrent)
121 foreach (file s4u-bittorrent s4u-peer s4u-tracker)
122   set(examples_src  ${examples_src}  ${CMAKE_CURRENT_SOURCE_DIR}/app-bittorrent/${file}.cpp
123                                      ${CMAKE_CURRENT_SOURCE_DIR}/app-bittorrent/${file}.hpp)
124 endforeach()
125
126 # The tests of DHT, along with the parallel variant
127
128 if(CMAKE_SYSTEM_NAME STREQUAL "SunOS" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "i386" AND CMAKE_SIZEOF_VOID_P EQUAL 8)
129   # Thread-local storage (TLS) is needed for parallel execution, but it doesn't
130   # play well with Ucontexts on 64bit SunOS (at least on x86_64).
131   set(parallel-factories "thread;raw;boost")
132 else()
133   set(parallel-factories "thread;ucontext;raw;boost")
134 endif()
135
136 foreach(example app-bittorrent app-masterworkers 
137                 dht-chord dht-kademlia
138                 )
139   ADD_TESH_FACTORIES(s4u-${example} "thread;ucontext;raw;boost" 
140                                     --setenv bindir=${CMAKE_CURRENT_BINARY_DIR}/${example} 
141                                     --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms 
142                                     --cd ${CMAKE_CURRENT_SOURCE_DIR}/${example} 
143                                     ${CMAKE_HOME_DIRECTORY}/examples/s4u/${example}/s4u-${example}.tesh)
144
145   ADD_TESH_FACTORIES(s4u-${example}-parallel "${parallel-factories}" --cfg contexts/nthreads:4 ${CONTEXTS_SYNCHRO}
146                                              --setenv bindir=${CMAKE_CURRENT_BINARY_DIR}/${example} 
147                                              --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms 
148                                              --cd ${CMAKE_CURRENT_SOURCE_DIR}/${example} 
149                                              ${CMAKE_HOME_DIRECTORY}/examples/s4u/${example}/s4u-${example}.tesh)
150 endforeach()
151
152 # Examples not accepting factories
153 ##################################
154
155 foreach (example trace-platform)
156   add_executable       (s4u-${example} EXCLUDE_FROM_ALL ${example}/s4u-${example}.cpp)
157   target_link_libraries(s4u-${example} simgrid)
158   set_target_properties(s4u-${example} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${example})
159   add_dependencies(tests s4u-${example})
160
161   set(tesh_files    ${tesh_files}    ${CMAKE_CURRENT_SOURCE_DIR}/${example}/s4u-${example}.tesh)
162   set(examples_src  ${examples_src}  ${CMAKE_CURRENT_SOURCE_DIR}/${example}/s4u-${example}.cpp)
163   
164   ADD_TESH(s4u-${example} --setenv bindir=${CMAKE_CURRENT_BINARY_DIR}/${example}
165                           --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms 
166                           ${CMAKE_HOME_DIRECTORY}/examples/s4u/${example}/s4u-${example}.tesh)
167 endforeach()
168
169 if (NOT enable_memcheck AND NOT WIN32)
170   ADD_TESH(simix-breakpoint --setenv bindir=${CMAKE_CURRENT_BINARY_DIR}/app-pingpong
171                             --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms
172                             ${CMAKE_CURRENT_SOURCE_DIR}/app-pingpong/simix-breakpoint.tesh)
173 endif()
174
175 # Add all extra files to the archive
176 ####################################
177
178 set(examples_src  ${examples_src}                                                                          PARENT_SCOPE)
179 set(tesh_files    ${tesh_files}   ${CMAKE_CURRENT_SOURCE_DIR}/app-bittorrent/s4u-app-bittorrent.tesh
180                                   ${CMAKE_CURRENT_SOURCE_DIR}/app-pingpong/simix-breakpoint.tesh
181                                   ${CMAKE_CURRENT_SOURCE_DIR}/dht-chord/s4u-dht-chord.tesh
182                                   ${CMAKE_CURRENT_SOURCE_DIR}/dht-kademlia/s4u-dht-kademlia.tesh
183                   PARENT_SCOPE)
184 set(xml_files     ${xml_files}    ${CMAKE_CURRENT_SOURCE_DIR}/actor-create/s4u-actor-create_d.xml
185                                   ${CMAKE_CURRENT_SOURCE_DIR}/actor-lifetime/s4u-actor-lifetime_d.xml
186                                   ${CMAKE_CURRENT_SOURCE_DIR}/actor-yield/s4u-actor-yield_d.xml
187                                   ${CMAKE_CURRENT_SOURCE_DIR}/app-bittorrent/s4u-app-bittorrent_d.xml
188                                   ${CMAKE_CURRENT_SOURCE_DIR}/app-masterworkers/s4u-app-masterworkers_d.xml
189                                   ${CMAKE_CURRENT_SOURCE_DIR}/async-wait/s4u-async-wait_d.xml
190                                   ${CMAKE_CURRENT_SOURCE_DIR}/async-waitany/s4u-async-waitany_d.xml
191                                   ${CMAKE_CURRENT_SOURCE_DIR}/async-waitall/s4u-async-waitall_d.xml
192                                   ${CMAKE_CURRENT_SOURCE_DIR}/async-ready/s4u-async-ready_d.xml
193                                   ${CMAKE_CURRENT_SOURCE_DIR}/async-waituntil/s4u-async-waituntil_d.xml
194                                   ${CMAKE_CURRENT_SOURCE_DIR}/dht-chord/s4u-dht-chord_d.xml
195                                   ${CMAKE_CURRENT_SOURCE_DIR}/dht-kademlia/s4u-dht-kademlia_d.xml
196                                   ${CMAKE_CURRENT_SOURCE_DIR}/energy-boot/platform_boot.xml
197                                   ${CMAKE_CURRENT_SOURCE_DIR}/io-file-remote/s4u-io-file-remote_d.xml
198                                   ${CMAKE_CURRENT_SOURCE_DIR}/platform-properties/s4u-platform-properties_d.xml
199                                   ${CMAKE_CURRENT_SOURCE_DIR}/platform-failures/s4u-platform-failures_d.xml
200                                   ${CMAKE_CURRENT_SOURCE_DIR}/replay-comm/s4u-replay-comm-split_d.xml
201                                   ${CMAKE_CURRENT_SOURCE_DIR}/replay-comm/s4u-replay-comm_d.xml
202                                   ${CMAKE_CURRENT_SOURCE_DIR}/replay-io/s4u-replay-io_d.xml
203                   PARENT_SCOPE)
204 set(bin_files     ${bin_files}    ${CMAKE_CURRENT_SOURCE_DIR}/dht-kademlia/generate.py                     PARENT_SCOPE)
205 set(txt_files     ${txt_files}    ${CMAKE_CURRENT_SOURCE_DIR}/replay-comm/s4u-replay-comm-split-p0.txt
206                                   ${CMAKE_CURRENT_SOURCE_DIR}/replay-comm/s4u-replay-comm-split-p1.txt
207                                   ${CMAKE_CURRENT_SOURCE_DIR}/replay-comm/s4u-replay-comm.txt
208                                   ${CMAKE_CURRENT_SOURCE_DIR}/replay-io/s4u-replay-io.txt                  PARENT_SCOPE)
209