aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/dpdk/CMakeLists.txt
diff options
context:
space:
mode:
authorDamjan Marion <damarion@cisco.com>2018-07-30 12:45:07 +0200
committerFlorin Coras <florin.coras@gmail.com>2018-08-17 22:14:39 +0000
commit612dd6a955e44d2c0fed1801fb8de585ca695c63 (patch)
treea49c3004a7122077a884dce483daebc280199761 /src/plugins/dpdk/CMakeLists.txt
parent5d82d2f1495e189c4687a6462850cbbb3ea38b17 (diff)
CMake as an alternative to autotools (experimental)
Change-Id: Ibc59323e849810531dd0963e85493efad3b86857 Signed-off-by: Damjan Marion <damarion@cisco.com>
Diffstat (limited to 'src/plugins/dpdk/CMakeLists.txt')
-rw-r--r--src/plugins/dpdk/CMakeLists.txt100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/plugins/dpdk/CMakeLists.txt b/src/plugins/dpdk/CMakeLists.txt
new file mode 100644
index 00000000000..e1494492628
--- /dev/null
+++ b/src/plugins/dpdk/CMakeLists.txt
@@ -0,0 +1,100 @@
+# Copyright (c) 2016 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+##############################################################################
+# Find lib and include files
+##############################################################################
+find_path(DPDK_INCLUDE_DIR PATH_SUFFIXES dpdk NAMES rte_config.h HINTS
+ ${DPDK_INCLUDE_DIR_HINT})
+find_library(DPDK_LIB NAMES libdpdk.a HINTS ${DPDK_LIB_DIR_HINT})
+
+##############################################################################
+# Find DPDK Version
+##############################################################################
+file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/dpdk_version.c
+"
+#include <stdio.h>
+#include <rte_version.h>
+int main()
+{
+ puts(strchr(rte_version(), ' ') + 1);
+ return 0;
+}
+")
+
+try_compile(DPDK_VERSION_COMPILED
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${CMAKE_CURRENT_BINARY_DIR}/dpdk_version.c
+ CMAKE_FLAGS
+ -DINCLUDE_DIRECTORIES=${DPDK_INCLUDE_DIR}
+ COPY_FILE ${CMAKE_CURRENT_BINARY_DIR}/dpdk_version.bin
+)
+
+if(DPDK_VERSION_COMPILED)
+ execute_process(
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ COMMAND ./dpdk_version.bin
+ OUTPUT_VARIABLE DPDK_VERSION
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+endif()
+
+file(REMOVE
+ ${CMAKE_CURRENT_BINARY_DIR}/dpdk_version.c
+ ${CMAKE_CURRENT_BINARY_DIR}/dpdk_version.bin
+)
+
+
+##############################################################################
+# DPDK plugin
+##############################################################################
+if(DPDK_INCLUDE_DIR AND DPDK_LIB)
+ include_directories (${DPDK_INCLUDE_DIR})
+ add_vpp_plugin(dpdk_plugin
+ buffer.c
+ main.c
+ thread.c
+ api/dpdk_api.c
+ api/dpdk_test.c
+ device/cli.c
+ device/common.c
+ device/device.c
+ device/flow.c
+ device/format.c
+ device/init.c
+ device/node.c
+ hqos/hqos.c
+ ipsec/cli.c
+ ipsec/crypto_node.c
+ ipsec/esp_decrypt.c
+ ipsec/esp_encrypt.c
+ ipsec/ipsec.c
+ api/dpdk.api
+ )
+
+ vpp_library_set_multiarch_sources(dpdk_plugin
+ buffer.c
+ device/device.c
+ device/node.c
+ )
+
+ get_filename_component(DPDK_LIB_DIR ${DPDK_LIB} DIRECTORY)
+ set(DPDK_LINK_FLAGS "-L${DPDK_LIB_DIR} -Wl,--whole-archive,${DPDK_LIB},--no-whole-archive")
+ set(DPDK_LINK_FLAGS "${DPDK_LINK_FLAGS} -Wl,--exclude-libs,libIPSec_MB.a,-l:libIPSec_MB.a")
+ set(DPDK_LINK_FLAGS "${DPDK_LINK_FLAGS} -Wl,-lnuma")
+ set_target_properties(dpdk_plugin PROPERTIES LINK_FLAGS "${DPDK_LINK_FLAGS}")
+ message("-- Found DPDK ${DPDK_VERSION}: ${DPDK_INCLUDE_DIR} ${DPDK_LIB}")
+else()
+ message("-- DPDK not found - dpdk_plugin disabled")
+endif()
+