From 7b2803bfe36e6ca19d4389d28c5d9f15dcbe95e8 Mon Sep 17 00:00:00 2001
From: herengui <herengui@kylinsec.com.cn>
Date: Wed, 30 Aug 2023 15:41:03 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=BE=99=E8=8A=AF=E5=92=8C?=
 =?UTF-8?q?=E7=94=B3=E5=A8=81=E6=9E=B6=E6=9E=84=E6=94=AF=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: herengui <herengui@kylinsec.com.cn>
---
 src/lstack/Makefile               |  9 +++++++--
 src/ltran/CMakeLists.txt          | 17 +++++++++++++----
 test/unitest/ltran/CMakeLists.txt |  5 ++++-
 3 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/src/lstack/Makefile b/src/lstack/Makefile
index 3550244..8f684ba 100644
--- a/src/lstack/Makefile
+++ b/src/lstack/Makefile
@@ -26,6 +26,7 @@ CC ?= gcc
 OPTIMIZATION = -O2 -g
 RM = rm -f
 LDFLAGS = -shared -ldl -lm -lpthread -lrt -lnuma -lconfig -lboundscheck
+ARCH := $(shell uname -m)
 
 ifneq ($(CC),clang)
 	SEC_FLAGS = -fstack-protector-strong -Werror -Wall -Wl,-z,relro, -Wl,-z,now -Wl,-z,noexecstack -Wtrampolines -fPIC -D_FORTIFY_SOURCE=2
@@ -88,18 +89,22 @@ ifeq ($(DPDK_VERSION_1911), 1)
 	LIBRTE_LIB += $(LIB_PATH)/librte_pmd_pcap.so \
 	              $(LIB_PATH)/librte_pmd_bond.so \
 	              $(LIB_PATH)/librte_pmd_hinic.so \
-	              $(LIB_PATH)/librte_pmd_i40e.so \
 	              $(LIB_PATH)/librte_pmd_ixgbe.so \
 	              $(LIB_PATH)/librte_pmd_virtio.so
+	ifneq ($(ARCH), loongarch64)
+		LIBRTE_LIB += $(LIB_PATH)/librte_pmd_i40e.so
+	endif
 else
 	LIBRTE_LIB += $(LIB_PATH)/librte_net_pcap.so \
 	              $(LIB_PATH)/librte_net_bond.so \
 	              $(LIB_PATH)/librte_net_hinic.so \
-	              $(LIB_PATH)/librte_net_i40e.so \
 	              $(LIB_PATH)/librte_net_ixgbe.so \
 	              $(LIB_PATH)/librte_net_virtio.so \
 	              $(LIB_PATH)/librte_telemetry.so \
 	              $(LIB_PATH)/librte_pcapng.so
+	ifneq ($(ARCH), loongarch64)
+		LIBRTE_LIB += $(LIB_PATH)/librte_net_i40e.so
+	endif
 endif
 
 DEP_LIBS = $(LWIP_LIB) $(LIBRTE_LIB)
diff --git a/src/ltran/CMakeLists.txt b/src/ltran/CMakeLists.txt
index b8d92b7..e098a77 100644
--- a/src/ltran/CMakeLists.txt
+++ b/src/ltran/CMakeLists.txt
@@ -30,12 +30,18 @@ endif($ENV{GAZELLE_COVERAGE_ENABLE})
 if($ENV{DPDK_VERSION_1911})
     set(DPDK_DIR /usr/include/dpdk)
     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DDPDK_VERSION_1911=1")
