Revision: 65859
http://sourceforge.net/p/brlcad/code/65859
Author: starseeker
Date: 2015-08-09 15:42:35 +0000 (Sun, 09 Aug 2015)
Log Message:
-----------
Make a stab at cleaning up a problem where we were using outputs from one
add_custom_command in multiple build targets. Per the CMake documentation this
isn't safe for parallel builds. Need to do a systematic check through the
build logic to see if we're doing this anywhere else. These changes need
testing in heavily parallel environments to see if they are adequate - for
example, it may be necessary to assign the include directories for the obj
targets on a per target basis in stead of using the global include_directories
command to make sure one of the targets doesn't end up trying to use a header
from the other directory (we could have unique header names too - I'm not sure
which is the best way to go with that yet.)
Modified Paths:
--------------
brlcad/trunk/src/conv/step/CMakeLists.txt
brlcad/trunk/src/conv/step/g-step/CMakeLists.txt
brlcad/trunk/src/libgcv/CMakeLists.txt
Modified: brlcad/trunk/src/conv/step/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/conv/step/CMakeLists.txt 2015-08-07 22:17:59 UTC (rev
65858)
+++ brlcad/trunk/src/conv/step/CMakeLists.txt 2015-08-09 15:42:35 UTC (rev
65859)
@@ -30,7 +30,7 @@
# Because SCHEMA_OUT_DIR is the working directory for exp2cxx, it must be
# created at configure time and be present when exp2cxx is run
- set(SCHEMA_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/${SCHEMA_NAME})
+ set(SCHEMA_OUT_DIR
${CMAKE_CURRENT_BINARY_DIR}/${SCHEMA_NAME}_${TARGET_SUFFIX})
make_directory(${SCHEMA_OUT_DIR})
include_directories(${SCHEMA_OUT_DIR})
DISTCLEAN(${SCHEMA_OUT_DIR})
@@ -56,10 +56,7 @@
)
# Define a common custom build target that ensures the exp2cxx outputs
- # are present. Do this rather than relying on custom commands in the
- # subdirectories to avoid multiple build targets trying to run exp2cxx
- # simultaneously to generate identical inputs (unknown if that is
problematic)
- # and to add extra robustness for parallel build target ordering.
+ # are present.
set(WATCHED_FILES ${EXPRESS_OUTPUT})
string(REPLACE " " "\\ " WATCHED_FILES "${WATCHED_FILES}")
set(STAMP_OUT_FILE ${SCHEMA_OUT_DIR}/step_express_${SCHEMA_NAME}.done)
Modified: brlcad/trunk/src/conv/step/g-step/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/conv/step/g-step/CMakeLists.txt 2015-08-07 22:17:59 UTC
(rev 65858)
+++ brlcad/trunk/src/conv/step/g-step/CMakeLists.txt 2015-08-09 15:42:35 UTC
(rev 65859)
@@ -74,6 +74,8 @@
)
CMAKEFILES(${IGNORE_FILES})
+GENERATE_SCHEMA_INPUTS(${STEP_SCHEMA_FILE} list_elements)
+
set(list_elements_srcs ${express_srcs} list_elements.cpp)
BRLCAD_ADDEXEC(list_elements "${list_elements_srcs}" "${gstep_LIBS}" NO_STRICT
NO_INSTALL)
if(MSVC)
Modified: brlcad/trunk/src/libgcv/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/libgcv/CMakeLists.txt 2015-08-07 22:17:59 UTC (rev
65858)
+++ brlcad/trunk/src/libgcv/CMakeLists.txt 2015-08-09 15:42:35 UTC (rev
65859)
@@ -3,15 +3,24 @@
${CMAKE_CURRENT_BINARY_DIR}
)
-PERPLEX_TARGET(OBJ_Scanner wfobj/obj_rules.l
- ${CMAKE_CURRENT_BINARY_DIR}/obj_rules.cpp
${CMAKE_CURRENT_BINARY_DIR}/obj_scanner.h)
-LEMON_TARGET(OBJ_Parser wfobj/obj_grammar.yy
- ${CMAKE_CURRENT_BINARY_DIR}/obj_grammar.cpp
${CMAKE_CURRENT_BINARY_DIR}/obj_grammar.hpp)
-ADD_PERPLEX_LEMON_DEPENDENCY(OBJ_Scanner OBJ_Parser)
+# For parallel safety, need separate names and files for each target.
+# Should probably rework this whole perplex/lemon combo into one macro,
+# since this will be the common pattern.
+macro(GEN_OBJ_SRCS targetname)
+ file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/OBJ_${targetname}_SRCS)
+ include_directories(${CMAKE_CURRENT_BINARY_DIR}/OBJ_${targetname}_SRCS)
+ DISTCLEAN(${CMAKE_CURRENT_BINARY_DIR}/OBJ_${targetname}_SRCS)
+ PERPLEX_TARGET(OBJ_${targetname}_Scanner wfobj/obj_rules.l
+
${CMAKE_CURRENT_BINARY_DIR}/OBJ_${targetname}_SRCS/obj_${targetname}_rules.cpp
${CMAKE_CURRENT_BINARY_DIR}/OBJ_${targetname}_SRCS/obj_scanner.h)
+ LEMON_TARGET(OBJ_${targetname}_Parser wfobj/obj_grammar.yy
+
${CMAKE_CURRENT_BINARY_DIR}/OBJ_${targetname}_SRCS/obj_${targetname}_grammar.cpp
${CMAKE_CURRENT_BINARY_DIR}/OBJ_${targetname}_SRCS/obj_grammar.hpp)
+ ADD_PERPLEX_LEMON_DEPENDENCY(OBJ_${targetname}_Scanner
OBJ_${targetname}_Parser)
+endmacro(GEN_OBJ_SRCS)
+GEN_OBJ_SRCS(obj-g)
set(OBJ_G_SRCS
- ${CMAKE_CURRENT_BINARY_DIR}/obj_grammar.cpp
- ${CMAKE_CURRENT_BINARY_DIR}/obj_rules.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/OBJ_obj-g_SRCS/obj_obj-g_grammar.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/OBJ_obj-g_SRCS/obj_obj-g_rules.cpp
wfobj/obj_parser.cpp
../conv/obj-g.c
wfobj/tri_face.c
@@ -41,6 +50,8 @@
)
BRLCAD_LIB_INCLUDE_DIRS(gcv GCV_INCLUDE_DIRS "")
+
+GEN_OBJ_SRCS(libgcv)
set(LIBGCV_SOURCES
bottess.c
facetize.c
@@ -49,6 +60,8 @@
region_end_mc.c
tri_intersect.c
bot_solidity.c
+ ${CMAKE_CURRENT_BINARY_DIR}/OBJ_libgcv_SRCS/obj_libgcv_grammar.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/OBJ_libgcv_SRCS/obj_libgcv_rules.cpp
)
list(APPEND LIBGCV_SOURCES
@@ -63,8 +76,6 @@
conv/obj/obj_read.c
wfobj/obj_parser.cpp
wfobj/tri_face.c
- ${CMAKE_CURRENT_BINARY_DIR}/obj_grammar.cpp
- ${CMAKE_CURRENT_BINARY_DIR}/obj_rules.cpp
)
BRLCAD_ADDLIB(libgcv "${LIBGCV_SOURCES}" "librt;libwdb;libbu")
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits