Skip to content

Commit

Permalink
Allow caching of generated sources
Browse files Browse the repository at this point in the history
  • Loading branch information
layus committed Sep 19, 2016
1 parent 7f83066 commit 8f3b66e
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 35 deletions.
7 changes: 4 additions & 3 deletions boosthost/emulator/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,13 @@ endif()

# Mozart VM library

include_directories("${MOZART_DIR}/vm/vm/main" "${MOZART_BUILD_DIR}/vm/vm/main")
get_property(GENERATED_SOURCES_DIR GLOBAL PROPERTY GENERATED_SOURCES_DIR)
include_directories("${MOZART_DIR}/vm/vm/main" "${GENERATED_SOURCES_DIR}")

# Mozart VM Boost environment library

include_directories("${MOZART_DIR}/vm/boostenv/main"
"${MOZART_BUILD_DIR}/vm/boostenv/main")
get_property(GENERATED_BOOSTSOURCES_DIR GLOBAL PROPERTY GENERATED_BOOSTSOURCES_DIR)
include_directories("${MOZART_DIR}/vm/boostenv/main" "${GENERATED_BOOSTSOURCES_DIR}")


# Compile the executable
Expand Down
3 changes: 2 additions & 1 deletion lib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,9 @@ set(BOOTCOMPILER_DEFINES -D NO_GUMP)
set(BOOTCOMPILER_BASEENV_DATA_FILE "${STAGE_0_CACHE}/baseenv.txt")
set(BOOTCOMPILER_COMMAND
${Java_JAVA_EXECUTABLE} -jar ${JAVA_OPTIONS} "${BOOTCOMPILER_JAR}")
get_property(GENERATED_SOURCES_DIR GLOBAL PROPERTY GENERATED_SOURCES_DIR)
set(BOOTCOMPILER_COMMON_OPTIONS
-m "${MOZART_BUILD_DIR}/vm/vm/main/"
-m "${GENERATED_SOURCES_DIR}/"
${BOOTCOMPILER_DEFINES})
set(BOOTCOMPILER_COMMON_DEPENDS
gensources bootcompiler "${BOOTCOMPILER_JAR}")
Expand Down
44 changes: 28 additions & 16 deletions vm/boostenv/main/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,61 +33,73 @@ endif()

# Mozart VM library

include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../vm/main"
"${CMAKE_CURRENT_BINARY_DIR}/../../vm/main")
get_property(GENERATED_SOURCES_DIR GLOBAL PROPERTY GENERATED_SOURCES_DIR)
include_directories("${MOZART_SOURCE_DIR}/vm/vm/main" "${GENERATED_SOURCES_DIR}")
link_directories("${MOZART_BINARY_DIR}/vm/vm/main")

link_directories("${CMAKE_CURRENT_BINARY_DIR}/../../vm/main")

include_directories(${CMAKE_CURRENT_BINARY_DIR})
set(GENERATED_BOOSTSOURCES_CACHED_DIR ${CMAKE_CURRENT_SOURCE_DIR}/cached/)
set(GENERATED_BOOSTSOURCES_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated/)

# Generate sources

add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/boostenv.gen
OUTPUT ${GENERATED_BOOSTSOURCES_BINARY_DIR}/boostenv.gen

# First pass: generate data types and interfaces
COMMAND ${LLVM_BUILD_DIR}/bin/clang++ "${CXX_STD_OPT}"
-Wno-invalid-noreturn -Wno-return-type
-o ${CMAKE_CURRENT_BINARY_DIR}/boostenv.ast
-o ${GENERATED_BOOSTSOURCES_BINARY_DIR}/boostenv.ast
-I ${Boost_INCLUDE_DIRS}
-I ${CMAKE_CURRENT_SOURCE_DIR}/../../vm/main
-DMOZART_GENERATOR
${MOZART_GENERATOR_FLAGS}
${CMAKE_CURRENT_SOURCE_DIR}/boostenv.hh
COMMAND generator intfimpl
${CMAKE_CURRENT_BINARY_DIR}/boostenv.ast
${CMAKE_CURRENT_BINARY_DIR}/
${GENERATED_BOOSTSOURCES_BINARY_DIR}/boostenv.ast
${GENERATED_BOOSTSOURCES_BINARY_DIR}/

