octeon: add clear counters for port and queues
[vpp.git] / src / vppinfra / CMakeLists.txt
1 # 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
14 enable_language(ASM)
15
16 ##############################################################################
17 # Generate vppinfra/config.h
18 ##############################################################################
19 set(LOG2_CACHE_LINE_BYTES ${VPP_LOG2_CACHE_LINE_SIZE})
20
21 option(VPP_VECTOR_GROW_BY_ONE "Vectors grow by one, instead of 3/2" OFF)
22 if(VPP_VECTOR_GROW_BY_ONE)
23   set(VECTOR_GROW_BY_ONE 1)
24 else(VPP_VECTOR_GROW_BY_ONE)
25   set(VECTOR_GROW_BY_ONE 0)
26 endif(VPP_VECTOR_GROW_BY_ONE)
27
28 configure_file(
29   ${CMAKE_SOURCE_DIR}/vppinfra/config.h.in
30   ${CMAKE_CURRENT_BINARY_DIR}/config.h
31 )
32
33 install(
34   FILES ${CMAKE_CURRENT_BINARY_DIR}/config.h
35   DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/vppinfra
36   COMPONENT vpp-dev
37 )
38
39 add_definitions(-fvisibility=hidden)
40
41 # Ensure symbols from cJSON are exported
42 set_source_files_properties( cJSON.c jsonformat.c PROPERTIES
43   COMPILE_DEFINITIONS " CJSON_API_VISIBILITY " )
44
45
46 ##############################################################################
47 # vppinfra sources
48 ##############################################################################
49 set(VPPINFRA_SRCS
50   backtrace.c
51   bitmap.c
52   bihash_all_vector.c
53   cpu.c
54   dlmalloc.c
55   elf.c
56   elog.c
57   error.c
58   fifo.c
59   format.c
60   format_table.c
61   hash.c
62   heap.c
63   interrupt.c
64   jsonformat.c
65   longjmp.S
66   macros.c
67   maplog.c
68   mem.c
69   mem_bulk.c
70   mem_dlmalloc.c
71   mhash.c
72   mpcap.c
73   pcap.c
74   pmalloc.c
75   pool.c
76   ptclosure.c
77   random_buffer.c
78   random.c
79   random_isaac.c
80   rbtree.c
81   serialize.c
82   socket.c
83   std-formats.c
84   string.c
85   time.c
86   time_range.c
87   timing_wheel.c
88   tw_timer_2t_2w_512sl.c
89   tw_timer_16t_1w_2048sl.c
90   tw_timer_16t_2w_512sl.c
91   tw_timer_1t_3w_1024sl_ov.c
92   tw_timer_2t_1w_2048sl.c
93   tw_timer_4t_3w_256sl.c
94   unformat.c
95   unix-formats.c
96   unix-misc.c
97   valloc.c
98   vec.c
99   vector.c
100   vector/toeplitz.c
101   cJSON.c
102 )
103
104 set(VPPINFRA_HEADERS
105   bihash_12_4.h
106   bihash_16_8.h
107   bihash_24_8.h
108   bihash_32_8.h
109   bihash_40_8.h
110   bihash_48_8.h
111   bihash_8_8.h
112   bihash_8_16.h
113   bihash_24_16.h
114   bihash_template.c
115   bihash_template.h
116   bihash_vec8_8.h
117   bitmap.h
118   bitops.h
119   byte_order.h
120   cache.h
121   callback.h
122   callback_data.h
123   cJSON.h
124   clib_error.h
125   clib.h
126   cpu.h
127   crc32.h
128   crypto/sha2.h
129   crypto/ghash.h
130   crypto/aes.h
131   crypto/aes_cbc.h
132   crypto/aes_ctr.h
133   crypto/aes_gcm.h
134   crypto/poly1305.h
135   dlist.h
136   dlmalloc.h
137   elf_clib.h
138   elf.h
139   elog.h
140   error_bootstrap.h
141   error.h
142   fifo.h
143   file.h
144   format.h
145   format_table.h
146   hash.h
147   heap.h
148   interrupt.h
149   jsonformat.h
150   lb_hash_hash.h
151   llist.h
152   lock.h
153   longjmp.h
154   macros.h
155   maplog.h
156   math.h
157   memcpy.h
158   memcpy_x86_64.h
159   mem.h
160   mhash.h
161   mpcap.h
162   os.h
163   pcap.h
164   pcap_funcs.h
165   pcg.h
166   perfmon/perfmon.h
167   pmalloc.h
168   pool.h
169   ptclosure.h
170   random_buffer.h
171   random.h
172   random_isaac.h
173   rbtree.h
174   serialize.h
175   smp.h
176   socket.h
177   sparse_vec.h
178   string.h
179   time.h
180   time_range.h
181   timing_wheel.h
182   tw_timer_2t_2w_512sl.h
183   tw_timer_16t_1w_2048sl.h
184   tw_timer_16t_2w_512sl.h
185   tw_timer_1t_3w_1024sl_ov.h
186   tw_timer_2t_1w_2048sl.h
187   tw_timer_4t_3w_256sl.h
188   tw_timer_template.c
189   tw_timer_template.h
190   types.h
191   atomics.h
192   unix.h
193   valloc.h
194   vec_bootstrap.h
195   vec.h
196   vector_altivec.h
197   vector_avx2.h
198   vector_avx512.h
199   vector/array_mask.h
200   vector/compress.h
201   vector/count_equal.h
202   vector/index_to_ptr.h
203   vector/ip_csum.h
204   vector/mask_compare.h
205   vector/toeplitz.h
206   vector.h
207   vector_neon.h
208   vector_sse42.h
209   warnings.h
210   xxhash.h
211   linux/sysfs.h
212 )
213
214 if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
215   list(APPEND VPPINFRA_SRCS
216     elf_clib.c
217     linux/mem.c
218     linux/sysfs.c
219     linux/netns.c
220 # TODO: Temporarily don't build perfmon on non-Linux
221     perfmon/bundle_default.c
222     perfmon/bundle_core_power.c
223     perfmon/perfmon.c
224    )
225 elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD")
226   list(APPEND VPPINFRA_SRCS
227     elf_clib.c
228     freebsd/mem.c
229    )
230 endif()
231
232 if("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD")
233   option(VPP_USE_EXTERNAL_LIBEXECINFO "Use external libexecinfo (useful for non-glibc targets)." ON)
234 else()
235   option(VPP_USE_EXTERNAL_LIBEXECINFO "Use external libexecinfo (useful for non-glibc targets)." OFF)
236 endif()
237
238 if(VPP_USE_EXTERNAL_LIBEXECINFO)
239   set(EXECINFO_LIB execinfo)
240 endif()
241 add_vpp_library(vppinfra
242   SOURCES ${VPPINFRA_SRCS}
243   LINK_LIBRARIES m ${EXECINFO_LIB}
244   INSTALL_HEADERS ${VPPINFRA_HEADERS}
245   COMPONENT libvppinfra
246   LTO
247 )
248
249 ##############################################################################
250 # vppinfra headers
251 ##############################################################################
252 option(VPP_BUILD_VPPINFRA_TESTS "Build vppinfra tests." OFF)
253 if(VPP_BUILD_VPPINFRA_TESTS)
254   foreach(test
255     bihash_vec88
256     dlist
257     elf
258     elog
259     fifo
260     format
261     fpool
262     hash
263     heap
264     interrupt
265     longjmp
266     macros
267     maplog
268     mhash
269     pmalloc
270     pool_alloc
271     pool_iterate
272     ptclosure
273     random
274     random_isaac
275     rwlock
276     serialize
277     socket
278     spinlock
279     time
280     time_range
281     tw_timer
282     valloc
283     vec
284   )
285     add_vpp_executable(test_${test}
286       SOURCES test_${test}.c
287       LINK_LIBRARIES vppinfra pthread
288       )
289   endforeach()
290
291   foreach(test bihash_template)
292     add_vpp_executable(test_${test}
293       SOURCES test_${test}.c
294       LINK_LIBRARIES vppinfra Threads::Threads
295       )
296   endforeach()
297 endif(VPP_BUILD_VPPINFRA_TESTS)
298
299 set(test_files
300   test/aes_cbc.c
301   test/aes_ctr.c
302   test/aes_gcm.c
303   test/poly1305.c
304   test/array_mask.c
305   test/compress.c
306   test/count_equal.c
307   test/crc32c.c
308   test/index_to_ptr.c
309   test/ip_csum.c
310   test/mask_compare.c
311   test/memcpy_x86_64.c
312   test/sha2.c
313   test/toeplitz.c
314 )
315
316 add_vpp_executable(test_infra
317   SOURCES
318   test/test.c
319   ${test_files}
320   LINK_LIBRARIES vppinfra
321   NO_INSTALL
322 )
323
324 vpp_library_set_multiarch_sources(test_infra
325   SOURCES
326   ${test_files}
327 )
328