blob: 233e75d6e2aa4b837603e96a70c27f0d789ff3ac [file] [log] [blame]
Damjan Marion612dd6a2018-07-30 12:45:07 +02001# Copyright (c) 2018 Cisco and/or its affiliates.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at:
5#
6# http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14enable_language(ASM)
15
16##############################################################################
Damjan Marion78925602024-05-23 13:06:39 +000017# find libdl
18##############################################################################
19vpp_find_path(LIBDL_INCLUDE_DIR dlfcn.h)
20vpp_find_library(LIBDL_LIB NAMES dl)
21
22if (LIBDL_INCLUDE_DIR AND LIBDL_LIB)
23 message(STATUS "libdl found at ${LIBDL_LIB}")
24 list(APPEND VPPINFRA_LIBS ${LIBDL_LIB})
25else()
26 message(FATAL_ERROR "libdl not found")
27endif()
28
29##############################################################################
30# find libunwind
31##############################################################################
32vpp_find_path(LIBUNWIND_INCLUDE_DIR unwind.h)
33vpp_find_library(LIBUNWIND_LIB NAMES unwind libunwind)
34
35if (LIBUNWIND_INCLUDE_DIR AND LIBUNWIND_LIB)
36 message(STATUS "libunwind found at ${LIBUNWIND_LIB}")
37 list(APPEND VPPINFRA_LIBS ${LIBUNWIND_LIB})
38 add_definitions(-DHAVE_LIBUNWIND=1)
39else()
40 message(WARNING "libunwind not found - stack traces disabled")
41 add_definitions(-DHAVE_LIBUNWIND=0)
42endif()
43
44##############################################################################
Damjan Marion612dd6a2018-07-30 12:45:07 +020045# Generate vppinfra/config.h
46##############################################################################
Damjan Marionedc43872018-09-02 11:16:00 +020047set(LOG2_CACHE_LINE_BYTES ${VPP_LOG2_CACHE_LINE_SIZE})
Damjan Marion612dd6a2018-07-30 12:45:07 +020048
Dave Barach98bd7572020-02-10 10:16:40 -050049option(VPP_VECTOR_GROW_BY_ONE "Vectors grow by one, instead of 3/2" OFF)
50if(VPP_VECTOR_GROW_BY_ONE)
51 set(VECTOR_GROW_BY_ONE 1)
52else(VPP_VECTOR_GROW_BY_ONE)
53 set(VECTOR_GROW_BY_ONE 0)
54endif(VPP_VECTOR_GROW_BY_ONE)
55
Damjan Marion612dd6a2018-07-30 12:45:07 +020056configure_file(
57 ${CMAKE_SOURCE_DIR}/vppinfra/config.h.in
Damjan Marion88b2e362021-04-29 18:47:25 +020058 ${CMAKE_CURRENT_BINARY_DIR}/config.h
Damjan Marion612dd6a2018-07-30 12:45:07 +020059)
60
61install(
Damjan Marion88b2e362021-04-29 18:47:25 +020062 FILES ${CMAKE_CURRENT_BINARY_DIR}/config.h
Nick Browne3cf4d02021-09-15 14:25:40 +010063 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/vppinfra
Damjan Marion43b06062018-08-29 22:20:45 +020064 COMPONENT vpp-dev
Damjan Marion612dd6a2018-07-30 12:45:07 +020065)
66
Damjan Mariondae1c7e2020-10-17 13:32:25 +020067add_definitions(-fvisibility=hidden)
68
Ole Troandf87f802020-11-18 19:17:48 +010069# Ensure symbols from cJSON are exported
Filip Tehlar36217e32021-07-23 08:51:10 +000070set_source_files_properties( cJSON.c jsonformat.c PROPERTIES
Ole Troandf87f802020-11-18 19:17:48 +010071 COMPILE_DEFINITIONS " CJSON_API_VISIBILITY " )
72
Damjan Marion612dd6a2018-07-30 12:45:07 +020073##############################################################################
74# vppinfra sources
75##############################################################################
76set(VPPINFRA_SRCS
Damjan Marion7f57f502021-04-15 16:13:20 +020077 bitmap.c
Dave Barach32dcd3b2019-07-08 12:25:38 -040078 bihash_all_vector.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020079 cpu.c
Dave Barach2c8e0022020-02-11 15:06:34 -050080 dlmalloc.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020081 elf.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020082 elog.c
83 error.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020084 fifo.c
85 format.c
Nathan Skrzypczak0e658402021-09-17 11:51:46 +020086 format_table.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020087 hash.c
88 heap.c
Damjan Marion94100532020-11-06 23:25:57 +010089 interrupt.c
Filip Tehlar36217e32021-07-23 08:51:10 +000090 jsonformat.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020091 longjmp.S
92 macros.c
93 maplog.c
Damjan Marion57d1ec02020-09-16 21:15:44 +020094 mem.c
Damjan Marion0da81682020-12-22 14:58:56 +010095 mem_bulk.c
Dave Barach2c8e0022020-02-11 15:06:34 -050096 mem_dlmalloc.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020097 mhash.c
Gary Boona9ed6f72019-07-22 10:57:56 -040098 mpcap.c
Dave Barach3ae28732018-11-16 17:19:00 -050099 pcap.c
Damjan Marion68b4da62018-09-30 18:26:20 +0200100 pmalloc.c
Damjan Marion612dd6a2018-07-30 12:45:07 +0200101 pool.c
102 ptclosure.c
Damjan Marion612dd6a2018-07-30 12:45:07 +0200103 random_buffer.c
Dave Barach2c8e0022020-02-11 15:06:34 -0500104 random.c
Damjan Marion612dd6a2018-07-30 12:45:07 +0200105 random_isaac.c
Florin Coras672d5fc2019-04-15 17:28:51 -0700106 rbtree.c
Damjan Marion612dd6a2018-07-30 12:45:07 +0200107 serialize.c
Damjan Marion612dd6a2018-07-30 12:45:07 +0200108 socket.c
Damjan Marion78925602024-05-23 13:06:39 +0000109 stack.c
Damjan Marion612dd6a2018-07-30 12:45:07 +0200110 std-formats.c
111 string.c
112 time.c
113 time_range.c
Damjan Marion612dd6a2018-07-30 12:45:07 +0200114 timing_wheel.c
Dave Barachd7b828f2020-04-01 16:54:00 -0400115 tw_timer_2t_2w_512sl.c
Damjan Marion612dd6a2018-07-30 12:45:07 +0200116 tw_timer_16t_1w_2048sl.c
Dave Barach2c8e0022020-02-11 15:06:34 -0500117 tw_timer_16t_2w_512sl.c
Damjan Marion612dd6a2018-07-30 12:45:07 +0200118 tw_timer_1t_3w_1024sl_ov.c
Dave Barach2c8e0022020-02-11 15:06:34 -0500119 tw_timer_2t_1w_2048sl.c
120 tw_timer_4t_3w_256sl.c
Damjan Marion612dd6a2018-07-30 12:45:07 +0200121 unformat.c
122 unix-formats.c
123 unix-misc.c
124 valloc.c
125 vec.c
126 vector.c
Damjan Marion2e5921b2021-11-28 22:57:15 +0100127 vector/toeplitz.c
Ole Troandf87f802020-11-18 19:17:48 +0100128 cJSON.c
Damjan Marion612dd6a2018-07-30 12:45:07 +0200129)
130
Damjan Marion4553c952018-08-26 11:04:40 +0200131set(VPPINFRA_HEADERS
Damjan Mariond51250f2021-12-22 12:22:59 +0100132 bihash_12_4.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200133 bihash_16_8.h
134 bihash_24_8.h
Matthew Smithf613a442021-01-20 08:59:10 -0600135 bihash_32_8.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200136 bihash_40_8.h
137 bihash_48_8.h
138 bihash_8_8.h
jiangxiaoming498889a2020-10-22 09:08:04 +0800139 bihash_8_16.h
140 bihash_24_16.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200141 bihash_template.c
142 bihash_template.h
143 bihash_vec8_8.h
144 bitmap.h
145 bitops.h
146 byte_order.h
147 cache.h
Dave Barach5f2cfb22019-05-20 10:28:57 -0400148 callback.h
Tom Seidenberg6c81f5a2020-07-10 15:49:03 +0000149 callback_data.h
Ole Troandf87f802020-11-18 19:17:48 +0100150 cJSON.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200151 clib_error.h
152 clib.h
153 cpu.h
154 crc32.h
Damjan Marionb47376f2023-03-15 11:42:06 +0000155 crypto/sha2.h
156 crypto/ghash.h
157 crypto/aes.h
158 crypto/aes_cbc.h
Damjan Marion9caef2a2024-01-08 19:05:40 +0000159 crypto/aes_ctr.h
Damjan Marionb47376f2023-03-15 11:42:06 +0000160 crypto/aes_gcm.h
Damjan Marion003330c2023-04-12 12:19:05 +0000161 crypto/poly1305.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200162 dlist.h
163 dlmalloc.h
164 elf_clib.h
165 elf.h
166 elog.h
167 error_bootstrap.h
168 error.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200169 fifo.h
170 file.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200171 format.h
Damjan Marion78925602024-05-23 13:06:39 +0000172 format_ansi.h
Nathan Skrzypczak0e658402021-09-17 11:51:46 +0200173 format_table.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200174 hash.h
175 heap.h
Damjan Marion94100532020-11-06 23:25:57 +0100176 interrupt.h
Filip Tehlar36217e32021-07-23 08:51:10 +0000177 jsonformat.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200178 lb_hash_hash.h
Florin Corasb957d802019-07-09 19:02:33 -0700179 llist.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200180 lock.h
181 longjmp.h
182 macros.h
183 maplog.h
184 math.h
Damjan Marion856d0622021-04-21 21:11:35 +0200185 memcpy.h
Damjan Marion56f54af2021-10-12 20:30:02 +0200186 memcpy_x86_64.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200187 mem.h
188 mhash.h
Gary Boona9ed6f72019-07-22 10:57:56 -0400189 mpcap.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200190 os.h
Dave Barach3ae28732018-11-16 17:19:00 -0500191 pcap.h
192 pcap_funcs.h
BenoƮt Ganne5527a782022-01-18 15:56:41 +0100193 pcg.h
Damjan Mariond5045e62022-04-06 21:16:37 +0200194 perfmon/perfmon.h
Damjan Marion68b4da62018-09-30 18:26:20 +0200195 pmalloc.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200196 pool.h
197 ptclosure.h
198 random_buffer.h
199 random.h
200 random_isaac.h
Florin Coras672d5fc2019-04-15 17:28:51 -0700201 rbtree.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200202 serialize.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200203 smp.h
204 socket.h
205 sparse_vec.h
Damjan Marion78925602024-05-23 13:06:39 +0000206 stack.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200207 string.h
208 time.h
209 time_range.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200210 timing_wheel.h
Yu Sun6f5b72e2020-04-16 13:56:12 -0400211 tw_timer_2t_2w_512sl.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200212 tw_timer_16t_1w_2048sl.h
213 tw_timer_16t_2w_512sl.h
214 tw_timer_1t_3w_1024sl_ov.h
215 tw_timer_2t_1w_2048sl.h
216 tw_timer_4t_3w_256sl.h
217 tw_timer_template.c
218 tw_timer_template.h
219 types.h
Sirshak Das2f6d7bb2018-10-03 22:53:51 +0000220 atomics.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200221 unix.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200222 valloc.h
223 vec_bootstrap.h
224 vec.h
225 vector_altivec.h
226 vector_avx2.h
227 vector_avx512.h
Mohsin Kazmi0ec7dad2021-07-15 10:34:36 +0000228 vector/array_mask.h
Damjan Marion4c276f02021-11-06 13:17:31 +0100229 vector/compress.h
230 vector/count_equal.h
Damjan Marion4c53ff42021-10-28 23:03:04 +0200231 vector/index_to_ptr.h
Damjan Marionaa63bc62021-11-08 11:18:30 +0000232 vector/ip_csum.h
Damjan Marion4c276f02021-11-06 13:17:31 +0100233 vector/mask_compare.h
Damjan Marion2e5921b2021-11-28 22:57:15 +0100234 vector/toeplitz.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200235 vector.h
236 vector_neon.h
237 vector_sse42.h
BenoƮt Gannebe7dbbb2020-04-24 14:37:10 +0200238 warnings.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200239 xxhash.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200240 linux/sysfs.h
241)
242
Damjan Marion4dffd1c2018-09-03 12:30:36 +0200243if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
244 list(APPEND VPPINFRA_SRCS
245 elf_clib.c
246 linux/mem.c
247 linux/sysfs.c
Nathan Skrzypczak4cef6de2021-07-19 18:21:43 +0200248 linux/netns.c
Tom Jones000b5e12024-01-26 14:13:39 +0000249# TODO: Temporarily don't build perfmon on non-Linux
250 perfmon/bundle_default.c
251 perfmon/bundle_core_power.c
252 perfmon/perfmon.c
Damjan Marion4dffd1c2018-09-03 12:30:36 +0200253 )
Tom Jonese12f69f2024-01-26 17:04:23 +0000254elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD")
255 list(APPEND VPPINFRA_SRCS
256 elf_clib.c
257 freebsd/mem.c
258 )
Damjan Marion4dffd1c2018-09-03 12:30:36 +0200259endif()
260
Damjan Marion4553c952018-08-26 11:04:40 +0200261add_vpp_library(vppinfra
262 SOURCES ${VPPINFRA_SRCS}
Damjan Marion78925602024-05-23 13:06:39 +0000263 LINK_LIBRARIES m ${VPPINFRA_LIBS}
Damjan Marion4553c952018-08-26 11:04:40 +0200264 INSTALL_HEADERS ${VPPINFRA_HEADERS}
Damjan Marion43b06062018-08-29 22:20:45 +0200265 COMPONENT libvppinfra
Damjan Marionaf7892c2020-10-22 14:23:47 +0200266 LTO
Damjan Marion4553c952018-08-26 11:04:40 +0200267)
268
269##############################################################################
270# vppinfra headers
271##############################################################################
Damjan Marion612dd6a2018-07-30 12:45:07 +0200272option(VPP_BUILD_VPPINFRA_TESTS "Build vppinfra tests." OFF)
273if(VPP_BUILD_VPPINFRA_TESTS)
Damjan Marion4553c952018-08-26 11:04:40 +0200274 foreach(test
Damjan Marion612dd6a2018-07-30 12:45:07 +0200275 bihash_vec88
Damjan Marion612dd6a2018-07-30 12:45:07 +0200276 dlist
277 elf
278 elog
279 fifo
Damjan Marion612dd6a2018-07-30 12:45:07 +0200280 format
281 fpool
282 hash
283 heap
Damjan Marion7f75e802023-11-03 21:57:42 +0000284 interrupt
Damjan Marion612dd6a2018-07-30 12:45:07 +0200285 longjmp
286 macros
287 maplog
Vladislav Grishenko70328922023-12-14 17:48:28 +0100288 mhash
Damjan Marion68b4da62018-09-30 18:26:20 +0200289 pmalloc
Vladislav Grishenko8a4b7972022-09-28 13:37:02 +0500290 pool_alloc
Damjan Marion612dd6a2018-07-30 12:45:07 +0200291 pool_iterate
292 ptclosure
293 random
294 random_isaac
jaszha0325ab6cf2019-07-01 17:20:52 -0500295 rwlock
Damjan Marion612dd6a2018-07-30 12:45:07 +0200296 serialize
Damjan Marion612dd6a2018-07-30 12:45:07 +0200297 socket
jaszha039a4e6312019-06-19 14:07:05 -0500298 spinlock
Damjan Marion612dd6a2018-07-30 12:45:07 +0200299 time
300 time_range
Damjan Marion612dd6a2018-07-30 12:45:07 +0200301 tw_timer
302 valloc
303 vec
Damjan Marion612dd6a2018-07-30 12:45:07 +0200304 )
Damjan Marion4553c952018-08-26 11:04:40 +0200305 add_vpp_executable(test_${test}
306 SOURCES test_${test}.c
Florin Coras4f944642019-08-01 10:54:06 -0700307 LINK_LIBRARIES vppinfra pthread
Damjan Marion4553c952018-08-26 11:04:40 +0200308 )
Damjan Marion612dd6a2018-07-30 12:45:07 +0200309 endforeach()
310
Dave Barach053d0932020-04-22 10:02:31 -0400311 foreach(test bihash_template)
Damjan Marion4553c952018-08-26 11:04:40 +0200312 add_vpp_executable(test_${test}
313 SOURCES test_${test}.c
314 LINK_LIBRARIES vppinfra Threads::Threads
315 )
316 endforeach()
Damjan Marionc3542e12023-03-15 11:42:06 +0000317endif(VPP_BUILD_VPPINFRA_TESTS)
Damjan Marione3e35552021-05-06 17:34:49 +0200318
319set(test_files
Damjan Marionb47376f2023-03-15 11:42:06 +0000320 test/aes_cbc.c
Damjan Marion9caef2a2024-01-08 19:05:40 +0000321 test/aes_ctr.c
Damjan Marionb47376f2023-03-15 11:42:06 +0000322 test/aes_gcm.c
Damjan Marion003330c2023-04-12 12:19:05 +0000323 test/poly1305.c
Damjan Marionc3542e12023-03-15 11:42:06 +0000324 test/array_mask.c
325 test/compress.c
326 test/count_equal.c
Andrew Yourtchenkof39485f2023-03-14 09:28:35 +0000327 test/crc32c.c
Damjan Marionc3542e12023-03-15 11:42:06 +0000328 test/index_to_ptr.c
329 test/ip_csum.c
330 test/mask_compare.c
331 test/memcpy_x86_64.c
332 test/sha2.c
333 test/toeplitz.c
Damjan Marione3e35552021-05-06 17:34:49 +0200334)
335
Damjan Marionc3542e12023-03-15 11:42:06 +0000336add_vpp_executable(test_infra
Damjan Marione3e35552021-05-06 17:34:49 +0200337 SOURCES
Damjan Marionc3542e12023-03-15 11:42:06 +0000338 test/test.c
Damjan Marione3e35552021-05-06 17:34:49 +0200339 ${test_files}
340 LINK_LIBRARIES vppinfra
Tianyu Lib53b88a2023-03-21 06:49:38 +0000341 NO_INSTALL
Damjan Marione3e35552021-05-06 17:34:49 +0200342)
343
Damjan Marionc3542e12023-03-15 11:42:06 +0000344vpp_library_set_multiarch_sources(test_infra
Damjan Marione3e35552021-05-06 17:34:49 +0200345 SOURCES
346 ${test_files}
347)
348