diff options
Diffstat (limited to 'src/cmake')
-rw-r--r-- | src/cmake/VPPConfig.cmake | 1 | ||||
-rw-r--r-- | src/cmake/api.cmake | 8 | ||||
-rw-r--r-- | src/cmake/ccache.cmake | 4 | ||||
-rw-r--r-- | src/cmake/cpu.cmake | 79 | ||||
-rw-r--r-- | src/cmake/library.cmake | 49 | ||||
-rw-r--r-- | src/cmake/pack.cmake | 5 | ||||
-rw-r--r-- | src/cmake/platform/octeon10.cmake | 4 | ||||
-rw-r--r-- | src/cmake/plugin.cmake | 12 |
8 files changed, 138 insertions, 24 deletions
diff --git a/src/cmake/VPPConfig.cmake b/src/cmake/VPPConfig.cmake index 2de35d1f7ef..6f1b530625a 100644 --- a/src/cmake/VPPConfig.cmake +++ b/src/cmake/VPPConfig.cmake @@ -20,6 +20,7 @@ find_program(VPP_VAPI_CPP_GEN vapi_cpp_gen.py) if(VPP_INCLUDE_DIR AND VPP_APIGEN) include_directories (${VPP_INCLUDE_DIR}) + include_directories (${VPP_INCLUDE_DIR}/vpp_plugins) else() message(FATAL_ERROR "VPP headers, libraries and/or tools not found") endif() diff --git a/src/cmake/api.cmake b/src/cmake/api.cmake index 831c2b1e32d..10e89d77594 100644 --- a/src/cmake/api.cmake +++ b/src/cmake/api.cmake @@ -64,13 +64,13 @@ function(vpp_generate_api_json_header file dir component) add_custom_command (OUTPUT ${output_name} COMMAND mkdir -p ${output_dir} COMMAND ${PYENV} ${VPP_APIGEN} - ARGS ${includedir} --includedir ${CMAKE_SOURCE_DIR} --input ${CMAKE_CURRENT_SOURCE_DIR}/${file} JSON --output ${output_name} + ARGS ${includedir} --includedir ${CMAKE_SOURCE_DIR} --input ${CMAKE_CURRENT_SOURCE_DIR}/${file} JSON --outputdir ${output_dir} --output ${output_name} DEPENDS ${VPP_APIGEN} ${CMAKE_CURRENT_SOURCE_DIR}/${file} COMMENT "Generating API header ${output_name}" ) install( FILES ${output_name} - DESTINATION share/vpp/api/${dir}/ + DESTINATION ${CMAKE_INSTALL_DATADIR}/vpp/api/${dir}/ COMPONENT ${component} ) endfunction() @@ -101,7 +101,7 @@ function(vpp_generate_vapi_c_header f) ) install( FILES ${output_name} - DESTINATION include/vapi + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/vapi COMPONENT vpp-dev ) endfunction () @@ -128,7 +128,7 @@ function (vpp_generate_vapi_cpp_header f) ) install( FILES ${output_name} - DESTINATION include/vapi + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/vapi COMPONENT vpp-dev ) endfunction () diff --git a/src/cmake/ccache.cmake b/src/cmake/ccache.cmake index 058a0f3d85a..a7b395bc6f9 100644 --- a/src/cmake/ccache.cmake +++ b/src/cmake/ccache.cmake @@ -20,8 +20,8 @@ if(VPP_USE_CCACHE) message(STATUS "Looking for ccache") if(CCACHE_FOUND) message(STATUS "Looking for ccache - found") - set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) - set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) + set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_FOUND}) + set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_FOUND}) else(CCACHE_FOUND) message(STATUS "Looking for ccache - not found") endif(CCACHE_FOUND) diff --git a/src/cmake/cpu.cmake b/src/cmake/cpu.cmake index dbe0f17b94f..25e966dcf7a 100644 --- a/src/cmake/cpu.cmake +++ b/src/cmake/cpu.cmake @@ -24,16 +24,21 @@ endmacro() ############################################################################## # Cache line size ############################################################################## -if(DEFINED VPP_CACHE_LINE_SIZE) - # Cache line size assigned via cmake args -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)") - set(VPP_CACHE_LINE_SIZE 128) + +if(DEFINED VPP_PLATFORM_CACHE_LINE_SIZE) + set(VPP_CACHE_LINE_SIZE ${VPP_PLATFORM_CACHE_LINE_SIZE}) else() - set(VPP_CACHE_LINE_SIZE 64) -endif() + if(DEFINED VPP_CACHE_LINE_SIZE) + # Cache line size assigned via cmake args + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)") + set(VPP_CACHE_LINE_SIZE 128) + else() + set(VPP_CACHE_LINE_SIZE 64) + endif() -set(VPP_CACHE_LINE_SIZE ${VPP_CACHE_LINE_SIZE} - CACHE STRING "Target CPU cache line size") + set(VPP_CACHE_LINE_SIZE ${VPP_CACHE_LINE_SIZE} + CACHE STRING "Target CPU cache line size") +endif() set_log2_cacheline_size(VPP_LOG2_CACHE_LINE_SIZE ${VPP_CACHE_LINE_SIZE}) @@ -56,6 +61,11 @@ endif() ############################################################################## # CPU optimizations and multiarch support ############################################################################## + +if(NOT DEFINED VPP_PLATFORM) + option(VPP_BUILD_NATIVE_ONLY "Build only for native CPU." OFF) +endif() + macro(add_vpp_march_variant v) cmake_parse_arguments(ARG "OFF" @@ -93,6 +103,7 @@ macro(add_vpp_march_variant v) endif() if (VPP_MARCH_VARIANT_${uv}) list(APPEND MARCH_VARIANTS "${v}\;${fs}") + list(APPEND MARCH_VARIANTS_NAMES "${v}") else() list(APPEND MARCH_VARIANTS_DISABLED "${v}\;${fs}") endif() @@ -100,7 +111,26 @@ macro(add_vpp_march_variant v) endif() endmacro() -if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*") +if(DEFINED VPP_PLATFORM) + if(DEFINED VPP_PLATFORM_MARCH_FLAGS) + set(VPP_DEFAULT_MARCH_FLAGS ${VPP_PLATFORM_MARCH_FLAGS}) + check_c_compiler_flag(${VPP_DEFAULT_MARCH_FLAGS} compiler_flag_march) + if(NOT compiler_flag_march) + message(FATAL_ERROR "platform build with ${VPP_DEFAULT_MARCH_FLAGS} is not supported by compiler") + endif() + else() + set(VPP_DEFAULT_MARCH_FLAGS "") + endif() + set(MARCH_VARIANTS_NAMES "platform-only") +elseif(VPP_BUILD_NATIVE_ONLY) + set(VPP_BUILD_NATIVE_ARCH "native" CACHE STRING "native CPU -march= value.") + set(VPP_DEFAULT_MARCH_FLAGS -march=${VPP_BUILD_NATIVE_ARCH}) + check_c_compiler_flag(${VPP_DEFAULT_MARCH_FLAGS} compiler_flag_march) + if(NOT compiler_flag_march) + message(FATAL_ERROR "Native-only build with ${VPP_DEFAULT_MARCH_FLAGS} is not supported by compiler") + endif() + set(MARCH_VARIANTS_NAMES "native-only") +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*") set(VPP_DEFAULT_MARCH_FLAGS -march=corei7 -mtune=corei7-avx) add_vpp_march_variant(hsw @@ -112,6 +142,21 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*") OFF ) + add_vpp_march_variant(adl + FLAGS -march=alderlake -mtune=alderlake -mprefer-vector-width=256 + OFF + ) + + add_vpp_march_variant(scalar + FLAGS -march=core2 -mno-mmx -mno-sse + OFF + ) + + add_vpp_march_variant(znver3 + FLAGS -march=znver3 -mtune=znver3 -mprefer-vector-width=256 + OFF + ) + if (GNU_ASSEMBLER_AVX512_BUG) message(WARNING "AVX-512 multiarch variant(s) disabled due to GNU Assembler bug") else() @@ -122,6 +167,16 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*") add_vpp_march_variant(icl FLAGS -march=icelake-client -mtune=icelake-client -mprefer-vector-width=512 ) + + add_vpp_march_variant(spr + FLAGS -march=sapphirerapids -mtune=sapphirerapids -mprefer-vector-width=512 + OFF + ) + + add_vpp_march_variant(znver4 + FLAGS -march=znver4 -mtune=znver4 -mprefer-vector-width=512 + OFF + ) endif() elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)") set(VPP_DEFAULT_MARCH_FLAGS -march=armv8-a+crc) @@ -155,6 +210,12 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)") N_PREFETCHES 6 CACHE_PREFETCH_BYTES 64 ) + add_vpp_march_variant(neoversen2 + FLAGS -march=armv9-a+crypto -mtune=neoverse-n2 + N_PREFETCHES 6 + CACHE_PREFETCH_BYTES 64 + OFF + ) endif() macro(vpp_library_set_multiarch_sources lib) diff --git a/src/cmake/library.cmake b/src/cmake/library.cmake index d19eb3c80cc..a06a795c69f 100644 --- a/src/cmake/library.cmake +++ b/src/cmake/library.cmake @@ -41,8 +41,10 @@ macro(add_vpp_library lib) endif() install( TARGETS ${lib} - DESTINATION ${VPP_LIBRARY_DIR} - COMPONENT ${ARG_COMPONENT} + LIBRARY + DESTINATION ${VPP_LIBRARY_DIR} + COMPONENT ${ARG_COMPONENT} + NAMELINK_COMPONENT ${ARG_COMPONENT}-dev ) if (ARG_LTO AND VPP_USE_LTO) @@ -51,6 +53,9 @@ macro(add_vpp_library lib) target_compile_options (${lib} PRIVATE "-ffunction-sections") target_compile_options (${lib} PRIVATE "-fdata-sections") target_link_libraries (${lib} "-Wl,--gc-sections") + if(compiler_flag_no_stringop_overflow) + target_link_libraries (${lib} "-Wno-stringop-overflow") + endif() endif() if(ARG_MULTIARCH_SOURCES) @@ -67,7 +72,7 @@ macro(add_vpp_library lib) ${CMAKE_CURRENT_BINARY_DIR}/${file}_types.h ${CMAKE_CURRENT_BINARY_DIR}/${file}_tojson.h ${CMAKE_CURRENT_BINARY_DIR}/${file}_fromjson.h - DESTINATION include/${lib}/${dir} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${lib}/${dir} COMPONENT vpp-dev ) endforeach() @@ -77,6 +82,10 @@ macro(add_vpp_library lib) add_dependencies(${lo} api_headers) endif() + if(VPP_EXTERNAL_PROJECT AND ARG_API_FILES) + add_dependencies(${lo} ${lib}_api_headers) + endif() + if(ARG_DEPENDS) add_dependencies(${lo} ${ARG_DEPENDS}) endif() @@ -87,7 +96,7 @@ macro(add_vpp_library lib) get_filename_component(dir ${file} DIRECTORY) install( FILES ${file} - DESTINATION include/${lib}/${dir} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${lib}/${dir} COMPONENT ${ARG_COMPONENT}-dev ) endforeach() @@ -102,12 +111,42 @@ function (add_vpp_headers path) get_filename_component(dir ${file} DIRECTORY) install( FILES ${file} - DESTINATION include/${path}/${dir} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${path}/${dir} COMPONENT vpp-dev ) endforeach() endfunction() +macro(add_vat_test_library lib) + cmake_parse_arguments(TEST + "" + "" + ${ARGN} + ) + + foreach(file ${ARGN}) + get_filename_component(name ${file} NAME_WE) + set(test_lib ${lib}_${name}_plugin) + add_library(${test_lib} SHARED ${file}) + target_compile_options(${test_lib} PUBLIC ${VPP_DEFAULT_MARCH_FLAGS}) + if(NOT VPP_EXTERNAL_PROJECT) + add_dependencies(${test_lib} api_headers) + endif() + include_directories(${CMAKE_CURRENT_BINARY_DIR}) + set_target_properties(${test_lib} PROPERTIES NO_SONAME 1) + set_target_properties(${test_lib} PROPERTIES + PREFIX "" + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/vpp_api_test_plugins) + + # install .so + install( + TARGETS ${test_lib} + DESTINATION ${VPP_LIBRARY_DIR}/vpp_api_test_plugins + COMPONENT ${ARG_COMPONENT} + ) + endforeach() +endmacro() + macro(add_vpp_test_library lib) cmake_parse_arguments(TEST "" diff --git a/src/cmake/pack.cmake b/src/cmake/pack.cmake index a89a90c452c..88b62548211 100644 --- a/src/cmake/pack.cmake +++ b/src/cmake/pack.cmake @@ -64,6 +64,11 @@ macro(add_vpp_packaging) set(CPACK_${type}_PACKAGE_DESCRIPTION "${ARG_DESCRIPTION}") set(CPACK_${type}_PACKAGE_RELEASE 1) + # Pure Debian does not set the "OS_ID_LIKE", it only sets "OS_ID" + if (NOT DEFINED OS_ID_LIKE) + set(OS_ID_LIKE "${OS_ID}") + endif() + if(OS_ID_LIKE MATCHES "debian") set(CPACK_GENERATOR "DEB") set(type "DEBIAN") diff --git a/src/cmake/platform/octeon10.cmake b/src/cmake/platform/octeon10.cmake new file mode 100644 index 00000000000..cc2b292a419 --- /dev/null +++ b/src/cmake/platform/octeon10.cmake @@ -0,0 +1,4 @@ + +set(VPP_PLATFORM_CACHE_LINE_SIZE 64) +set(VPP_PLATFORM_MARCH_FLAGS -march=armv8.3-a+crypto+sve2-bitperm) +set(VPP_PLATFORM_BUFFER_ALIGN 128) diff --git a/src/cmake/plugin.cmake b/src/cmake/plugin.cmake index b399470db02..f971e5f1401 100644 --- a/src/cmake/plugin.cmake +++ b/src/cmake/plugin.cmake @@ -15,9 +15,13 @@ macro(add_vpp_plugin name) cmake_parse_arguments(PLUGIN "" "LINK_FLAGS;COMPONENT;DEV_COMPONENT" - "SOURCES;API_FILES;MULTIARCH_SOURCES;MULTIARCH_FORCE_ON;LINK_LIBRARIES;INSTALL_HEADERS;API_TEST_SOURCES;" + "SOURCES;API_FILES;MULTIARCH_SOURCES;MULTIARCH_FORCE_ON;LINK_LIBRARIES;INSTALL_HEADERS;API_TEST_SOURCES;VAT_AUTO_TEST;SUPPORTED_OS_LIST" ${ARGN} ) + if (PLUGIN_SUPPORTED_OS_LIST AND NOT ${CMAKE_SYSTEM_NAME} IN_LIST PLUGIN_SUPPORTED_OS_LIST) + message(WARNING "unsupported OS - ${name} plugin disabled") + return() + endif() set(plugin_name ${name}_plugin) set(api_includes) if(NOT PLUGIN_COMPONENT) @@ -40,7 +44,7 @@ macro(add_vpp_plugin name) ${CMAKE_CURRENT_BINARY_DIR}/${f}.h ${CMAKE_CURRENT_BINARY_DIR}/${f}_enum.h ${CMAKE_CURRENT_BINARY_DIR}/${f}_types.h - DESTINATION include/vpp_plugins/${name}/${dir} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/vpp_plugins/${name}/${dir} COMPONENT ${PLUGIN_DEV_COMPONENT} ) endforeach() @@ -82,7 +86,7 @@ macro(add_vpp_plugin name) get_filename_component(dir ${file} DIRECTORY) install( FILES ${file} - DESTINATION include/vpp_plugins/${name}/${dir} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/vpp_plugins/${name}/${dir} COMPONENT vpp-dev ) endforeach() @@ -108,7 +112,7 @@ macro(add_vpp_plugin name) COMPONENT ${PLUGIN_COMPONENT} ) endif() - if (PLUGIN_API_FILES) + if (PLUGIN_API_FILES AND NOT PLUGIN_VAT_AUTO_TEST STREQUAL OFF) add_vpp_test_library(${name}_test_plugin ${PLUGIN_API_FILES}) endif() |