blob: a18d2081c0e8fb457ea4c5762377ff3a1835aca9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
#############################################################################
# DPDK Envoirment Support based on CMake 2.6+
# Author : Lu Qiuwen
# E-mail : [email protected]
# Date : 2016-01-03
#############################################################################
set(DPDK_RTE_SDK $ENV{RTE_SDK})
set(DPDK_RTE_TARGET $ENV{RTE_TARGET})
# DPDK CPU Flags
if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64")
set(DPDK_MACHINE_FLAGS "-march=armv8-a")
else()
set(DPDK_MACHINE_FLAGS "-march=native")
endif()
exec_program(${CMAKE_C_COMPILER} ARGS "${DPDK_MACHINE_FLAGS} -dM -E - < /dev/null" OUTPUT_VARIABLE DPDK_AUTOFLAGS)
if(DPDK_AUTOFLAGS MATCHES "__SSE__")
set(DPDK_CPUFLAGS ${DPDK_CPUFLAGS} SSE)
endif()
if(DPDK_AUTOFLAGS MATCHES "__SSE2__")
set(DPDK_CPUFLAGS ${DPDK_CPUFLAGS} SSE2)
endif()
if(DPDK_AUTOFLAGS MATCHES "__SSE3__")
set(DPDK_CPUFLAGS ${DPDK_CPUFLAGS} SSE3)
endif()
if(DPDK_AUTOFLAGS MATCHES "__SSSE3__")
set(DPDK_CPUFLAGS ${DPDK_CPUFLAGS} SSSE3)
endif()
if(DPDK_AUTOFLAGS MATCHES "__SSE4_1__")
set(DPDK_CPUFLAGS ${DPDK_CPUFLAGS} SSE4_1)
endif()
if(DPDK_AUTOFLAGS MATCHES "__SSE4_2__")
set(DPDK_CPUFLAGS ${DPDK_CPUFLAGS} SSE4_2)
endif()
if(DPDK_AUTOFLAGS MATCHES "__AES__")
set(DPDK_CPUFLAGS ${DPDK_CPUFLAGS} AES)
endif()
if(DPDK_AUTOFLAGS MATCHES "__PCLMUL__")
set(DPDK_CPUFLAGS ${DPDK_CPUFLAGS} PCLMULQDQ)
endif()
if(DPDK_AUTOFLAGS MATCHES "__AVX__")
set(DPDK_CPUFLAGS ${DPDK_CPUFLAGS} AVX)
endif()
if(DPDK_AUTOFLAGS MATCHES "__RDRND__")
set(DPDK_CPUFLAGS ${DPDK_CPUFLAGS} RDRAND)
endif()
if(DPDK_AUTOFLAGS MATCHES "__FSGSBASE__")
set(DPDK_CPUFLAGS ${DPDK_CPUFLAGS} FSGSBASE)
endif()
if(DPDK_AUTOFLAGS MATCHES "__F16C__")
set(DPDK_CPUFLAGS ${DPDK_CPUFLAGS} F16C)
endif()
if(DPDK_AUTOFLAGS MATCHES "__AVX2__")
set(DPDK_CPUFLAGS ${DPDK_CPUFLAGS} AVX2)
endif()
foreach(LOOP_VAR ${DPDK_CPUFLAGS})
set(DPDK_MACHINE_FLAGS ${DPDK_MACHINE_FLAGS} "-DRTE_MACHINE_CPUFLAG_${LOOP_VAR}")
set(DPDK_COMPILE_TIME_CPUFLAGS ${DPDK_COMPILE_TIME_CPUFLAGS} "RTE_CPUFLAG_${LOOP_VAR}")
endforeach()
string(REPLACE ";" "," DPDK_COMPILE_TIME_CPUFLAGS_STR "${DPDK_COMPILE_TIME_CPUFLAGS}")
set(DPDK_MACHINE_FLAGS ${DPDK_MACHINE_FLAGS} "-DRTE_COMPILE_TIME_CPUFLAGS=${DPDK_COMPILE_TIME_CPUFLAGS_STR}")
# Target Platform Detective
# Platform Bit
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
set(DPDK_ARCH_FLAGS "-m64")
endif()
if(CMAKE_SYSTEM_PROCESSOR MATCHES "i686")
set(DPDK_ARCH_FLAGS "-m32")
endif()
# Force Include
set(DPDK_FORCE_INCLUDE "-include ${DPDK_RTE_SDK}/${DPDK_RTE_TARGET}/include/rte_config.h")
# Library Path
set(DPDK_LIBRARY_PATH "-L${DPDK_RTE_SDK}/${DPDK_RTE_TARGET}/lib")
set(DPDK_LIBRARY_LINK
-Wl,--whole-archive
rte_distributor rte_reorder rte_kni rte_pipeline rte_table
rte_port rte_timer rte_hash rte_jobstats rte_lpm
rte_power rte_acl rte_meter rte_sched rte_vhost
-Wl,--start-group
rte_kvargs rte_mbuf rte_ip_frag ethdev rte_mempool
rte_ring rte_eal rte_cmdline rte_cfgfile rte_pmd_bond
rte_pmd_vmxnet3_uio rte_pmd_virtio rte_pmd_cxgbe rte_pmd_enic rte_pmd_i40e
rte_pmd_fm10k rte_pmd_ixgbe rte_pmd_e1000 rte_pmd_ring rte_pmd_af_packet
rte_pmd_null rt m dl
-Wl,--end-group
-Wl,--no-whole-archive
)
# Output
set(DPDK_C_PREDEFINED ${DPDK_ARCH_FLAGS} ${DPDK_MACHINE_FLAGS} ${DPDK_FORCE_INCLUDE})
set(DPDK_CXX_PREDEFINED ${DPDK_ARCH_FLAGS} ${DPDK_MACHINE_FLAGS} ${DPDK_FORCE_INCLUDE})
set(DPDK_INCLUDE_DIR "${DPDK_RTE_SDK}/${DPDK_RTE_TARGET}/include")
set(DPDK_LIBRARY ${DPDK_LIBRARY_PATH} ${DPDK_LIBRARY_LINK})
|