# Second pass: generate builtin information
COMMAND ${LLVM_BUILD_DIR}/bin/clang++ "${CXX_STD_OPT}"
-Wno-invalid-noreturn -Wno-return-type
-o ${CMAKE_CURRENT_BINARY_DIR}/boostenvmodules.astbi
-o ${GENERATED_BOOSTSOURCES_BINARY_DIR}/boostenvmodules.astbi
-I ${Boost_INCLUDE_DIRS}
-I ${CMAKE_CURRENT_BINARY_DIR}
-I ${GENERATED_BOOSTSOURCES_BINARY_DIR}
-I ${CMAKE_CURRENT_SOURCE_DIR}/../../vm/main
-I ${CMAKE_CURRENT_BINARY_DIR}/../../vm/main
-I ${GENERATED_BOOSTSOURCES_BINARY_DIR}/../../vm/main
-DMOZART_BUILTIN_GENERATOR
${MOZART_GENERATOR_FLAGS}
${CMAKE_CURRENT_SOURCE_DIR}/boostenvmodules.hh
COMMAND generator builtins
${CMAKE_CURRENT_BINARY_DIR}/boostenvmodules.astbi
${CMAKE_CURRENT_BINARY_DIR}/
${GENERATED_BOOSTSOURCES_BINARY_DIR}/boostenvmodules.astbi
${GENERATED_BOOSTSOURCES_BINARY_DIR}/
boostenvbuiltins

# Tag
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/boostenv.gen
COMMAND ${CMAKE_COMMAND} -E touch ${GENERATED_BOOSTSOURCES_BINARY_DIR}/boostenv.gen

DEPENDS generator gensources
IMPLICIT_DEPENDS CXX "${CMAKE_CURRENT_SOURCE_DIR}/boostenvmodules.hh"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Generate sources for boostenv"
VERBATIM)


# Use the cached files if they exist.

if(EXISTS ${GENERATED_BOOSTSOURCES_CACHED_DIR}/boostenv.gen)
set(GENERATED_BOOSTSOURCES_DIR ${GENERATED_BOOSTSOURCES_CACHED_DIR})
else()
set(GENERATED_BOOSTSOURCES_DIR ${GENERATED_BOOSTSOURCES_BINARY_DIR})
file(MAKE_DIRECTORY ${GENERATED_BOOSTSOURCES_BINARY_DIR})
endif()
set_property(GLOBAL PROPERTY GENERATED_BOOSTSOURCES_DIR "${GENERATED_BOOSTSOURCES_DIR}")

add_custom_target(genboostsources
DEPENDS boostenv.gen
DEPENDS ${GENERATED_BOOSTSOURCES_DIR}/boostenv.gen
VERBATIM)

# Boost environment library
include_directories(${GENERATED_BOOSTSOURCES_DIR})

add_library(mozartvmboost boostvm.cc boostenvmodules.cc)
add_dependencies(mozartvmboost genboostsources)
4 changes: 2 additions & 2 deletions vm/generator/main/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@ include_directories(
"${CLANG_SRC_DIR}/include"
"${CLANG_BUILD_DIR}/include")
link_directories("${LLVM_BUILD_DIR}/lib")
add_executable(generator generator.cc interfaces.cc implementations.cc
builtins.cc utils.cc)
add_executable(generator EXCLUDE_FROM_ALL
generator.cc interfaces.cc implementations.cc builtins.cc utils.cc)
target_link_libraries(generator "${CLANG_LIBRARY}")
38 changes: 26 additions & 12 deletions vm/vm/main/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,59 +1,73 @@
include_directories(${CMAKE_CURRENT_BINARY_DIR})

separate_arguments(SPLIT_CXX_FLAGS UNIX_COMMAND "${CMAKE_CXX_FLAGS}")
set(MOZART_GENERATOR_FLAGS "${MOZART_GENERATOR_FLAGS}" "${SPLIT_CXX_FLAGS}")

# properties-config.cc

include_directories(${CMAKE_CURRENT_BINARY_DIR})
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/properties-config.cc.in"
"${CMAKE_CURRENT_BINARY_DIR}/properties-config.cc"
ESCAPE_QUOTES @ONLY)

