summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorsongyanchao <[email protected]>2022-02-17 22:47:11 -0500
committersongyanchao <[email protected]>2022-02-17 22:47:11 -0500
commit272973702b54901dd01ca4478c9703246e23bb9b (patch)
tree77e2986eea655b5a057e4e3bb22eadf34b296d8b /cmake
parentad801d927c33328d242ed989ed5b813a8e319228 (diff)
✨ feat(FindDpdk.cmake): 修改编译方式为动态链接并剥离PMD动态库
修改编译方式为动态链接,并剥离PMD动态库
Diffstat (limited to 'cmake')
-rw-r--r--cmake/FindDPDK.cmake32
1 files changed, 30 insertions, 2 deletions
diff --git a/cmake/FindDPDK.cmake b/cmake/FindDPDK.cmake
index 2162a72..4a61b9e 100644
--- a/cmake/FindDPDK.cmake
+++ b/cmake/FindDPDK.cmake
@@ -2,7 +2,7 @@
# DPDK Envoirment Support based on CMake 2.6+
# In DPDK2.2.0+, It supports compile as dynamic library and install In
# Systems. This file is used to support this.
-#
+#
# Author : Lu Qiuwen
# E-mail : [email protected]
# Date : 2016-01-03
@@ -98,7 +98,35 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "i686")
endif()
# Additional library
-file(GLOB DPDK_LIBRARY_GEN "${DPDK_LIBRARY_DIR}/librte*.a" "${DPDK_LIBRARY_DIR}/libeth*.a")
+## 1. find pmd .so
+file(GLOB PMD_PATH "${DPDK_LIBRARY_DIR}/dpdk/pmds-*/librte*.so")
+foreach(PMD_PATH_ITEM ${PMD_PATH})
+ string(REGEX REPLACE ".+/(.+)" "\\1" PMD_NAME_ITEM ${PMD_PATH_ITEM})
+ list(APPEND PMD_NAME_LIST ${PMD_NAME_ITEM})
+endforeach(PMD_PATH_ITEM)
+
+## 2. find dpdk .so for all
+file(GLOB DPDK_LIBRARY_PATH "${DPDK_LIBRARY_DIR}/librte*.so")
+foreach(DPDK_LIBRARY_PATH_ITEM ${DPDK_LIBRARY_PATH})
+ string(REGEX REPLACE ".+/(.+)" "\\1" DPDK_LIBRARY_NAME_ITEM ${DPDK_LIBRARY_PATH_ITEM})
+ list(APPEND DPDK_LIBRARY_NAME_LIST ${DPDK_LIBRARY_NAME_ITEM})
+endforeach(DPDK_LIBRARY_PATH_ITEM)
+
+## 3. from dpdk .so exclude pmd .so
+foreach(PMD_NAME_ITEM ${PMD_NAME_LIST})
+ list(REMOVE_ITEM DPDK_LIBRARY_NAME_LIST "${PMD_NAME_ITEM}")
+endforeach(PMD_NAME_ITEM)
+
+## 4. on the basis of dpdk .so name list,find the library path of dpdk .so
+foreach(DPDK_LIBRARY_ITEM ${DPDK_LIBRARY_NAME_LIST})
+ file(GLOB DPDK_LIBRARY_GEN_ITEM "${DPDK_LIBRARY_DIR}/${DPDK_LIBRARY_ITEM}" "${DPDK_LIBRARY_DIR}/libeth*.so")
+ list(APPEND DPDK_LIBRARY_GEN "${DPDK_LIBRARY_GEN_ITEM}")
+endforeach(DPDK_LIBRARY_ITEM)
+
+## 5. remove duplicates item
+list(REMOVE_DUPLICATES DPDK_LIBRARY_GEN)
+
+## 6. set DPDK_LIBRARY
set(DPDK_LIBRARY -Wl,--whole-archive ${DPDK_LIBRARY_GEN} -Wl,--no-whole-archive rt m dl pcap numa)
# Force Include