Skip to content
Snippets Groups Projects
Commit 4967bf30 authored by Sam Yates's avatar Sam Yates
Browse files

Use externalproject_add to manage mod->hpp depenedencies.

Builds modcc from modparser as an external project;
executable will reside under BUILD/external/bin where
BUILD is the CMake build directory.

CMake hackery (see 'build_all_mods' target) should generate
required module .hpp files from .mod files before the
cellalgo library is built, if the header files are
missing or out of date.

This should also suffice for performing out-of-source
builds.
parent 9ada48a5
No related branches found
No related tags found
No related merge requests found
...@@ -4,6 +4,9 @@ cmake_minimum_required (VERSION 2.8) ...@@ -4,6 +4,9 @@ cmake_minimum_required (VERSION 2.8)
project (cell_algorithms) project (cell_algorithms)
enable_language(CXX) enable_language(CXX)
# save incoming CXX flags for forwarding to modparser external project
set(SAVED_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
# compilation flags # compilation flags
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -pthread -Wall") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -pthread -Wall")
...@@ -14,10 +17,25 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS "YES") ...@@ -14,10 +17,25 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS "YES")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
# targets for extermal dependencies
include(ExternalProject)
externalproject_add(modparser
PREFIX ${CMAKE_BINARY_DIR}/external
CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/external"
"-DCMAKE_CXX_FLAGS=${SAVED_CXX_FLAGS}"
"-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
BINARY_DIR "${CMAKE_BINARY_DIR}/external/modparser"
STAMP_DIR "${CMAKE_BINARY_DIR}/external/"
TMP_DIR "${CMAKE_BINARY_DIR}/external/tmp"
SOURCE_DIR "${CMAKE_SOURCE_DIR}/external/modparser"
)
include_directories(${CMAKE_SOURCE_DIR}/external) include_directories(${CMAKE_SOURCE_DIR}/external)
include_directories(${CMAKE_SOURCE_DIR}/include) include_directories(${CMAKE_SOURCE_DIR}/include)
include_directories(${CMAKE_SOURCE_DIR}/src) include_directories(${CMAKE_SOURCE_DIR}/src)
include_directories(${CMAKE_SOURCE_DIR}) include_directories(${CMAKE_SOURCE_DIR})
add_subdirectory(mechanisms)
add_subdirectory(src) add_subdirectory(src)
add_subdirectory(tests) add_subdirectory(tests)
Subproject commit d1dd8fa868c0dc7e348093ed4a4b5c6c94e29e34 Subproject commit dcfb69f8cfc435418dfb95348d613c9830e6ad6f
set(mechanisms pas hh)
set(modcc "${CMAKE_BINARY_DIR}/external/bin/modcc")
foreach(mech ${mechanisms})
set(mod "${CMAKE_CURRENT_SOURCE_DIR}/mod/${mech}.mod")
set(hpp "${CMAKE_CURRENT_SOURCE_DIR}/${mech}.hpp")
message(STATUS "add_cc for ${hpp}")
add_custom_command(OUTPUT "${hpp}"
DEPENDS modparser "${mod}"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
COMMAND "${modcc}" -t cpu -o "${hpp}" "${mod}")
set_source_files_properties("${hpp}" PROPERTIES GENERATED TRUE)
list(APPEND all_mod_hpps "${hpp}")
endforeach()
# Fake target to always trigger .mod -> .hpp dependencies because wtf CMake
add_custom_target(build_all_mods DEPENDS ${all_mod_hpps})
...@@ -9,3 +9,5 @@ set(BASE_SOURCES ...@@ -9,3 +9,5 @@ set(BASE_SOURCES
) )
add_library(cellalgo ${BASE_SOURCES} ${HEADERS}) add_library(cellalgo ${BASE_SOURCES} ${HEADERS})
add_dependencies(cellalgo build_all_mods)
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment