mirror of https://github.com/microsoft/vcpkg.git
186 lines
6.3 KiB
CMake
186 lines
6.3 KiB
CMake
# Some dll doesn't export any symbols.
|
|
# https://doc.dpdk.org/guides-25.07/windows_gsg/intro.html#limitations
|
|
if(VCPKG_TARGET_IS_WINDOWS)
|
|
vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
|
|
endif()
|
|
|
|
if(VCPKG_TARGET_IS_LINUX AND VCPKG_HOST_IS_LINUX)
|
|
execute_process(
|
|
COMMAND uname --kernel-release
|
|
OUTPUT_VARIABLE KERNEL_VERSION
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
if(KERNEL_VERSION VERSION_LESS 4.4)
|
|
message(
|
|
WARNING
|
|
" Kernel version requires >= 4.4 on Linux (current version: ${KERNEL_VERSION})\n"
|
|
" Building may fail or have functional defects. See\n"
|
|
" https://doc.dpdk.org/guides/linux_gsg/sys_reqs.html#system-software"
|
|
)
|
|
endif()
|
|
|
|
execute_process(
|
|
COMMAND sh -c "ldd --version | head -n1 | rev | cut -d' ' -f 1 | rev"
|
|
OUTPUT_VARIABLE GLIBC_VERSION
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
if(GLIBC_VERSION VERSION_LESS 2.7)
|
|
message(
|
|
FATAL_ERROR
|
|
"glibc version requires >= 2.7 (for features related to cpuset)")
|
|
endif()
|
|
endif()
|
|
|
|
# Add a leading zero to the minor version if it consists of only one digit, otherwise the regex does nothing
|
|
# Match both `X.Y` and `X.Y.Z...` forms (optional remainder).
|
|
string(REGEX REPLACE "^([0-9]+)\\.([0-9])(\\..*)?$" "\\1.0\\2\\3" VERSION_REF "${VERSION}")
|
|
vcpkg_from_github(
|
|
OUT_SOURCE_PATH SOURCE_PATH
|
|
REPO DPDK/dpdk
|
|
REF "v${VERSION_REF}"
|
|
SHA512 37b49b5b5481036e0d563794222fc37c358f3c81b449e4252adb3bb1365e5dde14d7310a1ace810ee2443902a1cc7b177dca76666dd324241142062532a7509d
|
|
HEAD_REF main
|
|
PATCHES
|
|
0001-enable-either-static-or-shared-build.patch
|
|
0002-fix-dependencies.patch
|
|
0003-remove-examples-src-from-datadir.patch
|
|
0004-stop-building-apps.patch
|
|
0005-no-absolute-driver-path.patch
|
|
0006-rename-sched.h.patch
|
|
)
|
|
|
|
macro(append_bool_option feature_name option_name)
|
|
if("${feature_name}" IN_LIST FEATURES)
|
|
list(APPEND DPDK_OPTIONS -D${option_name}=true)
|
|
else()
|
|
list(APPEND DPDK_OPTIONS -D${option_name}=false)
|
|
endif()
|
|
endmacro()
|
|
|
|
set(DPDK_OPTIONS "")
|
|
set(DPDK_OPTIONS_RELEASE "")
|
|
append_bool_option("docs" "enable_docs")
|
|
append_bool_option("tests" "tests")
|
|
append_bool_option("trace" "enable_trace_fp")
|
|
|
|
set(PYTHON_PACKAGES "")
|
|
if(VCPKG_TARGET_IS_WINDOWS)
|
|
# https://doc.dpdk.org/guides/windows_gsg/build_dpdk.html#option-3-native-build-on-windows-using-msvc
|
|
list(APPEND DPDK_OPTIONS "-Denable_stdatomic=true")
|
|
else()
|
|
list(APPEND PYTHON_PACKAGES pyelftools)
|
|
endif()
|
|
if("docs" IN_LIST FEATURES)
|
|
list(APPEND DPDK_OPTIONS_RELEASE "-Denable_docs=true")
|
|
vcpkg_find_acquire_program(DOXYGEN)
|
|
list(APPEND PYTHON_PACKAGES packaging sphinx)
|
|
endif()
|
|
if(PYTHON_PACKAGES)
|
|
x_vcpkg_get_python_packages(OUT_PYTHON_VAR PYTHON3 PYTHON_VERSION "3" PACKAGES ${PYTHON_PACKAGES})
|
|
endif()
|
|
|
|
set(DISABLE_DRIVERS "regex/cn9k")
|
|
|
|
if(NOT "mlx5" IN_LIST FEATURES)
|
|
string(APPEND DISABLE_DRIVERS ",common/mlx5,compress/mlx5,crypto/mlx5,net/mlx5,regex/mlx5,vdpa/mlx5")
|
|
endif()
|
|
if(NOT "pmd-bnx2x" IN_LIST FEATURES)
|
|
string(APPEND DISABLE_DRIVERS ",net/bnx2x")
|
|
endif()
|
|
if(NOT "pmd-compress-isal" IN_LIST FEATURES)
|
|
string(APPEND DISABLE_DRIVERS ",compress/isal")
|
|
endif()
|
|
if(NOT "pmd-compress-zlib" IN_LIST FEATURES)
|
|
string(APPEND DISABLE_DRIVERS ",compress/zlib")
|
|
endif()
|
|
if(NOT "pmd-crypto-ccp" IN_LIST FEATURES)
|
|
string(APPEND DISABLE_DRIVERS ",crypto/ccp")
|
|
endif()
|
|
if(NOT "pmd-crypto-openssl" IN_LIST FEATURES)
|
|
string(APPEND DISABLE_DRIVERS ",crypto/openssl")
|
|
endif()
|
|
if(NOT "pmd-ipn3ke" IN_LIST FEATURES)
|
|
string(APPEND DISABLE_DRIVERS ",net/intel/ipn3ke")
|
|
endif()
|
|
if(NOT "pmd-mana" IN_LIST FEATURES)
|
|
string(APPEND DISABLE_DRIVERS ",net/mana")
|
|
endif()
|
|
if(NOT "pmd-mlx4" IN_LIST FEATURES)
|
|
string(APPEND DISABLE_DRIVERS ",net/mlx4")
|
|
endif()
|
|
if(NOT "pmd-pcap" IN_LIST FEATURES)
|
|
string(APPEND DISABLE_DRIVERS ",net/pcap")
|
|
endif()
|
|
if(NOT "qat" IN_LIST FEATURES)
|
|
string(APPEND DISABLE_DRIVERS ",common/qat")
|
|
endif()
|
|
if(NOT "rawdev-ifpga" IN_LIST FEATURES)
|
|
string(APPEND DISABLE_DRIVERS ",raw/ifpga")
|
|
endif()
|
|
|
|
vcpkg_configure_meson(SOURCE_PATH "${SOURCE_PATH}"
|
|
OPTIONS
|
|
-Ddeveloper_mode=disabled
|
|
"-Ddisable_drivers=${DISABLE_DRIVERS}"
|
|
${DPDK_OPTIONS}
|
|
OPTIONS_RELEASE
|
|
${DPDK_OPTIONS_RELEASE}
|
|
ADDITIONAL_BINARIES
|
|
"doxygen = ['${DOXYGEN}']"
|
|
)
|
|
vcpkg_install_meson()
|
|
vcpkg_fixup_pkgconfig()
|
|
|
|
file(GLOB scripts "${CURRENT_PACKAGES_DIR}/bin/*.py")
|
|
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
|
|
foreach(script IN LISTS scripts)
|
|
cmake_path(GET script FILENAME filename)
|
|
file(RENAME "${script}" "${CURRENT_PACKAGES_DIR}/tools/${PORT}/${filename}")
|
|
file(REMOVE "${CURRENT_PACKAGES_DIR}/debug/bin/${filename}")
|
|
endforeach()
|
|
vcpkg_clean_executables_in_bin(FILE_NAMES none)
|
|
|
|
if("docs" IN_LIST FEATURES)
|
|
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/share/${PORT}")
|
|
file(RENAME "${CURRENT_PACKAGES_DIR}/share/doc/dpdk" "${CURRENT_PACKAGES_DIR}/share/${PORT}/doc")
|
|
endif()
|
|
|
|
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share" "${CURRENT_PACKAGES_DIR}/share/doc")
|
|
|
|
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/license/README")
|
|
|
|
# Move dll driver to bin directory.
|
|
file(GLOB PMD_DIRS "${CURRENT_PACKAGES_DIR}/lib/dpdk/pmds-*")
|
|
foreach(PMD_DIR ${PMD_DIRS})
|
|
get_filename_component(DIR_NAME ${PMD_DIR} NAME)
|
|
file(GLOB DLLS "${PMD_DIR}/*.dll")
|
|
if(DLLS)
|
|
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/bin/dpdk/${DIR_NAME}")
|
|
file(COPY ${DLLS} DESTINATION "${CURRENT_PACKAGES_DIR}/bin/dpdk/${DIR_NAME}")
|
|
file(REMOVE ${DLLS})
|
|
endif()
|
|
endforeach()
|
|
if(NOT VCPKG_BUILD_TYPE)
|
|
file(GLOB PMD_DIRS_DEBUG "${CURRENT_PACKAGES_DIR}/debug/lib/dpdk/pmds-*")
|
|
foreach(PMD_DIR ${PMD_DIRS_DEBUG})
|
|
get_filename_component(DIR_NAME ${PMD_DIR} NAME)
|
|
file(GLOB DLLS "${PMD_DIR}/*.dll" "${PMD_DIR}/*.pdb")
|
|
if(DLLS)
|
|
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/debug/bin/dpdk/${DIR_NAME}")
|
|
file(COPY ${DLLS} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/bin/dpdk/${DIR_NAME}")
|
|
file(REMOVE ${DLLS})
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
|
|
# pkg_check_modules doesn't support -l:lib syntax
|
|
# https://gitlab.kitware.com/cmake/cmake/-/issues/27452
|
|
if (VCPKG_TARGET_IS_WINDOWS)
|
|
set(PREFIX_LIB "")
|
|
else()
|
|
set(PREFIX_LIB "lib")
|
|
endif()
|
|
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/lib/pkgconfig/libdpdk.pc" "-l:lib" "-l${PREFIX_LIB}")
|
|
if(NOT VCPKG_BUILD_TYPE)
|
|
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/libdpdk.pc" "-l:lib" "-l${PREFIX_LIB}")
|
|
endif()
|