From 2a65804259e8c139c2d556f1c3e95f435280b4d2 Mon Sep 17 00:00:00 2001
From: Aloys Augustin <aloaugus@cisco.com>
Date: Tue, 13 Oct 2020 15:43:00 +0200
Subject: [PATCH] build: forward dependencies to arch-specific libs

Without this, if a multiarch source depends on a generated api header
for instance, the build would be racy between the api header generation
and the multiarch object compilation.

Type: improvement
Signed-off-by: Aloys Augustin <aloaugus@cisco.com>
Change-Id: I08fcd0e5a1c51398ac1a8f37cf6562064b400d4a
---
 src/cmake/cpu.cmake     | 5 ++++-
 src/cmake/library.cmake | 2 +-
 src/cmake/plugin.cmake  | 8 +++++---
 3 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/cmake/cpu.cmake b/src/cmake/cpu.cmake
index c7ad1a4a0bc..37bc24c09b5 100644
--- a/src/cmake/cpu.cmake
+++ b/src/cmake/cpu.cmake
@@ -121,12 +121,15 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)")
   endif()
 endif()
 
-macro(vpp_library_set_multiarch_sources lib)
+macro(vpp_library_set_multiarch_sources lib deps)
   foreach(V ${MARCH_VARIANTS})
     list(GET V 0 VARIANT)
     list(GET V 1 VARIANT_FLAGS)
     set(l ${lib}_${VARIANT})
     add_library(${l} OBJECT ${ARGN})
+    if("${deps}")
+      add_dependencies(${l} ${deps})
+    endif()
     set_target_properties(${l} PROPERTIES POSITION_INDEPENDENT_CODE ON)
     target_compile_options(${l} PUBLIC "-DCLIB_MARCH_VARIANT=${VARIANT}")
     separate_arguments(VARIANT_FLAGS)
diff --git a/src/cmake/library.cmake b/src/cmake/library.cmake
index d6a63d325e9..06248a57aa3 100644
--- a/src/cmake/library.cmake
+++ b/src/cmake/library.cmake
@@ -39,7 +39,7 @@ macro(add_vpp_library lib)
   )
 
   if(ARG_MULTIARCH_SOURCES)
-    vpp_library_set_multiarch_sources(${lib} ${ARG_MULTIARCH_SOURCES})
+    vpp_library_set_multiarch_sources(${lib} "${ARG_DEPENDS}" ${ARG_MULTIARCH_SOURCES})
   endif()
 
   if(ARG_API_FILES)
diff --git a/src/cmake/plugin.cmake b/src/cmake/plugin.cmake
index c37e349477e..1bcff5559ff 100644
--- a/src/cmake/plugin.cmake
+++ b/src/cmake/plugin.cmake
@@ -45,17 +45,19 @@ macro(add_vpp_plugin name)
   endforeach()
   add_library(${plugin_name} SHARED ${PLUGIN_SOURCES} ${api_includes})
   set_target_properties(${plugin_name} PROPERTIES NO_SONAME 1)
+  set(deps "")
   if(PLUGIN_API_FILES)
-    add_dependencies(${plugin_name} ${plugin_name}_api_headers)
+    list(APPEND deps ${plugin_name}_api_headers)
   endif()
   if(NOT VPP_EXTERNAL_PROJECT)
-    add_dependencies(${plugin_name} vpp_version_h api_headers)
+    list(APPEND deps vpp_version_h api_headers)
   endif()
+  add_dependencies(${plugin_name} ${deps})
   set_target_properties(${plugin_name} PROPERTIES
     PREFIX ""
     LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/vpp_plugins)
   if(PLUGIN_MULTIARCH_SOURCES)
-    vpp_library_set_multiarch_sources(${plugin_name} ${PLUGIN_MULTIARCH_SOURCES})
+    vpp_library_set_multiarch_sources(${plugin_name} "${deps}" ${PLUGIN_MULTIARCH_SOURCES})
   endif()
   if(PLUGIN_LINK_LIBRARIES)
     target_link_libraries(${plugin_name} ${PLUGIN_LINK_LIBRARIES})