aboutsummaryrefslogtreecommitdiff
path: root/layers
diff options
context:
space:
mode:
authorChia-I Wu <olv@lunarg.com>2014-12-19 10:59:01 +0800
committerCourtney Goeltzenleuchter <courtney@LunarG.com>2015-02-04 17:57:22 -0700
commitd3fe36960552a8c6d80b7263f83eb6b5871f31fc (patch)
tree034ed08f5c967f623baaa74258ad5143c4055f0f /layers
parent099d9e41739f98ec5e505b07fb04895e8131656b (diff)
downloadusermoji-d3fe36960552a8c6d80b7263f83eb6b5871f31fc.tar.xz
layers: fix parallel building
Listing outputs of a add_custom_command() in multiple independent targets creates races. The file generation should be driven by a custom target which all independent targets depend on.
Diffstat (limited to 'layers')
-rw-r--r--layers/CMakeLists.txt73
1 files changed, 52 insertions, 21 deletions
diff --git a/layers/CMakeLists.txt b/layers/CMakeLists.txt
index 012191d1..386979a4 100644
--- a/layers/CMakeLists.txt
+++ b/layers/CMakeLists.txt
@@ -1,17 +1,23 @@
cmake_minimum_required (VERSION 2.8.11)
-add_custom_command(OUTPUT generic_layer.c xgl_enum_string_helper.h xgl_struct_string_helper.h xgl_struct_graphviz_helper.h xgl_struct_string_helper_no_addr.h api_dump.c api_dump_file.c api_dump_no_addr.c object_track.c
- COMMAND ${PROJECT_SOURCE_DIR}/xgl-layer-generate.py Generic > generic_layer.c
- COMMAND ${PROJECT_SOURCE_DIR}/xgl-helper.py --gen_enum_string_helper ${PROJECT_SOURCE_DIR}/include/xgl.h --abs_out_dir ${CMAKE_CURRENT_BINARY_DIR}
- COMMAND ${PROJECT_SOURCE_DIR}/xgl-helper.py --gen_struct_wrappers ${PROJECT_SOURCE_DIR}/include/xgl.h --abs_out_dir ${CMAKE_CURRENT_BINARY_DIR}
- COMMAND ${PROJECT_SOURCE_DIR}/xgl-helper.py --gen_graphviz ${PROJECT_SOURCE_DIR}/include/xgl.h --abs_out_dir ${CMAKE_CURRENT_BINARY_DIR}
- COMMAND ${PROJECT_SOURCE_DIR}/xgl-layer-generate.py ApiDump > api_dump.c
- COMMAND ${PROJECT_SOURCE_DIR}/xgl-layer-generate.py ApiDumpFile > api_dump_file.c
- COMMAND ${PROJECT_SOURCE_DIR}/xgl-layer-generate.py ApiDumpNoAddr > api_dump_no_addr.c
- COMMAND ${PROJECT_SOURCE_DIR}/xgl-layer-generate.py ObjectTracker > object_track.c
- DEPENDS ${PROJECT_SOURCE_DIR}/xgl-layer-generate.py
- ${PROJECT_SOURCE_DIR}/xgl-helper.py
- ${PROJECT_SOURCE_DIR}/xgl.py)
+macro(run_xgl_helper subcmd)
+ add_custom_command(OUTPUT ${ARGN}
+ COMMAND ${PROJECT_SOURCE_DIR}/xgl-helper.py --${subcmd} ${PROJECT_SOURCE_DIR}/include/xgl.h --abs_out_dir ${CMAKE_CURRENT_BINARY_DIR}
+ DEPENDS ${PROJECT_SOURCE_DIR}/xgl-helper.py
+ )
+endmacro()
+
+macro(run_xgl_layer_generate subcmd output)
+ add_custom_command(OUTPUT ${output}
+ COMMAND ${PROJECT_SOURCE_DIR}/xgl-layer-generate.py ${subcmd} > ${output}
+ DEPENDS ${PROJECT_SOURCE_DIR}/xgl-layer-generate.py ${PROJECT_SOURCE_DIR}/xgl.py
+ )
+endmacro()
+
+macro(add_xgl_layer target)
+ add_library(XGLLayer${target} SHARED ${ARGN})
+ add_dependencies(XGLLayer${target} generate_xgl_layer_helpers)
+endmacro()
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
@@ -20,12 +26,37 @@ include_directories(
set (CMAKE_CXX_FLAGS "-std=c++11")
-add_library (XGLLayerBasic SHARED basic.cpp)
-add_library (XGLLayerGeneric SHARED generic_layer.c)
-add_library (XGLLayerMulti SHARED multi.cpp)
-add_library (XGLLayerObjectTracker SHARED object_track.c object_track.h)
-add_library (XGLLayerAPIDump SHARED api_dump.c xgl_enum_string_helper.h xgl_struct_string_helper.h)
-add_library (XGLLayerAPIDumpFile SHARED api_dump_file.c xgl_enum_string_helper.h xgl_struct_string_helper.h)
-add_library (XGLLayerAPIDumpNoAddr SHARED api_dump_no_addr.c xgl_enum_string_helper.h xgl_struct_string_helper_no_addr.h)
-add_library (XGLLayerDrawState SHARED draw_state.c xgl_enum_string_helper.h xgl_struct_string_helper.h xgl_struct_string_helper.h)
-add_library (XGLLayerMemTracker SHARED mem_tracker.c xgl_enum_string_helper.h xgl_struct_string_helper.h)
+run_xgl_helper(gen_enum_string_helper xgl_enum_string_helper.h)
+run_xgl_helper(gen_struct_wrappers
+ xgl_struct_string_helper.h
+ xgl_struct_string_helper_no_addr.h
+ xgl_struct_wrappers.h
+ xgl_struct_wrappers.cpp
+)
+run_xgl_helper(gen_graphviz xgl_struct_graphviz_helper.h)
+
+add_custom_target(generate_xgl_layer_helpers DEPENDS
+ xgl_enum_string_helper.h
+ xgl_struct_string_helper.h
+ xgl_struct_string_helper_no_addr.h
+ xgl_struct_wrappers.h
+ xgl_struct_wrappers.cpp
+ xgl_struct_graphviz_helper.h
+)
+
+run_xgl_layer_generate(Generic generic_layer.c)
+run_xgl_layer_generate(ApiDump api_dump.c)
+run_xgl_layer_generate(ApiDumpFile api_dump_file.c)
+run_xgl_layer_generate(ApiDumpNoAddr api_dump_no_addr.c)
+run_xgl_layer_generate(ObjectTracker object_track.c)
+
+add_xgl_layer(Basic basic.cpp)
+add_xgl_layer(Multi multi.cpp)
+add_xgl_layer(DrawState draw_state.c)
+add_xgl_layer(MemTracker mem_tracker.c)
+# generated
+add_xgl_layer(Generic generic_layer.c)
+add_xgl_layer(APIDump api_dump.c)
+add_xgl_layer(APIDumpFile api_dump_file.c)
+add_xgl_layer(APIDumpNoAddr api_dump_no_addr.c)
+add_xgl_layer(ObjectTracker object_track.c)