blob: 200cfb1eded1fc396053600d5aff673f954e5723 [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
30 ${CMAKE_BINARY_DIR}/vppinfra/config.h
31)
32
33install(
34 FILES ${CMAKE_BINARY_DIR}/vppinfra/config.h
35 DESTINATION include/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
42set_source_files_properties( cJSON.c PROPERTIES
43 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
Dave Barach32dcd3b2019-07-08 12:25:38 -040051 bihash_all_vector.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020052 cpu.c
Dave Barach2c8e0022020-02-11 15:06:34 -050053 dlmalloc.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020054 elf.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020055 elog.c
56 error.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020057 fifo.c
58 format.c
59 graph.c
60 hash.c
61 heap.c
62 longjmp.S
63 macros.c
64 maplog.c
Damjan Marion57d1ec02020-09-16 21:15:44 +020065 mem.c
Damjan Marion0da81682020-12-22 14:58:56 +010066 mem_bulk.c
Dave Barach2c8e0022020-02-11 15:06:34 -050067 mem_dlmalloc.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020068 mhash.c
Gary Boona9ed6f72019-07-22 10:57:56 -040069 mpcap.c
Dave Barach3ae28732018-11-16 17:19:00 -050070 pcap.c
Damjan Marion68b4da62018-09-30 18:26:20 +020071 pmalloc.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020072 pool.c
73 ptclosure.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020074 random_buffer.c
Dave Barach2c8e0022020-02-11 15:06:34 -050075 random.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020076 random_isaac.c
Florin Coras672d5fc2019-04-15 17:28:51 -070077 rbtree.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020078 serialize.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020079 socket.c
80 std-formats.c
81 string.c
82 time.c
83 time_range.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020084 timing_wheel.c
Dave Barachd7b828f2020-04-01 16:54:00 -040085 tw_timer_2t_2w_512sl.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020086 tw_timer_16t_1w_2048sl.c
Dave Barach2c8e0022020-02-11 15:06:34 -050087 tw_timer_16t_2w_512sl.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020088 tw_timer_1t_3w_1024sl_ov.c
Dave Barach2c8e0022020-02-11 15:06:34 -050089 tw_timer_2t_1w_2048sl.c
90 tw_timer_4t_3w_256sl.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020091 unformat.c
92 unix-formats.c
93 unix-misc.c
94 valloc.c
95 vec.c
96 vector.c
Ole Troandf87f802020-11-18 19:17:48 +010097 cJSON.c
Damjan Marion612dd6a2018-07-30 12:45:07 +020098)
99
Damjan Marion4553c952018-08-26 11:04:40 +0200100set(VPPINFRA_HEADERS
Benoît Ganne9fb6d402019-04-15 15:28:21 +0200101 sanitizer.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200102 bihash_16_8.h
103 bihash_24_8.h
Matthew Smithf613a442021-01-20 08:59:10 -0600104 bihash_32_8.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200105 bihash_40_8.h
106 bihash_48_8.h
107 bihash_8_8.h
jiangxiaoming498889a2020-10-22 09:08:04 +0800108 bihash_8_16.h
109 bihash_24_16.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200110 bihash_template.c
111 bihash_template.h
112 bihash_vec8_8.h
113 bitmap.h
114 bitops.h
115 byte_order.h
116 cache.h
Dave Barach5f2cfb22019-05-20 10:28:57 -0400117 callback.h
Tom Seidenberg6c81f5a2020-07-10 15:49:03 +0000118 callback_data.h
Ole Troandf87f802020-11-18 19:17:48 +0100119 cJSON.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200120 clib_error.h
121 clib.h
122 cpu.h
123 crc32.h
124 dlist.h
125 dlmalloc.h
126 elf_clib.h
127 elf.h
128 elog.h
129 error_bootstrap.h
130 error.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200131 fifo.h
132 file.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200133 format.h
134 graph.h
135 hash.h
136 heap.h
137 lb_hash_hash.h
Florin Corasb957d802019-07-09 19:02:33 -0700138 llist.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200139 lock.h
140 longjmp.h
141 macros.h
142 maplog.h
143 math.h
144 memcpy_avx2.h
145 memcpy_avx512.h
146 memcpy_sse3.h
147 mem.h
148 mhash.h
Gary Boona9ed6f72019-07-22 10:57:56 -0400149 mpcap.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200150 os.h
Dave Barach3ae28732018-11-16 17:19:00 -0500151 pcap.h
152 pcap_funcs.h
Damjan Marion68b4da62018-09-30 18:26:20 +0200153 pmalloc.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200154 pool.h
155 ptclosure.h
156 random_buffer.h
157 random.h
158 random_isaac.h
Florin Coras672d5fc2019-04-15 17:28:51 -0700159 rbtree.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200160 serialize.h
Damjan Marioncf18ca92019-04-13 00:13:34 +0200161 sha2.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200162 smp.h
163 socket.h
164 sparse_vec.h
165 string.h
166 time.h
167 time_range.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200168 timing_wheel.h
Yu Sun6f5b72e2020-04-16 13:56:12 -0400169 tw_timer_2t_2w_512sl.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200170 tw_timer_16t_1w_2048sl.h
171 tw_timer_16t_2w_512sl.h
172 tw_timer_1t_3w_1024sl_ov.h
173 tw_timer_2t_1w_2048sl.h
174 tw_timer_4t_3w_256sl.h
175 tw_timer_template.c
176 tw_timer_template.h
177 types.h
Sirshak Das2f6d7bb2018-10-03 22:53:51 +0000178 atomics.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200179 unix.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200180 valloc.h
181 vec_bootstrap.h
182 vec.h
183 vector_altivec.h
184 vector_avx2.h
185 vector_avx512.h
186 vector_funcs.h
187 vector.h
188 vector_neon.h
189 vector_sse42.h
Benoît Gannebe7dbbb2020-04-24 14:37:10 +0200190 warnings.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200191 xxhash.h
Damjan Marion612dd6a2018-07-30 12:45:07 +0200192 linux/syscall.h
193 linux/sysfs.h
194)
195
Damjan Marion4dffd1c2018-09-03 12:30:36 +0200196if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
197 list(APPEND VPPINFRA_SRCS
198 elf_clib.c
199 linux/mem.c
200 linux/sysfs.c
201 )
202endif()
203
Nathan Moos67d7acd2021-01-15 15:50:59 -0800204option(VPP_USE_EXTERNAL_LIBEXECINFO "Use external libexecinfo (useful for non-glibc targets)." OFF)
205if(VPP_USE_EXTERNAL_LIBEXECINFO)
206 set(EXECINFO_LIB execinfo)
207endif()
Damjan Marion4553c952018-08-26 11:04:40 +0200208add_vpp_library(vppinfra
209 SOURCES ${VPPINFRA_SRCS}
Nathan Moos67d7acd2021-01-15 15:50:59 -0800210 LINK_LIBRARIES m ${EXECINFO_LIB}
Damjan Marion4553c952018-08-26 11:04:40 +0200211 INSTALL_HEADERS ${VPPINFRA_HEADERS}
Damjan Marion43b06062018-08-29 22:20:45 +0200212 COMPONENT libvppinfra
Damjan Marionaf7892c2020-10-22 14:23:47 +0200213 LTO
Damjan Marion4553c952018-08-26 11:04:40 +0200214)
215
216##############################################################################
217# vppinfra headers
218##############################################################################
Damjan Marion612dd6a2018-07-30 12:45:07 +0200219option(VPP_BUILD_VPPINFRA_TESTS "Build vppinfra tests." OFF)
220if(VPP_BUILD_VPPINFRA_TESTS)
Damjan Marion4553c952018-08-26 11:04:40 +0200221 foreach(test
Damjan Marion612dd6a2018-07-30 12:45:07 +0200222 bihash_vec88
Damjan Marion612dd6a2018-07-30 12:45:07 +0200223 dlist
224 elf
225 elog
226 fifo
Damjan Marion612dd6a2018-07-30 12:45:07 +0200227 format
228 fpool
229 hash
230 heap
231 longjmp
232 macros
233 maplog
Damjan Marion68b4da62018-09-30 18:26:20 +0200234 pmalloc
Damjan Marion612dd6a2018-07-30 12:45:07 +0200235 pool_iterate
236 ptclosure
237 random
238 random_isaac
jaszha0325ab6cf2019-07-01 17:20:52 -0500239 rwlock
Damjan Marion612dd6a2018-07-30 12:45:07 +0200240 serialize
Damjan Marion612dd6a2018-07-30 12:45:07 +0200241 socket
jaszha039a4e6312019-06-19 14:07:05 -0500242 spinlock
Damjan Marion612dd6a2018-07-30 12:45:07 +0200243 time
244 time_range
Damjan Marion612dd6a2018-07-30 12:45:07 +0200245 tw_timer
246 valloc
247 vec
Damjan Marion612dd6a2018-07-30 12:45:07 +0200248 )
Damjan Marion4553c952018-08-26 11:04:40 +0200249 add_vpp_executable(test_${test}
250 SOURCES test_${test}.c
Florin Coras4f944642019-08-01 10:54:06 -0700251 LINK_LIBRARIES vppinfra pthread
Damjan Marion4553c952018-08-26 11:04:40 +0200252 )
Damjan Marion612dd6a2018-07-30 12:45:07 +0200253 endforeach()
254
Dave Barach053d0932020-04-22 10:02:31 -0400255 foreach(test bihash_template)
Damjan Marion4553c952018-08-26 11:04:40 +0200256 add_vpp_executable(test_${test}
257 SOURCES test_${test}.c
258 LINK_LIBRARIES vppinfra Threads::Threads
259 )
260 endforeach()
Damjan Marion612dd6a2018-07-30 12:45:07 +0200261endif(VPP_BUILD_VPPINFRA_TESTS)