Skip to content

Commit

Permalink
Add a 'dist' target
Browse files Browse the repository at this point in the history
The 'dist' target builds a source archive that include the source files
generated with the generator.
Building from that source does not require LLVM nor Clang.
  • Loading branch information
layus committed Sep 19, 2016
1 parent 8f3b66e commit 53491c1
Show file tree
Hide file tree
Showing 8 changed files with 99 additions and 35 deletions.
26 changes: 26 additions & 0 deletions CMakeLists.txt
Expand Up @@ -53,6 +53,19 @@ if(WIN32)
set(DEFAULT_MOZART_GENERATOR_FLAGS "-DMOZART_WINDOWS=1" ${DEFAULT_MOZART_GENERATOR_FLAGS})
endif()

# CMake does not allow to add dependencies to "builtin" targets like package_source.
# We therefore wrap package_source in our own dist target.

add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source)
configure_file(cmake_local/MozartConfigVersion.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/cmake_local/MozartConfigVersion.cmake @ONLY)
define_property(GLOBAL PROPERTY SRCS_INSTALLED_DIRS
BRIEF_DOCS "List of source files"
FULL_DOCS "List of source/dest pairs of path to be included in the source archive")
set_property(GLOBAL APPEND PROPERTY SRCS_INSTALLED_DIRS
"${CMAKE_CURRENT_SOURCE_DIR}" "/"
"${CMAKE_CURRENT_BINARY_DIR}/cmake_local/" "/cmake_local/")

# The subdirectories which contain the real thing

add_subdirectory(vm)
Expand Down Expand Up @@ -111,6 +124,19 @@ set(CPACK_RPM_PACKAGE_ARCHITECTURE "${MOZART_PROP_PLATFORM_ARCH}")
set(CPACK_RPM_PACKAGE_REQUIRES "tcl >= 8.5, tk >= 8.5, emacs")
set(CPACK_RPM_PACKAGE_GROUP "Development/Languages")

# Configuration of the Source generator

set(CPACK_SOURCE_GENERATOR "ZIP")
get_property(CPACK_SOURCE_INSTALLED_DIRECTORIES GLOBAL PROPERTY SRCS_INSTALLED_DIRS)
set(CPACK_SOURCE_IGNORE_FILES
"/\\\\.git"
"\\\\.astbi$"
"\\\\.ast$"
"/bootcompiler/project/project/"
"/bootcompiler/project/target/"
"/bootcompiler/target/"
)

# Configuration of Inno Setup files

if(WIN32)
Expand Down
4 changes: 4 additions & 0 deletions cmake_local/MozartConfigVersion.cmake.in
@@ -0,0 +1,4 @@

set(MOZART_PROP_OZ_VERSION "@MOZART_PROP_OZ_VERSION@")
set(MOZART_PROP_OZ_DATE "@MOZART_PROP_OZ_DATE@")

61 changes: 35 additions & 26 deletions cmake_local/MozartProperties.cmake
Expand Up @@ -14,40 +14,49 @@ endif()

target_architecture(MOZART_PROP_PLATFORM_ARCH)

# For source tarballs, oz.version and os.date
# are exported id MozartConfigVersion.cmake
include(MozartConfigVersion
RESULT_VARIABLE MOZART_CACHED_BUILD OPTIONAL)

# oz.version

execute_process(
COMMAND ${GIT_EXECUTABLE} describe --dirty
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_VARIABLE git_describe_output
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)

if("${git_describe_output}" MATCHES "^v[0-9].+-[0-9]+-g[0-9a-f]+(-dirty)?$")
string(REGEX REPLACE "^v(.+)-([0-9]+)-g([0-9a-f]+)((-dirty)?)$" "\\1+build.\\2.\\3\\4"
MOZART_PROP_OZ_VERSION "${git_describe_output}")
elseif("${git_describe_output}" MATCHES "^v[0-9].+[0-9](-dirty)?$")
string(REGEX REPLACE "^v(.+)$" "\\1"
MOZART_PROP_OZ_VERSION "${git_describe_output}")
else()
message(WARNING "'git describe --dirty' did not return something sensible")
set(MOZART_PROP_OZ_VERSION "unknown")
if(NOT MOZART_CACHED_BUILD)
execute_process(
COMMAND ${GIT_EXECUTABLE} describe --dirty
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_VARIABLE git_describe_output
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)

if("${git_describe_output}" MATCHES "^v[0-9].+-[0-9]+-g[0-9a-f]+(-dirty)?$")
string(REGEX REPLACE "^v(.+)-([0-9]+)-g([0-9a-f]+)((-dirty)?)$" "\\1+build.\\2.\\3\\4"
MOZART_PROP_OZ_VERSION "${git_describe_output}")
elseif("${git_describe_output}" MATCHES "^v[0-9].+[0-9](-dirty)?$")
string(REGEX REPLACE "^v(.+)$" "\\1"
MOZART_PROP_OZ_VERSION "${git_describe_output}")
else()
message(WARNING "'git describe --dirty' did not return something sensible")
set(MOZART_PROP_OZ_VERSION "unknown")
endif()

unset(git_describe_output)
endif()

