# CMakeFiles for 3rd vendor library include(ExternalProject) #### GoogleTest ExternalProject_Add(googletest PREFIX googletest URL ${CMAKE_CURRENT_SOURCE_DIR}/googletest-release-1.8.0.tar.gz URL_MD5 16877098823401d1bf2ed7891d7dce36 CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) ExternalProject_Get_Property(googletest INSTALL_DIR) file(MAKE_DIRECTORY ${INSTALL_DIR}/include) add_library(gtest STATIC IMPORTED GLOBAL) add_dependencies(gtest googletest) set_property(TARGET gtest PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/libgtest.a) set_property(TARGET gtest PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) set_property(TARGET gtest PROPERTY INTERFACE_LINK_LIBRARIES pthread) add_library(gtest_main STATIC IMPORTED GLOBAL) add_dependencies(gtest_main googletest) set_property(TARGET gtest_main PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/libgtest_main.a) set_property(TARGET gtest_main PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) set_property(TARGET gtest_main PROPERTY INTERFACE_LINK_LIBRARIES pthread gtest) add_library(gmock STATIC IMPORTED GLOBAL) add_dependencies(gmock googletest) set_property(TARGET gmock PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/libgmock.a) set_property(TARGET gmock PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) add_library(gmock_main STATIC IMPORTED GLOBAL) add_dependencies(gmock_main googletest) set_property(TARGET gmock_main PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/libgmock_main.a) set_property(TARGET gmock_main PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) ### MESA_htable ExternalProject_Add(MESA_htable PREFIX MESA_htable URL ${CMAKE_CURRENT_SOURCE_DIR}/MESA_htable-master-503cac1d141ae15f2ab6c7a889a5361dd85842aa.zip URL_MD5 4e245d8dc70920f9a4d3ad87a30da9f7 CONFIGURE_COMMAND "" BUILD_COMMAND make INSTALL_COMMAND "" BUILD_IN_SOURCE 1) ExternalProject_Get_Property(MESA_htable SOURCE_DIR) file(MAKE_DIRECTORY ${SOURCE_DIR}/include) add_library(MESA_htable_static STATIC IMPORTED GLOBAL) add_dependencies(MESA_htable_static MESA_htable) set_property(TARGET MESA_htable_static PROPERTY IMPORTED_LOCATION ${SOURCE_DIR}/lib/libMESA_htable.a) set_property(TARGET MESA_htable_static PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${SOURCE_DIR}/include) ### MESA_prof_load ExternalProject_Add(MESA_prof_load PREFIX MESA_prof_load URL ${CMAKE_CURRENT_SOURCE_DIR}/MESA_prof_load-master-3b2bfdfecdcf2cf9a400237007f0b09dd5b3d685.zip URL_MD5 a946d9d42f96d8c79585a84b1918a3bf CONFIGURE_COMMAND "" BUILD_COMMAND make INSTALL_COMMAND "" BUILD_IN_SOURCE 1) ExternalProject_Get_Property(MESA_prof_load SOURCE_DIR) file(MAKE_DIRECTORY ${SOURCE_DIR}/inc) add_library(MESA_prof_load_static STATIC IMPORTED GLOBAL) add_dependencies(MESA_prof_load_static MESA_prof_load) set_property(TARGET MESA_prof_load_static PROPERTY IMPORTED_LOCATION ${SOURCE_DIR}/lib/libMESA_prof_load.a) set_property(TARGET MESA_prof_load_static PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${SOURCE_DIR}/inc) ExternalProject_Add(libevent PREFIX libevent URL ${CMAKE_CURRENT_SOURCE_DIR}/libevent-2.1.12-stable.tar.bz2 URL_MD5 977fb199eb49d46e2c3a924143e5f570 CONFIGURE_COMMAND ./configure --prefix= --disable-shared --disable-samples --disable-openssl BUILD_COMMAND make LDFLAGS="-ldl" BUILD_IN_SOURCE 1) ExternalProject_Get_Property(libevent INSTALL_DIR) file(MAKE_DIRECTORY ${INSTALL_DIR}/include) add_library(libevent-static STATIC IMPORTED GLOBAL) add_dependencies(libevent-static libevent) set_property(TARGET libevent-static PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/libevent.a) set_property(TARGET libevent-static PROPERTY IMPORTED_INTERFACE_LINK_LIBRARIES pthread crypto) set_property(TARGET libevent-static PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) add_library(libevent-static-pthreads STATIC IMPORTED GLOBAL) add_dependencies(libevent-static-pthreads libevent) set_property(TARGET libevent-static-pthreads PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/libevent_pthreads.a) set_property(TARGET libevent-static-pthreads PROPERTY IMPORTED_INTERFACE_LINK_LIBRARIES pthread crypto) set_property(TARGET libevent-static-pthreads PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) # libcmocka ExternalProject_Add(cmocka PREFIX cmocka URL ${CMAKE_CURRENT_SOURCE_DIR}/cmocka-1.1.7.tar.xz URL_MD5 dc23f4870eb7dfa6da065f3056e815b0 CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DBUILD_SHARED_LIBS=OFF -DUNIT_TESTING=OFF -DWITH_EXAMPLES=OFF) ExternalProject_Get_Property(cmocka INSTALL_DIR) file(MAKE_DIRECTORY ${INSTALL_DIR}/include) add_library(libcmocka STATIC IMPORTED GLOBAL) add_dependencies(libcmocka cmocka) set_property(TARGET libcmocka PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib64/libcmocka.a) set_property(TARGET libcmocka PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) # Merge multiple patches into one patch file set(DPDK_VERSION 23.11.1) set(DPDK_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/dpdk) set(DPDK_PATCH_DIR ${DPDK_SOURCE_DIR}) set(MERGED_PATCH_FILE "${CMAKE_BINARY_DIR}/merged_patches.patch") set(DPDK_PATCH_FILES ${DPDK_PATCH_DIR}/dpdk-${DPDK_VERSION}-memzone-namesize.patch ${DPDK_PATCH_DIR}/dpdk-${DPDK_VERSION}-fm10k-rxtx-vec.patch ${DPDK_PATCH_DIR}/dpdk-${DPDK_VERSION}-mempool-ops-get-count.patch ${DPDK_PATCH_DIR}/dpdk-${DPDK_VERSION}-bypass-flow-err-func.patch ${DPDK_PATCH_DIR}/dpdk-${DPDK_VERSION}-fix-dup-msl-name-sec-process.patch ${DPDK_PATCH_DIR}/dpdk-${DPDK_VERSION}-fix-af-packet-run-as-slave-of-bond.patch ${DPDK_PATCH_DIR}/dpdk-${DPDK_VERSION}-mp-max-fds.patch ${DPDK_PATCH_DIR}/dpdk-${DPDK_VERSION}-dpdk-devbind-dump.patch ${DPDK_PATCH_DIR}/dpdk-${DPDK_VERSION}-dpdk-hugepages-path.patch ${DPDK_PATCH_DIR}/dpdk-${DPDK_VERSION}-dpdk-pcapng-path.patch ${DPDK_PATCH_DIR}/dpdk-${DPDK_VERSION}-dpdk-pdum-offset-c.patch ${DPDK_PATCH_DIR}/dpdk-${DPDK_VERSION}-dpdk-pdum-offset-h.patch ${DPDK_PATCH_DIR}/dpdk-${DPDK_VERSION}-dpdk-pdum-offset-app.patch ${DPDK_PATCH_DIR}/dpdk-${DPDK_VERSION}-mlx5_glue_dlopen_info.patch ${DPDK_PATCH_DIR}/dpdk-${DPDK_VERSION}-revert-fix-devargs-in-secondary-process.patch ${DPDK_PATCH_DIR}/dpdk-${DPDK_VERSION}-fix-legacy_mem_init.patch ) execute_process(COMMAND cat ${DPDK_PATCH_FILES} OUTPUT_FILE ${MERGED_PATCH_FILE}) if(CMAKE_BUILD_TYPE STREQUAL "Debug") set(DPDK_BUILD_TYPE debug) elseif(CMAKE_BUILD_TYPE STREQUAL "Release") set(DPDK_BUILD_TYPE release) else() set(DPDK_BUILD_TYPE debugoptimized) endif() if(MACHINE STREQUAL ${AARCH64}) set(DPDK_MESON_MACHINE generic) else() set(DPDK_MESON_MACHINE ${MACHINE}) endif() set(DPDK_C_ARGS "['-DRTE_ETHDEV_PROFILE_WITH_VTUNE']") # Previously, when compiling the dpdk aarch64 debug version, "relocation truncated to fit" would be triggered. # However, this problem does not exist in the current environment. # Therefore, commenting out this code will ensure that the dpdk debug version can be compiled. # if((MACHINE STREQUAL ${AARCH64}) AND (CMAKE_BUILD_TYPE STREQUAL "Debug")) # # arm unrecognized argument in option ‘-mcmodel=medium’ # # set(DPDK_C_ARGS "['-DRTE_ETHDEV_PROFILE_WITH_VTUNE','-mcmodel=large']") # set(DPDK_BUILD_TYPE debugoptimized) # endif() message(STATUS "dpdk build machine: ${DPDK_MESON_MACHINE}") message(STATUS "dpdk c args: ${DPDK_C_ARGS}") message(STATUS "dpdk build type: ${DPDK_BUILD_TYPE}") set(DPDK_MESON_ENABLE_APPS "pdump,proc-info,test-pmd") set(DPDK_MESON_DISABLED_DRIVERS "common/cpt,common/dpaax,common/octeontx,common/octeontx2,common/sfc_efx,\ common/qat,bus/dpaa,bus/fslmc,bus/ifpga,bus/vmbus,mempool/bucket,mempool/dpaa,\ mempool/dpaa2,mempool/octeontx,mempool/octeontx2,mempool/stack,raw/ifpga,raw/ioat,\ raw/ntb,raw/octeontx2_dma,raw/octeontx2_ep,raw/skeleton,compress/zlib,regex/octeontx2,\ vdpa/ifc,event/skeleton,event/dlb,event/dlb2,event/opdl,sevent/keleton,event/sw,event/dsw,\ baseband/null,baseband/turbo_sw,baseband/fpga_lte_fec,baseband/fpga_5gnr_fec,baseband/acc100,\ crypto/bcmfs,crypto/ccp,crypto/nitrox,crypto/null,crypto/openssl,crypto/scheduler,crypto/virtio") # Although default_library=static has been set, both dynamic and static libraries are compiled. a little strange ExternalProject_Add(dpdk PREFIX dpdk URL ${DPDK_SOURCE_DIR}/dpdk-${DPDK_VERSION}.tar.xz URL_MD5 382d5fdd8ecb1d8e0be6d70dfc5eec96 PATCH_COMMAND COMMAND patch -Ns -p1 -i ${MERGED_PATCH_FILE} COMMAND ${CMAKE_COMMAND} -E chdir bash ${DPDK_SOURCE_DIR}/dpdk-config-set.sh CONFIGURE_COMMAND COMMAND meson -Dmax_lcores=256 -Dc_args=${DPDK_C_ARGS} -Ddisable_drivers=${DPDK_MESON_DISABLED_DRIVERS} -Dprefix= -Dplatform=generic -Dcpu_instruction_set=${DPDK_MESON_MACHINE} -Dibverbs_link=dlopen -Dbuildtype=${DPDK_BUILD_TYPE} -Denable_apps=${DPDK_MESON_ENABLE_APPS} build BUILD_COMMAND ${CMAKE_COMMAND} -E chdir /build ninja INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} -E chdir /build ninja install COMMAND ${CMAKE_COMMAND} -E chdir /lib64 rm -f libdpdk.a COMMAND ${CMAKE_COMMAND} -E chdir /lib64 sh -c "ar crsT libdpdk.a ./*.a" BUILD_IN_SOURCE 1) ExternalProject_Get_Property(dpdk INSTALL_DIR) file(MAKE_DIRECTORY ${INSTALL_DIR}/include) set(DPDK_ROOT_DIR ${INSTALL_DIR} CACHE PATH "DPDK root path") message(STATUS "DPDK_ROOT_DIR: ${DPDK_ROOT_DIR}") find_library(M_LIB m) add_library(libdpdk STATIC IMPORTED GLOBAL) add_dependencies(libdpdk dpdk) set_target_properties(libdpdk PROPERTIES IMPORTED_LOCATION ${M_LIB} INTERFACE_LINK_DIRECTORIES ${INSTALL_DIR}/lib64 INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include INTERFACE_LINK_LIBRARIES "-Wl,--whole-archive;${INSTALL_DIR}/lib64/libdpdk.a;-Wl,--no-whole-archive;rt;m;dl;pcap;numa;ibverbs;mlx5;mtcr_ul" )