cmake: parse DPDK config without compilation 96/17096/3
authorDamjan Marion <damarion@cisco.com>
Sat, 26 Jan 2019 17:50:29 +0000 (18:50 +0100)
committerDave Barach <openvpp@barachs.net>
Sat, 26 Jan 2019 20:32:00 +0000 (20:32 +0000)
Previous scheme was not cross-compile friendly...

Change-Id: Ib103b136231673157a02b8750312aa6073052c7e
Signed-off-by: Damjan Marion <damarion@cisco.com>
src/plugins/dpdk/CMakeLists.txt

index 6c987ec..a5cfea5 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-if (CMAKE_CROSSCOMPILING)
-  # not supported yet
-  return()
-endif()
-
 ##############################################################################
 # macros
 ##############################################################################
@@ -46,64 +41,27 @@ if (NOT DPDK_LIB)
 endif()
 
 ##############################################################################
-# Find DPDK Version
-##############################################################################
-file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/dpdk_vars.c
-"
-#include <stdio.h>
-#include <rte_version.h>
-int main()
-{
-  printf(\"VERSION=%s\\n\", strchr(rte_version(), ' ') + 1);
-  printf(\"RTE_PKTMBUF_HEADROOM=%u\\n\", RTE_PKTMBUF_HEADROOM);
-#ifdef RTE_LIBRTE_PMD_AESNI_MB
-  printf(\"RTE_LIBRTE_PMD_AESNI_MB=%u\\n\", RTE_LIBRTE_PMD_AESNI_MB);
-#endif
-#ifdef RTE_LIBRTE_PMD_AESNI_GCM
-  printf(\"RTE_LIBRTE_PMD_AESNI_GCM=%u\\n\", RTE_LIBRTE_PMD_AESNI_GCM);
-#endif
-#ifdef RTE_LIBRTE_MLX4_PMD
-  printf(\"RTE_LIBRTE_MLX4_PMD=%u\\n\", RTE_LIBRTE_MLX4_PMD);
-#endif
-#ifdef RTE_LIBRTE_MLX5_PMD
-  printf(\"RTE_LIBRTE_MLX5_PMD=%u\\n\", RTE_LIBRTE_MLX5_PMD);
-#ifdef RTE_LIBRTE_MLX5_DLOPEN_DEPS
-  printf(\"RTE_LIBRTE_MLX5_DLOPEN_DEPS=%u\\n\", RTE_LIBRTE_MLX5_DLOPEN_DEPS);
-#endif
-#endif
-  return 0;
-}
-")
-
-try_compile(DPDK_VARS_COMPILED
-  ${CMAKE_CURRENT_BINARY_DIR}
-  ${CMAKE_CURRENT_BINARY_DIR}/dpdk_vars.c
-  CMAKE_FLAGS
-  -DINCLUDE_DIRECTORIES=${DPDK_INCLUDE_DIR}
-  COPY_FILE ${CMAKE_CURRENT_BINARY_DIR}/dpdk_vars.bin
-)
+# Parse DPDK config and version header files
+##############################################################################
 
-if(DPDK_VARS_COMPILED)
-  execute_process(
-    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-    COMMAND ./dpdk_vars.bin
-    OUTPUT_VARIABLE DPDK_VARS
-    OUTPUT_STRIP_TRAILING_WHITESPACE
-  )
-  string(REPLACE "\n" ";" DPDK_VARS ${DPDK_VARS})
-  foreach(v ${DPDK_VARS})
-    string(REPLACE "=" ";" v ${v})
+file(STRINGS ${DPDK_INCLUDE_DIR}/rte_config.h rte_config)
+file(STRINGS ${DPDK_INCLUDE_DIR}/rte_version.h rte_version)
+
+foreach(l ${rte_config} ${rte_version})
+  if (l MATCHES "^#define[\t ]*RTE_")
+    STRING(REGEX REPLACE "^#define[\t ]*([A-Z1-9_]+)[\t ]*(.+)" "\\1;\\2" v "${l}")
     list(GET v 0 name)
     list(GET v 1 value)
     set(DPDK_${name} ${value})
-  endforeach()
-endif()
+  endif()
+endforeach()
 
-file(REMOVE
-  ${CMAKE_CURRENT_BINARY_DIR}/dpdk_vars.c
-  ${CMAKE_CURRENT_BINARY_DIR}/dpdk_vars.bin
-)
+set(DPDK_VERSION
+    "${DPDK_RTE_VER_YEAR}.${DPDK_RTE_VER_MONTH}.${DPDK_RTE_VER_MINOR}")
 
+##############################################################################
+# verify headroom size
+##############################################################################
 if(NOT ${DPDK_RTE_PKTMBUF_HEADROOM} EQUAL ${PRE_DATA_SIZE})
   message(
     FATAL_ERROR