blob: ad942a258e339ba0704027cd718f4bc3e1edf0da [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##############################################################################
17# Generate vppinfra/config.h
18##############################################################################
Damjan Marionedc43872018-09-02 11:16:00 +020019set(LOG2_CACHE_LINE_BYTES ${VPP_LOG2_CACHE_LINE_SIZE})
Damjan Marion612dd6a2018-07-30 12:45:07 +020020
Dave Barach98bd7572020-02-10 10:16:40 -050021option(VPP_VECTOR_GROW_BY_ONE "Vectors grow by one, instead of 3/2" OFF)
22if(VPP_VECTOR_GROW_BY_ONE)
23 set(VECTOR_GROW_BY_ONE 1)
24else(VPP_VECTOR_GROW_BY_ONE)
25 set(VECTOR_GROW_BY_ONE 0)
26endif(VPP_VECTOR_GROW_BY_ONE)
27
Damjan Marion612dd6a2018-07-30 12:45:07 +020028configure_file(
29 ${CMAKE_SOURCE_DIR}/vppinfra/config.h.in
Damjan Marion88b2e362021-04-29 18:47:25 +020030 ${CMAKE_CURRENT_BINARY_DIR}/config.h
Damjan Marion612dd6a2018-07-30 12:45:07 +020031)
32
33install(
Damjan Marion88b2e362021-04-29 18:47:25 +020034 FILES ${CMAKE_CURRENT_BINARY_DIR}/config.h
Nick Browne3cf4d02021-09-15 14:25:40 +010035 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/vppinfra
Damjan Marion43b06062018-08-29 22:20:45 +020036 COMPONENT vpp-dev
Damjan Marion612dd6a2018-07-30 12:45:07 +020037)
38
Damjan Mariondae1c7e2020-10-17 13:32:25 +020039add_definitions(-fvisibility=hidden)
40
Ole Troandf87f802020-11-18 19:17:48 +010041# Ensure symbols from cJSON are exported
Filip Tehlar36217e32021-07-23 08:51:10 +000042set_source_files_properties( cJSON.c jsonformat.c PROPERTIES
Ole Troandf87f802020-11-18 19:17:48 +010043 COMPILE_DEFINITIONS " CJSON_API_VISIBILITY " )
44
45
Damjan Marion612dd6a2018-07-30 12:45:07 +020046##############################################################################
47# vppinfra sources
48##############################################################################
49set(VPPINFRA_SRCS
Damjan Marion612dd6a2018-07-30 12:45:07 +020050 backtrace.c
Damjan Marion7f57f502021-04-15 16:13:20 +020051 bitmap.c
Dave Barach32dcd3b2019-07-08 12:25:38 -040052 bihash_all_vector.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020053 cpu.c
Dave Barach2c8e0022020-02-11 15:06:34 -050054 dlmalloc.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020055 elf.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020056 elog.c
57 error.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020058 fifo.c
59 format.c
Nathan Skrzypczak0e658402021-09-17 11:51:46 +020060 format_table.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020061 hash.c
62 heap.c
Damjan Marion94100532020-11-06 23:25:57 +010063 interrupt.c
Filip Tehlar36217e32021-07-23 08:51:10 +000064 jsonformat.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020065 longjmp.S
66 macros.c
67 maplog.c
Damjan Marion57d1ec02020-09-16 21:15:44 +020068 mem.c
Damjan Marion0da81682020-12-22 14:58:56 +010069 mem_bulk.c
Dave Barach2c8e0022020-02-11 15:06:34 -050070 mem_dlmalloc.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020071 mhash.c
Gary Boona9ed6f72019-07-22 10:57:56 -040072 mpcap.c
Dave Barach3ae28732018-11-16 17:19:00 -050073 pcap.c
Damjan Mariond5045e62022-04-06 21:16:37 +020074 perfmon/bundle_default.c
75 perfmon/bundle_core_power.c
76 perfmon/perfmon.c
Damjan Marion68b4da62018-09-30 18:26:20 +020077 pmalloc.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020078 pool.c
79 ptclosure.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020080 random_buffer.c
Dave Barach2c8e0022020-02-11 15:06:34 -050081 random.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020082 random_isaac.c
Florin Coras672d5fc2019-04-15 17:28:51 -070083 rbtree.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020084 serialize.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020085 socket.c
86 std-formats.c
87 string.c
88 time.c
89 time_range.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020090 timing_wheel.c
Dave Barachd7b828f2020-04-01 16:54:00 -040091 tw_timer_2t_2w_512sl.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020092 tw_timer_16t_1w_2048sl.c
Dave Barach2c8e0022020-02-11 15:06:34 -050093 tw_timer_16t_2w_512sl.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020094 tw_timer_1t_3w_1024sl_ov.c
Dave Barach2c8e0022020-02-11 15:06:34 -050095 tw_timer_2t_1w_2048sl.c
96 tw_timer_4t_3w_256sl.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020097 unformat.c
98 unix-formats.c
99 unix-misc.c
100 valloc.c
101 vec.c
102 vector.c
Damjan Marion2e5921b2021-11-28 22:57:15 +0100103 vector/toeplitz.c
Ole Troandf87f802020-11-18 19:17:48 +0100104 cJSON.c
Damjan Marion612dd6a2018-07-30 12:45:07 +0200105)
106
Damjan Marion4553c952018-08-26 11:04:40 +0200107set(VPPINFRA_HEADERS
Damjan Mariond51250f2021-12-22 12:22:59 +0100108 bihash_12_4.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200109 bihash_16_8.h
110 bihash_24_8.h
Matthew Smithf613a442021-01-20 08:59:10 -0600111 bihash_32_8.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200112 bihash_40_8.h
113 bihash_48_8.h
114 bihash_8_8.h
jiangxiaoming498889a2020-10-22 09:08:04 +0800115 bihash_8_16.h
116 bihash_24_16.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200117 bihash_template.c
118 bihash_template.h
119 bihash_vec8_8.h
120 bitmap.h
121 bitops.h
122 byte_order.h
123 cache.h
Dave Barach5f2cfb22019-05-20 10:28:57 -0400124 callback.h
Tom Seidenberg6c81f5a2020-07-10 15:49:03 +0000125 callback_data.h
Ole Troandf87f802020-11-18 19:17:48 +0100126 cJSON.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200127 clib_error.h
128 clib.h
129 cpu.h
130 crc32.h
Damjan Marionb47376f2023-03-15 11:42:06 +0000131 crypto/sha2.h
132 crypto/ghash.h
133 crypto/aes.h
134 crypto/aes_cbc.h
135 crypto/aes_gcm.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200136 dlist.h
137 dlmalloc.h
138 elf_clib.h
139 elf.h
140 elog.h
141 error_bootstrap.h
142 error.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200143 fifo.h
144 file.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200145 format.h
Nathan Skrzypczak0e658402021-09-17 11:51:46 +0200146 format_table.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200147 hash.h
148 heap.h
Damjan Marion94100532020-11-06 23:25:57 +0100149 interrupt.h
Filip Tehlar36217e32021-07-23 08:51:10 +0000150 jsonformat.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200151 lb_hash_hash.h
Florin Corasb957d802019-07-09 19:02:33 -0700152 llist.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200153 lock.h
154 longjmp.h
155 macros.h
156 maplog.h
157 math.h
Damjan Marion856d0622021-04-21 21:11:35 +0200158 memcpy.h
Damjan Marion56f54af2021-10-12 20:30:02 +0200159 memcpy_x86_64.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200160 mem.h
161 mhash.h
Gary Boona9ed6f72019-07-22 10:57:56 -0400162 mpcap.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200163 os.h
Dave Barach3ae28732018-11-16 17:19:00 -0500164 pcap.h
165 pcap_funcs.h
BenoƮt Ganne5527a782022-01-18 15:56:41 +0100166 pcg.h
Damjan Mariond5045e62022-04-06 21:16:37 +0200167 perfmon/perfmon.h
Damjan Marion68b4da62018-09-30 18:26:20 +0200168 pmalloc.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200169 pool.h
170 ptclosure.h
171 random_buffer.h
172 random.h
173 random_isaac.h
Florin Coras672d5fc2019-04-15 17:28:51 -0700174 rbtree.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200175 serialize.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200176 smp.h
177 socket.h
178 sparse_vec.h
179 string.h
180 time.h
181 time_range.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200182 timing_wheel.h
Yu Sun6f5b72e2020-04-16 13:56:12 -0400183 tw_timer_2t_2w_512sl.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200184 tw_timer_16t_1w_2048sl.h
185 tw_timer_16t_2w_512sl.h
186 tw_timer_1t_3w_1024sl_ov.h
187 tw_timer_2t_1w_2048sl.h
188 tw_timer_4t_3w_256sl.h
189 tw_timer_template.c
190 tw_timer_template.h
191 types.h
Sirshak Das2f6d7bb2018-10-03 22:53:51 +0000192 atomics.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200193 unix.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200194 valloc.h
195 vec_bootstrap.h
196 vec.h
197 vector_altivec.h
198 vector_avx2.h
199 vector_avx512.h
Mohsin Kazmi0ec7dad2021-07-15 10:34:36 +0000200 vector/array_mask.h
Damjan Marion4c276f02021-11-06 13:17:31 +0100201 vector/compress.h
202 vector/count_equal.h
Damjan Marion4c53ff42021-10-28 23:03:04 +0200203 vector/index_to_ptr.h
Damjan Marionaa63bc62021-11-08 11:18:30 +0000204 vector/ip_csum.h
Damjan Marion4c276f02021-11-06 13:17:31 +0100205 vector/mask_compare.h
Damjan Marion2e5921b2021-11-28 22:57:15 +0100206 vector/toeplitz.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200207 vector.h
208 vector_neon.h
209 vector_sse42.h
BenoƮt Gannebe7dbbb2020-04-24 14:37:10 +0200210 warnings.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200211 xxhash.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200212 linux/sysfs.h
213)
214
Damjan Marion4dffd1c2018-09-03 12:30:36 +0200215if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
216 list(APPEND VPPINFRA_SRCS
217 elf_clib.c
218 linux/mem.c
219 linux/sysfs.c
Nathan Skrzypczak4cef6de2021-07-19 18:21:43 +0200220 linux/netns.c
Damjan Marion4dffd1c2018-09-03 12:30:36 +0200221 )
222endif()
223
Nathan Moos67d7acd2021-01-15 15:50:59 -0800224option(VPP_USE_EXTERNAL_LIBEXECINFO "Use external libexecinfo (useful for non-glibc targets)." OFF)
225if(VPP_USE_EXTERNAL_LIBEXECINFO)
226 set(EXECINFO_LIB execinfo)
227endif()
Damjan Marion4553c952018-08-26 11:04:40 +0200228add_vpp_library(vppinfra
229 SOURCES ${VPPINFRA_SRCS}
Nathan Moos67d7acd2021-01-15 15:50:59 -0800230 LINK_LIBRARIES m ${EXECINFO_LIB}
Damjan Marion4553c952018-08-26 11:04:40 +0200231 INSTALL_HEADERS ${VPPINFRA_HEADERS}
Damjan Marion43b06062018-08-29 22:20:45 +0200232 COMPONENT libvppinfra
Damjan Marionaf7892c2020-10-22 14:23:47 +0200233 LTO
Damjan Marion4553c952018-08-26 11:04:40 +0200234)
235
236##############################################################################
237# vppinfra headers
238##############################################################################
Damjan Marion612dd6a2018-07-30 12:45:07 +0200239option(VPP_BUILD_VPPINFRA_TESTS "Build vppinfra tests." OFF)
240if(VPP_BUILD_VPPINFRA_TESTS)
Damjan Marion4553c952018-08-26 11:04:40 +0200241 foreach(test
Damjan Marion612dd6a2018-07-30 12:45:07 +0200242 bihash_vec88
Damjan Marion612dd6a2018-07-30 12:45:07 +0200243 dlist
244 elf
245 elog
246 fifo
Damjan Marion612dd6a2018-07-30 12:45:07 +0200247 format
248 fpool
249 hash
250 heap
251 longjmp
252 macros
253 maplog
Damjan Marion68b4da62018-09-30 18:26:20 +0200254 pmalloc
Vladislav Grishenko8a4b7972022-09-28 13:37:02 +0500255 pool_alloc
Damjan Marion612dd6a2018-07-30 12:45:07 +0200256 pool_iterate
257 ptclosure
258 random
259 random_isaac
jaszha0325ab6cf2019-07-01 17:20:52 -0500260 rwlock
Damjan Marion612dd6a2018-07-30 12:45:07 +0200261 serialize
Damjan Marion612dd6a2018-07-30 12:45:07 +0200262 socket
jaszha039a4e6312019-06-19 14:07:05 -0500263 spinlock
Damjan Marion612dd6a2018-07-30 12:45:07 +0200264 time
265 time_range
Damjan Marion612dd6a2018-07-30 12:45:07 +0200266 tw_timer
267 valloc
268 vec
Damjan Marion612dd6a2018-07-30 12:45:07 +0200269 )
Damjan Marion4553c952018-08-26 11:04:40 +0200270 add_vpp_executable(test_${test}
271 SOURCES test_${test}.c
Florin Coras4f944642019-08-01 10:54:06 -0700272 LINK_LIBRARIES vppinfra pthread
Damjan Marion4553c952018-08-26 11:04:40 +0200273 )
Damjan Marion612dd6a2018-07-30 12:45:07 +0200274 endforeach()
275
Dave Barach053d0932020-04-22 10:02:31 -0400276 foreach(test bihash_template)
Damjan Marion4553c952018-08-26 11:04:40 +0200277 add_vpp_executable(test_${test}
278 SOURCES test_${test}.c
279 LINK_LIBRARIES vppinfra Threads::Threads
280 )
281 endforeach()
Damjan Marionc3542e12023-03-15 11:42:06 +0000282endif(VPP_BUILD_VPPINFRA_TESTS)
Damjan Marione3e35552021-05-06 17:34:49 +0200283
284set(test_files
Damjan Marionb47376f2023-03-15 11:42:06 +0000285 test/aes_cbc.c
286 test/aes_gcm.c
Damjan Marionc3542e12023-03-15 11:42:06 +0000287 test/array_mask.c
288 test/compress.c
289 test/count_equal.c
Andrew Yourtchenkof39485f2023-03-14 09:28:35 +0000290 test/crc32c.c
Damjan Marionc3542e12023-03-15 11:42:06 +0000291 test/index_to_ptr.c
292 test/ip_csum.c
293 test/mask_compare.c
294 test/memcpy_x86_64.c
295 test/sha2.c
296 test/toeplitz.c
Damjan Marione3e35552021-05-06 17:34:49 +0200297)
298
Damjan Marionc3542e12023-03-15 11:42:06 +0000299add_vpp_executable(test_infra
Damjan Marione3e35552021-05-06 17:34:49 +0200300 SOURCES
Damjan Marionc3542e12023-03-15 11:42:06 +0000301 test/test.c
Damjan Marione3e35552021-05-06 17:34:49 +0200302 ${test_files}
303 LINK_LIBRARIES vppinfra
Tianyu Lib53b88a2023-03-21 06:49:38 +0000304 NO_INSTALL
Damjan Marione3e35552021-05-06 17:34:49 +0200305)
306
Damjan Marionc3542e12023-03-15 11:42:06 +0000307vpp_library_set_multiarch_sources(test_infra
Damjan Marione3e35552021-05-06 17:34:49 +0200308 SOURCES
309 ${test_files}
310)
311