unset(git_describe_output)

# oz.date

execute_process(
COMMAND ${GIT_EXECUTABLE} log "--format=%aD" -1
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_VARIABLE git_date_output
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT MOZART_CACHED_BUILD)
execute_process(
COMMAND ${GIT_EXECUTABLE} log "--format=%aD" -1
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_VARIABLE git_date_output
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)

set(MOZART_PROP_OZ_DATE "${git_date_output}")
set(MOZART_PROP_OZ_DATE "${git_date_output}")

unset(git_date_output)
unset(git_date_output)
endif()

# Display which version we found

Expand Down
2 changes: 1 addition & 1 deletion lib/CMakeLists.txt
Expand Up @@ -103,7 +103,7 @@ add_custom_command(
set(STAGE_0_OUTPUTS "${STAGE_0_BASE_OZF}")

foreach(FUNCTOR "${RUNTIME_FUNCTOR}" "${INIT_FUNCTOR}" ${SYS_FUNCTORS} ${COMPILER_FUNCTORS})
if("${FUNCTOR}" MATCHES "${INIT_FUNCTOR}")
if("${FUNCTOR}" STREQUAL "${INIT_FUNCTOR}")
set(FUNCTOR_OZF "${STAGE_0_CACHE}/Init.ozf")
else()
get_filename_component(FUNCTOR_BASENAME ${FUNCTOR} NAME_WE)
Expand Down
8 changes: 8 additions & 0 deletions vm/boostenv/main/CMakeLists.txt
Expand Up @@ -98,6 +98,14 @@ add_custom_target(genboostsources
DEPENDS ${GENERATED_BOOSTSOURCES_DIR}/boostenv.gen
VERBATIM)


# Include the generated files in the source archive.

set_property(GLOBAL APPEND PROPERTY SRCS_INSTALLED_DIRS
"${GENERATED_BOOSTSOURCES_DIR}" "/vm/boostenv/main/cached/")

add_dependencies(dist genboostsources)

# Boost environment library
include_directories(${GENERATED_BOOSTSOURCES_DIR})

Expand Down
5 changes: 3 additions & 2 deletions vm/generator/CMakeLists.txt
@@ -1,5 +1,6 @@
if("${LLVM_SRC_DIR}" STREQUAL "${DEFAULT_LLVM_SRC_DIR}" AND
NOT EXISTS "${LLVM_BUILD_DIR}/bin/clang++")
if("${LLVM_SRC_DIR}" STREQUAL "${DEFAULT_LLVM_SRC_DIR}"
AND NOT EXISTS "${LLVM_BUILD_DIR}/bin/clang++"
AND NOT MOZART_CACHED_BUILD)

separate_arguments(LLVM_CMAKE_ARGS UNIX_COMMAND
"-DCMAKE_BUILD_TYPE=Release
Expand Down
19 changes: 13 additions & 6 deletions vm/generator/main/CMakeLists.txt
Expand Up @@ -11,16 +11,23 @@ find_library(CLANG_LIBRARY
NAMES clang libclang
PATHS "${LLVM_BUILD_DIR}/lib"
NO_DEFAULT_PATH)
if("${CLANG_LIBRARY}" MATCHES "CLANG_LIBRARY-NOTFOUND")
message(FATAL_ERROR "Could not find clang library in ${LLVM_BUILD_DIR}")
endif()

include_directories(
"${LLVM_SRC_DIR}/include"
"${LLVM_BUILD_DIR}/include"
"${CLANG_SRC_DIR}/include"
"${CLANG_BUILD_DIR}/include")
link_directories("${LLVM_BUILD_DIR}/lib")
add_executable(generator EXCLUDE_FROM_ALL
generator.cc interfaces.cc implementations.cc builtins.cc utils.cc)
target_link_libraries(generator "${CLANG_LIBRARY}")

if(NOT CLANG_LIBRARY)
if(NOT MOZART_CACHED_BUILD)
message(FATAL_ERROR "Could not find clang library in ${LLVM_BUILD_DIR}")
set("CLANG_LIBRARY" "/not_found/")
endif()
# With MOZART_CACHED_BUILD, we should not require LLVM/Clang at all
# TODO: Fail verbosely if target "generator" is ever required.
else()
add_executable(generator EXCLUDE_FROM_ALL
generator.cc interfaces.cc implementations.cc builtins.cc utils.cc)
target_link_libraries(generator "${CLANG_LIBRARY}")
endif()
9 changes: 9 additions & 0 deletions vm/vm/main/CMakeLists.txt
Expand Up @@ -66,6 +66,15 @@ add_custom_target(gensources
DEPENDS ${GENERATED_SOURCES_DIR}/mozart.gen
VERBATIM)


# Include the generated files in the source archive.

set_property(GLOBAL APPEND PROPERTY SRCS_INSTALLED_DIRS
"${GENERATED_SOURCES_DIR}" "/vm/vm/main/cached/")

add_dependencies(dist gensources)


# Build the library
include_directories(${GENERATED_SOURCES_DIR})
add_library(mozartvm emulate.cc memmanager.cc gcollect.cc
Expand Down

0 comments on commit 53491c1

Please sign in to comment.