File: CMakeLists.txt

package info (click to toggle)
fastdds 2.9.1%2Bds-1%2Bdeb12u2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 31,412 kB
  • sloc: cpp: 378,073; xml: 7,623; ansic: 4,596; python: 2,545; sh: 189; makefile: 36
file content (305 lines) | stat: -rw-r--r-- 11,798 bytes parent folder | download
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
# Copyright 2019 Proyectos y Sistemas de Mantenimiento SL (eProsima).
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

###########################################################################
# Create and link executable                                              #
###########################################################################
set(
    THROUGHPUTTEST_SOURCE ThroughputPublisher.cpp
    ThroughputSubscriber.cpp
    ThroughputTypes.cpp
    main_ThroughputTest.cpp
)
add_executable(ThroughputTest ${THROUGHPUTTEST_SOURCE})

target_compile_definitions(ThroughputTest PRIVATE
    BOOST_ASIO_STANDALONE
    ASIO_STANDALONE
    $<$<AND:$<NOT:$<BOOL:${WIN32}>>,$<STREQUAL:"${CMAKE_BUILD_TYPE}","Debug">>:__DEBUG>
    $<$<BOOL:${INTERNAL_DEBUG}>:__INTERNALDEBUG> # Internal debug activated.
    )

target_include_directories(ThroughputTest PRIVATE ${Asio_INCLUDE_DIR})

target_link_libraries(
    ThroughputTest
    fastrtps
    fastcdr
    foonathan_memory
    fastdds::optionparser
    ${CMAKE_THREAD_LIBS_INIT}
    ${CMAKE_DL_LIBS}
)

###########################################################################
# List Throughput tests                                                   #
###########################################################################
set(
    THROUGHPUT_TEST_LIST
    intraprocess_best_effort
    intraprocess_reliable
    interprocess_best_effort_udp
    interprocess_reliable_udp
#    interprocess_best_effort_tcp
#    interprocess_reliable_tcp
    interprocess_best_effort_shm
    interprocess_reliable_shm
)

###########################################################################
# List of tests supporting specific features                              #
# Each entry in this list means a specific test case added                #
###########################################################################

set(
    DATA_SHARING_LIST
    intraprocess_best_effort
    intraprocess_reliable
    interprocess_best_effort_shm
    interprocess_reliable_shm
)

set(
    LOAN_SAMPLES_LIST
    intraprocess_best_effort
    intraprocess_reliable
    interprocess_best_effort_shm
    interprocess_reliable_shm
    interprocess_best_effort_udp
    interprocess_reliable_udp
    interprocess_best_effort_tcp
    interprocess_reliable_tcp
)

set(
    DATA_SHARING_AND_LOAN_SAMPLES_LIST
    intraprocess_best_effort
    intraprocess_reliable
    interprocess_best_effort_shm
    interprocess_reliable_shm
)

###########################################################################
# Configure XML files                                                     #
###########################################################################
foreach(throughput_test_name ${THROUGHPUT_TEST_LIST})
    configure_file(
        ${CMAKE_CURRENT_SOURCE_DIR}/xml/${throughput_test_name}.xml
        ${CMAKE_CURRENT_BINARY_DIR}/xml/${throughput_test_name}.xml
        COPYONLY
    )
endforeach(throughput_test_name)

