diff options
| author | Mike Stroyan <stroyan@google.com> | 2016-09-16 09:45:14 -0600 |
|---|---|---|
| committer | Mike Stroyan <stroyan@google.com> | 2016-09-26 12:58:31 -0600 |
| commit | fb18430fb1f3b05689feff932aa8b0995e7cd607 (patch) | |
| tree | 028ef5ca87c89d4ce17ec5b3aaafc1d3a3baa754 | |
| parent | 1c6d9f04ee624023f6b35c061148743521c13443 (diff) | |
| download | usermoji-fb18430fb1f3b05689feff932aa8b0995e7cd607.tar.xz | |
build: Fix parallel build of layers
Change layer dependencies to prevent collisions of scripts creating headers.
Use dependency on one custom target for each group of headers built by a custom command.
The layers json targets need to depend on the layers targets.
They expect to copy into a directory created by those targets.
Make dependency of vk_safe_struct.cpp indirect through generate_vk_layer_helpers.
That will wait for a single build of the generated files.
| -rw-r--r-- | layers/CMakeLists.txt | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/layers/CMakeLists.txt b/layers/CMakeLists.txt index 456844fa..a5f38f0b 100644 --- a/layers/CMakeLists.txt +++ b/layers/CMakeLists.txt @@ -40,6 +40,7 @@ if (WIN32) COMMAND copy ${src_json} ${dst_json} VERBATIM ) + add_dependencies(${config_file}-json ${config_file}) endforeach(config_file) else() foreach (config_file ${LAYER_JSON_FILES}) @@ -49,6 +50,7 @@ if (WIN32) COMMAND copy ${src_json} ${dst_json} VERBATIM ) + add_dependencies(${config_file}-json ${config_file}) endforeach(config_file) endif() endif() @@ -60,6 +62,7 @@ else() COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/linux/${config_file}.json VERBATIM ) + add_dependencies(${config_file}-json ${config_file}) endforeach(config_file) endif() endif() @@ -72,14 +75,14 @@ if (WIN32) ) add_library(VkLayer_${target} SHARED ${ARGN} VkLayer_${target}.def) target_link_Libraries(VkLayer_${target} VkLayer_utils) - add_dependencies(VkLayer_${target} generate_vk_layer_helpers) + add_dependencies(VkLayer_${target} generate_dispatch_table_helper generate_vk_layer_helpers generate_enum_string_helper VkLayer_utils) set_target_properties(VkLayer_${target} PROPERTIES LINK_FLAGS "/DEF:${CMAKE_CURRENT_BINARY_DIR}/VkLayer_${target}.def") endmacro() else() macro(add_vk_layer target) add_library(VkLayer_${target} SHARED ${ARGN}) target_link_Libraries(VkLayer_${target} VkLayer_utils) - add_dependencies(VkLayer_${target} generate_vk_layer_helpers) + add_dependencies(VkLayer_${target} generate_dispatch_table_helper generate_vk_layer_helpers generate_enum_string_helper VkLayer_utils) set_target_properties(VkLayer_${target} PROPERTIES LINK_FLAGS "-Wl,-Bsymbolic") install(TARGETS VkLayer_${target} DESTINATION ${PROJECT_BINARY_DIR}/install_staging) endmacro() @@ -117,12 +120,40 @@ run_vk_helper(gen_struct_wrappers vk_struct_wrappers.h vk_struct_wrappers.cpp vk_safe_struct.h +# Don't list vk_safe_struct.cpp as OUTPUT to avoid duplicate builds. +# If listed here use of it for add_library will cause it to be created +# independently of custom target generate_vk_layer_helpers . +# That breaks parallel builds. +# vk_safe_struct.cpp +) + +# Let gen_struct_wrappers really create vk_safe_struct.cpp +add_custom_command(OUTPUT vk_safe_struct.cpp + COMMAND echo defer making vk_safe_struct.cpp +) + +set_source_files_properties( + vk_struct_string_helper.h + vk_struct_string_helper_cpp.h + vk_struct_string_helper_no_addr.h + vk_struct_string_helper_no_addr_cpp.h + vk_struct_size_helper.h + vk_struct_size_helper.c + vk_struct_wrappers.h + vk_struct_wrappers.cpp + vk_safe_struct.h vk_safe_struct.cpp + PROPERTIES GENERATED TRUE) + +add_custom_target(generate_enum_string_helper DEPENDS + vk_enum_string_helper.h ) -add_custom_target(generate_vk_layer_helpers DEPENDS +add_custom_target(generate_dispatch_table_helper DEPENDS vk_dispatch_table_helper.h - vk_enum_string_helper.h +) + +add_custom_target(generate_vk_layer_helpers DEPENDS vk_struct_string_helper.h vk_struct_string_helper_no_addr.h vk_struct_string_helper_cpp.h |