# Generated sources

set(GENERATED_SOURCES_CACHED_DIR ${CMAKE_CURRENT_SOURCE_DIR}/cached/)
set(GENERATED_SOURCES_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated/)

add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mozart.gen
OUTPUT ${GENERATED_SOURCES_BINARY_DIR}/mozart.gen

# First pass: generate data types and interfaces
COMMAND ${LLVM_BUILD_DIR}/bin/clang++ -std=c++0x
-Wno-invalid-noreturn -Wno-return-type
-o ${CMAKE_CURRENT_BINARY_DIR}/mozart.ast
-o ${GENERATED_SOURCES_BINARY_DIR}/mozart.ast
-DMOZART_GENERATOR
${MOZART_GENERATOR_FLAGS}
${CMAKE_CURRENT_SOURCE_DIR}/mozart.hh
COMMAND generator intfimpl
${CMAKE_CURRENT_BINARY_DIR}/mozart.ast
${CMAKE_CURRENT_BINARY_DIR}/
${GENERATED_SOURCES_BINARY_DIR}/mozart.ast
${GENERATED_SOURCES_BINARY_DIR}/

# Second pass: generate builtin information
COMMAND ${LLVM_BUILD_DIR}/bin/clang++ -std=c++0x
-Wno-invalid-noreturn -Wno-return-type
-o ${CMAKE_CURRENT_BINARY_DIR}/coremodules.astbi
-I ${CMAKE_CURRENT_BINARY_DIR}
-o ${GENERATED_SOURCES_BINARY_DIR}/coremodules.astbi
-I ${GENERATED_SOURCES_BINARY_DIR}
-DMOZART_BUILTIN_GENERATOR
${MOZART_GENERATOR_FLAGS}
${CMAKE_CURRENT_SOURCE_DIR}/coremodules.hh
COMMAND generator builtins
${CMAKE_CURRENT_BINARY_DIR}/coremodules.astbi
${CMAKE_CURRENT_BINARY_DIR}/
${GENERATED_SOURCES_BINARY_DIR}/coremodules.astbi
${GENERATED_SOURCES_BINARY_DIR}/
mozartbuiltins

# Tag
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/mozart.gen
COMMAND ${CMAKE_COMMAND} -E touch ${GENERATED_SOURCES_BINARY_DIR}/mozart.gen

DEPENDS generator
IMPLICIT_DEPENDS CXX "${CMAKE_CURRENT_SOURCE_DIR}/coremodules.hh"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Generate sources for mozart"
VERBATIM)


# Use the cached files if they exist.

if(EXISTS ${GENERATED_SOURCES_CACHED_DIR}/mozart.gen)
set(GENERATED_SOURCES_DIR ${GENERATED_SOURCES_CACHED_DIR})
else()
set(GENERATED_SOURCES_DIR ${GENERATED_SOURCES_BINARY_DIR})
file(MAKE_DIRECTORY ${GENERATED_SOURCES_BINARY_DIR})
endif()
set_property(GLOBAL PROPERTY GENERATED_SOURCES_DIR "${GENERATED_SOURCES_DIR}")

add_custom_target(gensources
DEPENDS mozart.gen
DEPENDS ${GENERATED_SOURCES_DIR}/mozart.gen
VERBATIM)

# Build the library

include_directories(${GENERATED_SOURCES_DIR})
add_library(mozartvm emulate.cc memmanager.cc gcollect.cc
unify.cc sclone.cc vm.cc coredatatypes.cc coders.cc properties.cc
coremodules.cc unpickler.cc serializer.cc pickler.cc)
Expand Down
3 changes: 2 additions & 1 deletion vm/vm/test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# Mozart VM library

get_property(GENERATED_SOURCES_DIR GLOBAL PROPERTY GENERATED_SOURCES_DIR)
include_directories(
"${CMAKE_CURRENT_SOURCE_DIR}/../main"
"${CMAKE_CURRENT_BINARY_DIR}/../main")
"${GENERATED_SOURCES_DIR}")

if(MINGW)
# GTest seems to use some non-standard things :-s
Expand Down

0 comments on commit 8f3b66e

Please sign in to comment.