2018-07-30 12:45:07 +02:00
|
|
|
# Copyright (c) 2018 Cisco and/or its affiliates.
|
|
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
|
# you may not use this file except in compliance with the License.
|
|
|
|
|
# You may obtain a copy of the License at:
|
|
|
|
|
#
|
|
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
#
|
|
|
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
|
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
|
# See the License for the specific language governing permissions and
|
|
|
|
|
# limitations under the License.
|
|
|
|
|
|
2020-10-22 14:23:47 +02:00
|
|
|
cmake_minimum_required(VERSION 3.10)
|
2018-07-30 12:45:07 +02:00
|
|
|
|
2021-04-14 18:48:22 +02:00
|
|
|
set(CMAKE_C_COMPILER_NAMES
|
|
|
|
|
clang-12
|
|
|
|
|
clang-11
|
|
|
|
|
clang-10
|
|
|
|
|
clang-9
|
|
|
|
|
gcc-10
|
|
|
|
|
gcc-9
|
|
|
|
|
cc
|
|
|
|
|
)
|
2020-04-28 13:29:37 +02:00
|
|
|
|
2018-07-30 12:45:07 +02:00
|
|
|
project(vpp C)
|
|
|
|
|
|
|
|
|
|
include(CheckCCompilerFlag)
|
2020-10-22 14:23:47 +02:00
|
|
|
include(CheckIPOSupported)
|
2019-01-26 14:12:25 +01:00
|
|
|
include(cmake/misc.cmake)
|
2018-08-26 10:14:52 +02:00
|
|
|
include(cmake/cpu.cmake)
|
|
|
|
|
include(cmake/ccache.cmake)
|
2018-07-30 12:45:07 +02:00
|
|
|
|
2018-08-31 17:38:57 +02:00
|
|
|
##############################################################################
|
|
|
|
|
# VPP Version
|
|
|
|
|
##############################################################################
|
|
|
|
|
execute_process(
|
|
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
|
|
|
COMMAND scripts/version
|
|
|
|
|
OUTPUT_VARIABLE VPP_VERSION
|
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
|
|
)
|
|
|
|
|
string(REPLACE "-" ";" VPP_LIB_VERSION ${VPP_VERSION})
|
|
|
|
|
list(GET VPP_LIB_VERSION 0 VPP_LIB_VERSION)
|
|
|
|
|
|
2019-01-15 00:36:03 +01:00
|
|
|
##############################################################################
|
|
|
|
|
# cross compiling
|
|
|
|
|
##############################################################################
|
|
|
|
|
if(CMAKE_CROSSCOMPILING)
|
|
|
|
|
set(CMAKE_IGNORE_PATH
|
|
|
|
|
/usr/lib/${CMAKE_HOST_SYSTEM_PROCESSOR}-linux-gnu/
|
|
|
|
|
/usr/lib/${CMAKE_HOST_SYSTEM_PROCESSOR}-linux-gnu/lib/
|
|
|
|
|
)
|
|
|
|
|
endif()
|
2019-01-18 17:09:44 +01:00
|
|
|
set(CMAKE_C_COMPILER_TARGET ${CMAKE_SYSTEM_PROCESSOR}-linux-gnu)
|
2019-01-15 00:36:03 +01:00
|
|
|
|
2018-07-30 12:45:07 +02:00
|
|
|
##############################################################################
|
|
|
|
|
# build config
|
|
|
|
|
##############################################################################
|
2019-01-17 18:25:11 +01:00
|
|
|
check_c_compiler_flag("-Wno-address-of-packed-member"
|
|
|
|
|
compiler_flag_no_address_of_packed_member)
|
2020-05-07 16:49:45 +02:00
|
|
|
set(VPP_RUNTIME_DIR "bin" CACHE STRING "Relative runtime directory path")
|
|
|
|
|
set(VPP_LIBRARY_DIR "lib" CACHE STRING "Relative library directory path")
|
2019-01-17 18:25:11 +01:00
|
|
|
|
2020-05-07 16:49:45 +02:00
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${VPP_RUNTIME_DIR})
|
|
|
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${VPP_LIBRARY_DIR})
|
2018-07-30 12:45:07 +02:00
|
|
|
|
2019-01-17 18:25:11 +01:00
|
|
|
if (CMAKE_BUILD_TYPE)
|
2019-11-07 11:32:16 +01:00
|
|
|
set(CMAKE_C_FLAGS "-g -fPIC -Werror -Wall ${CMAKE_C_FLAGS}")
|
2019-01-17 18:25:11 +01:00
|
|
|
endif()
|
|
|
|
|
|
2018-08-27 15:59:30 +02:00
|
|
|
if (compiler_flag_no_address_of_packed_member)
|
2019-01-17 18:25:11 +01:00
|
|
|
set(CMAKE_C_FLAGS "-Wno-address-of-packed-member ${CMAKE_C_FLAGS}")
|
2018-08-27 15:59:30 +02:00
|
|
|
endif()
|
|
|
|
|
|
2019-11-07 11:32:16 +01:00
|
|
|
# release
|
2019-11-19 17:58:36 +01:00
|
|
|
list(APPEND BUILD_TYPES "release")
|
2019-11-07 11:32:16 +01:00
|
|
|
string(CONCAT CMAKE_C_FLAGS_RELEASE
|
|
|
|
|
"-O2 "
|
|
|
|
|
"-fstack-protector "
|
2021-01-20 09:03:30 +00:00
|
|
|
"-D_FORTIFY_SOURCE=2 "
|
2019-11-07 11:32:16 +01:00
|
|
|
"-fno-common "
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
string(CONCAT CMAKE_EXE_LINKER_FLAGS_RELEASE "-pie")
|
|
|
|
|
|
|
|
|
|
# debug
|
2019-11-19 17:58:36 +01:00
|
|
|
list(APPEND BUILD_TYPES "debug")
|
2019-11-07 11:32:16 +01:00
|
|
|
string(CONCAT CMAKE_C_FLAGS_DEBUG
|
|
|
|
|
"-O0 "
|
|
|
|
|
"-DCLIB_DEBUG "
|
|
|
|
|
"-fstack-protector "
|
|
|
|
|
"-fno-common "
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# coverity
|
2019-11-19 17:58:36 +01:00
|
|
|
list(APPEND BUILD_TYPES "coverity")
|
2019-11-07 11:32:16 +01:00
|
|
|
string(CONCAT CMAKE_C_FLAGS_COVERITY "-O2 -D__COVERITY__")
|
|
|
|
|
|
|
|
|
|
# gcov
|
2019-11-19 17:58:36 +01:00
|
|
|
list(APPEND BUILD_TYPES "gcov")
|
2019-11-07 11:32:16 +01:00
|
|
|
string(CONCAT CMAKE_C_FLAGS_GCOV
|
|
|
|
|
"-O0 "
|
|
|
|
|
"-DCLIB_DEBUG "
|
|
|
|
|
"-DCLIB_GCOV "
|
|
|
|
|
"-fprofile-arcs "
|
|
|
|
|
"-ftest-coverage ")
|
|
|
|
|
|
2019-01-17 18:25:11 +01:00
|
|
|
string(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_UC)
|
|
|
|
|
|
2019-11-19 17:58:36 +01:00
|
|
|
|
|
|
|
|
string(REPLACE ";" " " BUILD_TYPES "${BUILD_TYPES}")
|
|
|
|
|
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY
|
|
|
|
|
HELPSTRING "Build type - valid options are: ${BUILD_TYPES}")
|
|
|
|
|
|
2020-10-22 14:23:47 +02:00
|
|
|
##############################################################################
|
|
|
|
|
# link time optimizations
|
|
|
|
|
##############################################################################
|
|
|
|
|
if (CMAKE_BUILD_TYPE_UC STREQUAL "RELEASE")
|
|
|
|
|
check_ipo_supported(RESULT _result)
|
|
|
|
|
if (_result)
|
|
|
|
|
option(VPP_USE_LTO "Link time optimization of release binaries" ON)
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
|
2019-04-15 15:28:21 +02:00
|
|
|
##############################################################################
|
|
|
|
|
# sanitizers
|
|
|
|
|
##############################################################################
|
|
|
|
|
|
2020-05-07 16:49:45 +02:00
|
|
|
option(VPP_ENABLE_SANITIZE_ADDR "Enable Address Sanitizer" OFF)
|
2020-06-16 12:05:07 +02:00
|
|
|
set(VPP_SANITIZE_ADDR_OPTIONS
|
2020-05-21 19:09:13 +02:00
|
|
|
"unmap_shadow_on_exit=1:disable_coredump=0:abort_on_error=1:detect_leaks=0"
|
|
|
|
|
CACHE
|
|
|
|
|
STRING "Address sanitizer arguments"
|
|
|
|
|
)
|
|
|
|
|
|
2020-05-07 16:49:45 +02:00
|
|
|
if (VPP_ENABLE_SANITIZE_ADDR)
|
2020-05-21 16:47:05 +02:00
|
|
|
set(CMAKE_C_FLAGS "-fsanitize=address -DCLIB_SANITIZE_ADDR ${CMAKE_C_FLAGS}")
|
2019-04-15 15:28:21 +02:00
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "-fsanitize=address ${CMAKE_EXE_LINKER_FLAGS}")
|
|
|
|
|
set(CMAKE_SHARED_LINKER_FLAGS "-fsanitize=address ${CMAKE_SHARED_LINKER_FLAGS}")
|
2020-05-07 16:49:45 +02:00
|
|
|
endif (VPP_ENABLE_SANITIZE_ADDR)
|
2019-04-15 15:28:21 +02:00
|
|
|
|
2018-07-30 12:45:07 +02:00
|
|
|
##############################################################################
|
|
|
|
|
# install config
|
|
|
|
|
##############################################################################
|
2021-01-15 13:28:34 -08:00
|
|
|
option(VPP_SET_RPATH "Set rpath for resulting binaries and libraries." ON)
|
|
|
|
|
if(VPP_SET_RPATH)
|
|
|
|
|
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
|
|
|
|
|
endif()
|
2018-07-30 12:45:07 +02:00
|
|
|
set(CMAKE_INSTALL_MESSAGE NEVER)
|
|
|
|
|
|
|
|
|
|
include_directories (
|
|
|
|
|
${CMAKE_SOURCE_DIR}
|
|
|
|
|
${CMAKE_BINARY_DIR}
|
|
|
|
|
${CMAKE_BINARY_DIR}/include
|
|
|
|
|
)
|
|
|
|
|
set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "vpp")
|
|
|
|
|
|
|
|
|
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
|
|
|
find_package(Threads REQUIRED)
|
|
|
|
|
|
2019-03-18 17:06:51 +01:00
|
|
|
include(cmake/syscall.cmake)
|
2018-08-26 10:14:52 +02:00
|
|
|
include(cmake/api.cmake)
|
2018-08-26 11:04:40 +02:00
|
|
|
include(cmake/library.cmake)
|
|
|
|
|
include(cmake/exec.cmake)
|
2018-08-26 10:14:52 +02:00
|
|
|
include(cmake/plugin.cmake)
|
2018-07-30 12:45:07 +02:00
|
|
|
|
|
|
|
|
##############################################################################
|
2018-08-28 12:57:29 +02:00
|
|
|
# subdirs - order matters
|
2018-07-30 12:45:07 +02:00
|
|
|
##############################################################################
|
2020-05-07 16:49:45 +02:00
|
|
|
option(VPP_HOST_TOOLS_ONLY "Build only host tools" OFF)
|
|
|
|
|
if(VPP_HOST_TOOLS_ONLY)
|
|
|
|
|
set(SUBDIRS tools/vppapigen cmake)
|
|
|
|
|
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
|
2018-09-03 12:30:36 +02:00
|
|
|
find_package(OpenSSL REQUIRED)
|
|
|
|
|
set(SUBDIRS
|
api: vat2 and json autogeneration for api messages
VAT2: A completely auto-generated replacement of VAT.
Reads input message in JSON from stdin and outputs received messages in JSON.
A VAT2 plugin is automatically built for a .api file.
There no longer a need for a separate _test.c.
Example:
vat2 show_version {}
{
"_msgname": "show_version_reply",
"retval": 0,
"program": "vpe",
"version": "21.01-rc0~411-gf6eb348a6",
"build_date": "2020-11-19T09:49:25",
"build_directory": "/vpp/autogen3"
}
vat2 sw_interface_dump '{"sw_if_index": -1,
"name_filter_valid": 0,
"name_filter": ""}'
[{
"_msgname": "sw_interface_details",
"sw_if_index": 0,
"sup_sw_if_index": 0,
"l2_address": "00:00:00:00:00:00",
"flags": "Invalid ENUM",
"type": "IF_API_TYPE_HARDWARE",
"link_duplex": "LINK_DUPLEX_API_UNKNOWN",
"link_speed": 0,
"link_mtu": 0,
"mtu": [0, 0, 0, 0],
"sub_id": 0,
"sub_number_of_tags": 0,
"sub_outer_vlan_id": 0,
"sub_inner_vlan_id": 0,
"sub_if_flags": "Invalid ENUM",
"vtr_op": 0,
"vtr_push_dot1q": 0,
"vtr_tag1": 0,
"vtr_tag2": 0,
"outer_tag": 0,
"b_dmac": "00:00:00:00:00:00",
"b_smac": "00:00:00:00:00:00",
"b_vlanid": 0,
"i_sid": 0,
"interface_name": "local0",
"interface_dev_type": "local",
"tag": ""
}]
This is the first phase and vat2 is not integrated in packaging yet.
Type: feature
Signed-off-by: Ole Troan <ot@cisco.com>
Change-Id: Ib45ddeafb180ea7da8c5dc274a9274d7a4edc876
Signed-off-by: Ole Troan <ot@cisco.com>
2020-11-18 19:17:48 +01:00
|
|
|
vppinfra svm vlib vlibmemory vlibapi vnet vpp vat vat2 vcl plugins
|
2020-05-07 09:49:27 +02:00
|
|
|
vpp-api tools/vppapigen tools/g2 tools/perftool cmake pkg
|
2019-03-24 16:25:03 -04:00
|
|
|
tools/appimage
|
2018-09-12 12:12:36 +02:00
|
|
|
)
|
2018-09-03 12:30:36 +02:00
|
|
|
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
|
|
|
|
|
set(SUBDIRS vppinfra)
|
|
|
|
|
else()
|
|
|
|
|
message(FATAL_ERROR "Unsupported system: ${CMAKE_SYSTEM_NAME}")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
foreach(DIR ${SUBDIRS})
|
2018-07-30 12:45:07 +02:00
|
|
|
add_subdirectory(${DIR})
|
2018-08-28 12:57:29 +02:00
|
|
|
endforeach()
|
2018-07-30 12:45:07 +02:00
|
|
|
|
2018-08-31 17:38:57 +02:00
|
|
|
##############################################################################
|
|
|
|
|
# detect if we are inside git repo and add configure dependency
|
|
|
|
|
##############################################################################
|
|
|
|
|
execute_process(
|
|
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
|
|
|
COMMAND git rev-parse --show-toplevel
|
|
|
|
|
OUTPUT_VARIABLE VPP_GIT_TOPLEVEL_DIR
|
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
2019-01-28 17:55:59 +01:00
|
|
|
ERROR_QUIET
|
2018-08-31 17:38:57 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if (VPP_GIT_TOPLEVEL_DIR)
|
|
|
|
|
set_property(
|
|
|
|
|
DIRECTORY APPEND PROPERTY
|
|
|
|
|
CMAKE_CONFIGURE_DEPENDS ${VPP_GIT_TOPLEVEL_DIR}/.git/index
|
|
|
|
|
)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
# print configuration
|
|
|
|
|
##############################################################################
|
|
|
|
|
message(STATUS "Configuration:")
|
|
|
|
|
pr("VPP version" "${VPP_VERSION}")
|
|
|
|
|
pr("VPP library version" "${VPP_LIB_VERSION}")
|
|
|
|
|
pr("GIT toplevel dir" "${VPP_GIT_TOPLEVEL_DIR}")
|
2019-01-17 18:25:11 +01:00
|
|
|
pr("Build type" "${CMAKE_BUILD_TYPE}")
|
|
|
|
|
pr("C flags" "${CMAKE_C_FLAGS}${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UC}}")
|
2019-11-07 11:32:16 +01:00
|
|
|
pr("Linker flags (apps)" "${CMAKE_EXE_LINKER_FLAGS}${CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE_UC}}")
|
|
|
|
|
pr("Linker flags (libs)" "${CMAKE_SHARED_LINKER_FLAGS}${CMAKE_SHARED_LINKER_FLAGS_${CMAKE_BUILD_TYPE_UC}}")
|
2019-01-15 00:36:03 +01:00
|
|
|
pr("Host processor" "${CMAKE_HOST_SYSTEM_PROCESSOR}")
|
2018-08-31 17:38:57 +02:00
|
|
|
pr("Target processor" "${CMAKE_SYSTEM_PROCESSOR}")
|
2018-09-18 18:41:38 +02:00
|
|
|
pr("Prefix path" "${CMAKE_PREFIX_PATH}")
|
2018-08-31 17:38:57 +02:00
|
|
|
pr("Install prefix" "${CMAKE_INSTALL_PREFIX}")
|