-    set(DPDK_LINK_FLAGS "-Wl,-lrte_pmd_bond -Wl,-lrte_pmd_i40e -Wl,-lrte_pmd_hinic -Wl,-lrte_pmd_ixgbe \
+    set(DPDK_LINK_FLAGS "-Wl,-lrte_pmd_bond -Wl,-lrte_pmd_hinic -Wl,-lrte_pmd_ixgbe \
     -Wl,-lrte_pmd_pcap -Wl,-lrte_pmd_virtio")
+    if(NOT CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "loongarch64")
+        set(DPDK_LINK_FLAGS "${DPDK_LINK_FLAGS} -Wl,-lrte_pmd_i40e")
+    endif()
 else()
     set(DPDK_DIR /usr/local/include/)
-    set(DPDK_LINK_FLAGS "-Wl,-lrte_net_bond -Wl,-lrte_net_i40e -Wl,-lrte_net_hinic -Wl,-lrte_net_ixgbe \
+    set(DPDK_LINK_FLAGS "-Wl,-lrte_net_bond -Wl,-lrte_net_hinic -Wl,-lrte_net_ixgbe \
     -Wl,-lpcap -Wl,-lrte_net_pcap -Wl,-lrte_net_virtio -Wl,-lrte_pcapng -Wl,-lrte_telemetry")
+    if(NOT CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "loongarch64")
+        set(DPDK_LINK_FLAGS "${DPDK_LINK_FLAGS} -Wl,-lrte_net_i40e")
+    endif()
 endif($ENV{DPDK_VERSION_1911})
 
 add_executable(ltran main.c ltran_param.c ltran_config.c ltran_ethdev.c ltran_stat.c ltran_errno.c
@@ -44,12 +50,15 @@ add_executable(ltran main.c ltran_param.c ltran_config.c ltran_ethdev.c ltran_st
                 ${COMMON_DIR}/gazelle_parse_config.c)
 
 target_include_directories(ltran PRIVATE ${COMMON_DIR} ${PROJECT_SOURCE_DIR} ${LWIP_DIR} ${DPDK_DIR})
-target_compile_options(ltran PRIVATE -march=native -fno-strict-aliasing -D__ARM_FEATURE_CRC32=1 -DRTE_MACHINE_CPUFLAG_NEON
+target_compile_options(ltran PRIVATE -fno-strict-aliasing -D__ARM_FEATURE_CRC32=1 -DRTE_MACHINE_CPUFLAG_NEON
                -DRTE_MACHINE_CPUFLAG_CRC32 -DRTE_MACHINE_CPUFLAG_PMULL -DRTE_MACHINE_CPUFLAG_AES
                -DRTE_MACHINE_CPUFLAG_SHA1 -DRTE_MACHINE_CPUFLAG_SHA2 -include rte_config.h
                -D_GNU_SOURCE -W -Wall -Wstrict-prototypes -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition
-               -Wpointer-arith -Wcast-align -Wcast-qual -Wnested-externs -Wformat-nonliteral -Wformat-security -Wundef
+               -Wpointer-arith -Wcast-qual -Wnested-externs -Wformat-nonliteral -Wformat-security -Wundef
                -Wdeprecated -Wwrite-strings -Wno-implicit-fallthrough -D_FORTIFY_SOURCE=2)
+if(NOT CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "sw_64")
+    target_compile_options(ltran PRIVATE -march=native -Wcast-align)
+endif()
 
 target_link_libraries(ltran PRIVATE config boundscheck rte_pdump -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -Wtrampolines)
 set_target_properties(ltran PROPERTIES LINK_FLAGS "-L$ENV{DPDK_LIB_PATH} -Wl,--no-whole-archive \
diff --git a/test/unitest/ltran/CMakeLists.txt b/test/unitest/ltran/CMakeLists.txt
index 9496053..60bda83 100644
--- a/test/unitest/ltran/CMakeLists.txt
+++ b/test/unitest/ltran/CMakeLists.txt
@@ -47,12 +47,15 @@ set_target_properties(ltran_test PROPERTIES LINK_FLAGS "-L$ENV{DPDK_LIB_PATH} -W
     -Wl,-lrte_bus_dpaa -Wl,-lrte_bus_vdev -Wl,-lrte_bus_fslmc -Wl,-lrte_mempool_bucket -Wl,-lrte_mempool_stack -Wl,-lrte_mempool_dpaa \
     -Wl,-lrte_mempool_dpaa2 -Wl,-lrte_net_af_packet -Wl,-lrte_net_ark -Wl,-lrte_net_atlantic -Wl,-lrte_net_axgbe \
     -Wl,-lrte_net_bnxt -Wl,-lrte_net_bond -Wl,-lrte_net_cxgbe -Wl,-lrte_net_dpaa -Wl,-lrte_net_dpaa2 -Wl,-lrte_net_e1000 -Wl,-lrte_net_ena \
-    -Wl,-lrte_net_enetc -Wl,-lrte_net_enic -Wl,-lrte_net_failsafe -Wl,-lrte_net_i40e -Wl,-lrte_net_hinic -Wl,-lrte_net_ixgbe -Wl,-lrte_net_kni \
+    -Wl,-lrte_net_enetc -Wl,-lrte_net_enic -Wl,-lrte_net_failsafe -Wl,-lrte_net_hinic -Wl,-lrte_net_ixgbe -Wl,-lrte_net_kni \
     -Wl,-lrte_net_nfp -Wl,-lrte_net_null -Wl,-lpcap -Wl,-lrte_net_qede -Wl,-lrte_net_ring -Wl,-lrte_net_softnic \
     -Wl,-lrte_net_tap -Wl,-lrte_net_vdev_netvsc -Wl,-lrte_net_virtio -Wl,-lrte_net_vhost \
     -Wl,-lrte_bus_vmbus -Wl,-lrte_net_netvsc -Wl,-lrte_mempool_octeontx -Wl,-lrte_net_octeontx \
     -Wl,-lrte_bus_ifpga -Wl,-lrte_stack -Wl,-lrte_telemetry\
     -Wl,--no-whole-archive -Wl,-lm -Wl,-lrt -Wl,-lnuma -Wl,-ldl -Wl,-export-dynamic -Wl,-export-dynamic \
     -Wl,--as-needed -Wl,-export-dynamic -Wl,-Map=ltran.map -Wl,--cref")
+if(NOT CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "loongarch64")
+    set_target_properties(ltran_test PROPERTIES LINK_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-lrte_net_i40e")
+endif()
 target_include_directories(ltran_test PRIVATE ${LIB_PATH})
 target_link_libraries(ltran_test PRIVATE config boundscheck cunit pthread)
-- 
2.27.0