###########################################################################
# Create tests                                                            #
###########################################################################
find_package(PythonInterp 3 REQUIRED)
if(PYTHONINTERP_FOUND)
    # Loop over the test names
    foreach(throughput_test_name ${THROUGHPUT_TEST_LIST})

        # decide if add security testing
        set(ADD_THROUGHPUT_SECURITY OFF)
        if(SECURITY AND (${throughput_test_name} MATCHES "^interprocess"))
            set(ADD_THROUGHPUT_SECURITY ON)
        endif()

        # list of all the test cases generated in this iteration
        set(test_cases_setup performance.throughput.${throughput_test_name})

        # Set the interprocess flag
        if(${throughput_test_name} MATCHES "^interprocess")
            set(interproces_flag "--interprocess")
        else()
            set(interproces_flag "")
        endif()

        # Set the reliability flag
        if(${throughput_test_name} MATCHES "reliable")
            set(reliability_flag "--reliability")
        else()
            set(reliability_flag "")
        endif()

        # Add the test
        add_test(
            NAME performance.throughput.${throughput_test_name}
            COMMAND ${PYTHON_EXECUTABLE}
            ${CMAKE_CURRENT_SOURCE_DIR}/throughput_tests.py
            --xml_file ${CMAKE_CURRENT_SOURCE_DIR}/xml/${throughput_test_name}.xml
            --recoveries_file ${CMAKE_CURRENT_SOURCE_DIR}/recoveries.csv
            --demands_file ${CMAKE_CURRENT_SOURCE_DIR}/payloads_demands.csv
            ${interproces_flag}
            ${reliability_flag}
        )

        # Add environment
        if(WIN32)
            set(WIN_PATH "$ENV{PATH}")
            get_target_property(LINK_LIBRARIES_ ${PROJECT_NAME} LINK_LIBRARIES)
            if(NOT "${LINK_LIBRARIES_}" STREQUAL "LINK_LIBRARIES_-NOTFOUND")
            list(APPEND LINK_LIBRARIES_ ${PROJECT_NAME})
                foreach(LIBRARY_LINKED ${LINK_LIBRARIES_})
                    if(TARGET ${LIBRARY_LINKED})
                        # Check if is a real target or a target interface
                        get_target_property(dependency_type ${LIBRARY_LINKED} TYPE)
                        if(NOT dependency_type STREQUAL "INTERFACE_LIBRARY")
                            set(WIN_PATH "$<TARGET_FILE_DIR:${LIBRARY_LINKED}>;${WIN_PATH}")
                        endif()
                        unset(dependency_type)
                    endif()
                endforeach()
            endif()
            string(REPLACE ";" "\\;" WIN_PATH "${WIN_PATH}")
        endif()

        if(ADD_THROUGHPUT_SECURITY)

            # Add the secure version
            list(APPEND test_cases_setup performance.throughput.${throughput_test_name}.security)

            add_test(
                NAME performance.throughput.${throughput_test_name}.security
                COMMAND ${PYTHON_EXECUTABLE}
                ${CMAKE_CURRENT_SOURCE_DIR}/throughput_tests.py
                --xml_file ${CMAKE_CURRENT_SOURCE_DIR}/xml/${throughput_test_name}.xml
                --recoveries_file ${CMAKE_CURRENT_SOURCE_DIR}/recoveries.csv
                --demands_file ${CMAKE_CURRENT_SOURCE_DIR}/payloads_demands.csv
                --security
                ${interproces_flag}
                ${reliability_flag}
            )

            # Hint certificates location
            set_property(
                TEST performance.throughput.${throughput_test_name}.security
                APPEND PROPERTY ENVIRONMENT "CERTS_PATH=${PROJECT_SOURCE_DIR}/debian/snakeoil-certs"
            )

        endif()

        # Check if a data sharing test is required
        if(throughput_test_name IN_LIST DATA_SHARING_LIST)

            # append to the list of cases
            list(APPEND test_cases_setup performance.throughput.${throughput_test_name}.data_sharing)

            add_test(
                NAME performance.throughput.${throughput_test_name}.data_sharing
                COMMAND ${PYTHON_EXECUTABLE}
                ${CMAKE_CURRENT_SOURCE_DIR}/throughput_tests.py
                --xml_file ${CMAKE_CURRENT_SOURCE_DIR}/xml/${throughput_test_name}.xml
                --recoveries_file ${CMAKE_CURRENT_SOURCE_DIR}/recoveries.csv
                --demands_file ${CMAKE_CURRENT_SOURCE_DIR}/payloads_demands.csv
                --data_sharing=on
                ${interproces_flag}
                ${reliability_flag}
            )

        endif()

        # Check if a loans test is required
        if(throughput_test_name IN_LIST LOAN_SAMPLES_LIST)

            # append to the list of cases
            list(APPEND test_cases_setup performance.throughput.${throughput_test_name}.data_loans)

            add_test(
                NAME performance.throughput.${throughput_test_name}.data_loans
                COMMAND ${PYTHON_EXECUTABLE}
                ${CMAKE_CURRENT_SOURCE_DIR}/throughput_tests.py
                --xml_file ${CMAKE_CURRENT_SOURCE_DIR}/xml/${throughput_test_name}.xml
                --recoveries_file ${CMAKE_CURRENT_SOURCE_DIR}/recoveries.csv
                --demands_file ${CMAKE_CURRENT_SOURCE_DIR}/payloads_demands.csv
                --data_loans
                ${interproces_flag}
                ${reliability_flag}
            )

            if(ADD_THROUGHPUT_SECURITY)

                # Add the secure version
                list(APPEND test_cases_setup performance.throughput.${throughput_test_name}.data_loans.security)

                add_test(
                    NAME performance.throughput.${throughput_test_name}.data_loans.security
                    COMMAND ${PYTHON_EXECUTABLE}
                    ${CMAKE_CURRENT_SOURCE_DIR}/throughput_tests.py
                    --xml_file ${CMAKE_CURRENT_SOURCE_DIR}/xml/${throughput_test_name}.xml
                    --recoveries_file ${CMAKE_CURRENT_SOURCE_DIR}/recoveries.csv
                    --demands_file ${CMAKE_CURRENT_SOURCE_DIR}/payloads_demands.csv
                    --security
                    ${interproces_flag}
                    --data_loans
                    ${reliability_flag}
                )

                # Hint certificates location
                set_property(
                    TEST performance.throughput.${throughput_test_name}.data_loans.security
                    APPEND PROPERTY ENVIRONMENT "CERTS_PATH=${PROJECT_SOURCE_DIR}/debian/snakeoil-certs"
                )

            endif()

        endif()

        # Check if a test using data sharing and loans is required
        if(throughput_test_name IN_LIST DATA_SHARING_AND_LOAN_SAMPLES_LIST)

            # append to the list of cases
            list(APPEND test_cases_setup performance.throughput.${throughput_test_name}.data_loans_and_sharing)

            add_test(
                NAME performance.throughput.${throughput_test_name}.data_loans_and_sharing
                COMMAND ${PYTHON_EXECUTABLE}
                ${CMAKE_CURRENT_SOURCE_DIR}/throughput_tests.py
                --xml_file ${CMAKE_CURRENT_SOURCE_DIR}/xml/${throughput_test_name}.xml
                --recoveries_file ${CMAKE_CURRENT_SOURCE_DIR}/recoveries.csv
                --demands_file ${CMAKE_CURRENT_SOURCE_DIR}/payloads_demands.csv
                --data_loans
                --data_sharing=on
                ${interproces_flag}
                ${reliability_flag}
            )

        endif()

        # populate the properties for each test
        foreach(throughput_test_case ${test_cases_setup})

            # Set test properties
            set_property(
                TEST ${throughput_test_case}
                PROPERTY LABELS "NoMemoryCheck"
            )
            set_property(
                TEST ${throughput_test_case}
                APPEND PROPERTY ENVIRONMENT "THROUGHPUT_TEST_BIN=$<TARGET_FILE:ThroughputTest>"
            )
            set_property(
                TEST ${throughput_test_case}
                APPEND PROPERTY ENVIRONMENT "CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}"
            )

            if(WIN32)
                set_property(
                    TEST ${throughput_test_case}
                    APPEND PROPERTY ENVIRONMENT "PATH=${WIN_PATH}")
            endif()

        endforeach(throughput_test_case)

    endforeach(throughput_test_name)
endif()