cmake: support using a separate build directory
authorAdam Simpkins <simpkins@fb.com>
Sat, 13 Jan 2018 00:02:57 +0000 (16:02 -0800)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Sat, 13 Jan 2018 00:07:43 +0000 (16:07 -0800)
Summary:
Fix rules in the CMakeLists.txt file that generate source files to first create
their output directory if necessary.  This allows the build to succeed when
building with a separate build output directory, rather than placing build
artifacts in the source tree itself.

Reviewed By: meyering

Differential Revision: D6710436

fbshipit-source-id: 786a65a37a70833e7e4a5affe4df292626dbb591

CMakeLists.txt

index a5dcf63..f144675 100755 (executable)
@@ -48,23 +48,32 @@ set(FOLLY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/folly")
 find_package(PythonInterp REQUIRED)
 add_custom_command(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/folly/build/EscapeTables.cpp
 find_package(PythonInterp REQUIRED)
 add_custom_command(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/folly/build/EscapeTables.cpp
-  COMMAND ${PYTHON_EXECUTABLE} "${FOLLY_DIR}/build/generate_escape_tables.py"
+  COMMAND
+    ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/folly/build
+  COMMAND
+    ${PYTHON_EXECUTABLE} "${FOLLY_DIR}/build/generate_escape_tables.py"
+    --install_dir ${CMAKE_CURRENT_BINARY_DIR}/folly/build
   DEPENDS ${FOLLY_DIR}/build/generate_escape_tables.py
   DEPENDS ${FOLLY_DIR}/build/generate_escape_tables.py
-  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/folly/build/
   COMMENT "Generating the escape tables..." VERBATIM
 )
 add_custom_command(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/folly/build/FormatTables.cpp
   COMMENT "Generating the escape tables..." VERBATIM
 )
 add_custom_command(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/folly/build/FormatTables.cpp
-  COMMAND ${PYTHON_EXECUTABLE} "${FOLLY_DIR}/build/generate_format_tables.py"
+  COMMAND
+    ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/folly/build
+  COMMAND
+    ${PYTHON_EXECUTABLE} "${FOLLY_DIR}/build/generate_format_tables.py"
+    --install_dir ${CMAKE_CURRENT_BINARY_DIR}/folly/build
   DEPENDS ${FOLLY_DIR}/build/generate_format_tables.py
   DEPENDS ${FOLLY_DIR}/build/generate_format_tables.py
-  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/folly/build/
   COMMENT "Generating the format tables..." VERBATIM
 )
 add_custom_command(
   OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/folly/build/GroupVarintTables.cpp"
   COMMENT "Generating the format tables..." VERBATIM
 )
 add_custom_command(
   OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/folly/build/GroupVarintTables.cpp"
-  COMMAND ${PYTHON_EXECUTABLE} "${FOLLY_DIR}/build/generate_varint_tables.py"
+  COMMAND
+    ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/folly/build
+  COMMAND
+    ${PYTHON_EXECUTABLE} "${FOLLY_DIR}/build/generate_varint_tables.py"
+    --install_dir ${CMAKE_CURRENT_BINARY_DIR}/folly/build
   DEPENDS ${FOLLY_DIR}/build/generate_varint_tables.py
   DEPENDS ${FOLLY_DIR}/build/generate_varint_tables.py
-  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/folly/build/
   COMMENT "Generating the group varint tables..." VERBATIM
 )
 
   COMMENT "Generating the group varint tables..." VERBATIM
 )
 
@@ -226,9 +235,12 @@ source_group("" FILES ${FOLLY_DIR}/build/GenerateFingerprintTables.cpp)
 # Compile the fingerprint tables.
 add_custom_command(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/folly/build/FingerprintTables.cpp
 # Compile the fingerprint tables.
 add_custom_command(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/folly/build/FingerprintTables.cpp
-  COMMAND GenerateFingerprintTables
+  COMMAND
+    ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/folly/build
+  COMMAND
+    GenerateFingerprintTables
+    --install_dir ${CMAKE_CURRENT_BINARY_DIR}/folly/build
   DEPENDS GenerateFingerprintTables
   DEPENDS GenerateFingerprintTables
-  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/folly/build/
   COMMENT "Generating the fingerprint tables..."
 )
 add_library(folly_fingerprint STATIC
   COMMENT "Generating the fingerprint tables..."
 )
 add_library(folly_fingerprint STATIC