Merge pull request #10313 from ronald-cron-arm/dependency-on-generated-files-dev

cmake: library: Fix potential concurrent file generation
diff --git a/ChangeLog.d/fix-dependency-on-generated-files.txt b/ChangeLog.d/fix-dependency-on-generated-files.txt
new file mode 100644
index 0000000..b3e7e4e
--- /dev/null
+++ b/ChangeLog.d/fix-dependency-on-generated-files.txt
@@ -0,0 +1,3 @@
+Bugfix
+    * Fix potential CMake parallel build failure when building both the static
+      and shared libraries.
diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt
index 0875bb9..5b8dc80 100644
--- a/library/CMakeLists.txt
+++ b/library/CMakeLists.txt
@@ -85,10 +85,17 @@
             ${CMAKE_CURRENT_SOURCE_DIR}/../framework/scripts/generate_ssl_debug_helpers.py
             ${tls_error_headers}
     )
-else()
-    link_to_source(error.c)
-    link_to_source(version_features.c)
-    link_to_source(ssl_debug_helpers_generated.c)
+
+    add_custom_target(${MBEDTLS_TARGET_PREFIX}mbedx509_generated_files_target
+        DEPENDS
+            ${CMAKE_CURRENT_BINARY_DIR}/error.c
+    )
+
+    add_custom_target(${MBEDTLS_TARGET_PREFIX}mbedtls_generated_files_target
+        DEPENDS
+            ${CMAKE_CURRENT_BINARY_DIR}/ssl_debug_helpers_generated.c
+            ${CMAKE_CURRENT_BINARY_DIR}/version_features.c
+    )
 endif()
 
 if(CMAKE_COMPILER_IS_GNUCC)
@@ -166,6 +173,13 @@
     target_compile_options(${mbedtls_static_target} PRIVATE ${LIBS_C_FLAGS})
     set_target_properties(${mbedtls_static_target} PROPERTIES OUTPUT_NAME mbedtls)
     target_link_libraries(${mbedtls_static_target} PUBLIC ${libs} ${mbedx509_static_target})
+
+    if(GEN_FILES)
+        add_dependencies(${mbedx509_static_target}
+            ${MBEDTLS_TARGET_PREFIX}mbedx509_generated_files_target)
+        add_dependencies(${mbedtls_static_target}
+            ${MBEDTLS_TARGET_PREFIX}mbedtls_generated_files_target)
+    endif()
 endif(USE_STATIC_MBEDTLS_LIBRARY)
 
 if(USE_SHARED_MBEDTLS_LIBRARY)
@@ -180,6 +194,13 @@
     target_compile_options(${mbedtls_target} PRIVATE ${LIBS_C_FLAGS})
     set_target_properties(${mbedtls_target} PROPERTIES VERSION 4.0.0 SOVERSION 21)
     target_link_libraries(${mbedtls_target} PUBLIC ${libs} ${mbedx509_target})
+
+    if(GEN_FILES)
+        add_dependencies(${mbedx509_target}
+            ${MBEDTLS_TARGET_PREFIX}mbedx509_generated_files_target)
+        add_dependencies(${mbedtls_target}
+            ${MBEDTLS_TARGET_PREFIX}mbedtls_generated_files_target)
+    endif()
 endif(USE_SHARED_MBEDTLS_LIBRARY)
 
 foreach(target IN LISTS target_libraries)