diff --git a/CMakeLists.txt b/CMakeLists.txt index ccc56d8a708f7c3270277f2c54796656655aacfc..e2ac3d1a2351e05061e897249bee425b774fbbdb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,9 @@ cmake_minimum_required (VERSION 2.8) project (cell_algorithms) enable_language(CXX) +# save incoming CXX flags for forwarding to modparser external project +set(SAVED_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + # compilation flags set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -pthread -Wall") @@ -14,10 +17,25 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS "YES") set(CMAKE_LIBRARY_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}/include) include_directories(${CMAKE_SOURCE_DIR}/src) include_directories(${CMAKE_SOURCE_DIR}) +add_subdirectory(mechanisms) add_subdirectory(src) add_subdirectory(tests) diff --git a/external/modparser b/external/modparser index d1dd8fa868c0dc7e348093ed4a4b5c6c94e29e34..dcfb69f8cfc435418dfb95348d613c9830e6ad6f 160000 --- a/external/modparser +++ b/external/modparser @@ -1 +1 @@ -Subproject commit d1dd8fa868c0dc7e348093ed4a4b5c6c94e29e34 +Subproject commit dcfb69f8cfc435418dfb95348d613c9830e6ad6f diff --git a/mechanisms/CMakeLists.txt b/mechanisms/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..ff2be3e3ea49e4c0871382d0c1e7a1d8a9847aa6 --- /dev/null +++ b/mechanisms/CMakeLists.txt @@ -0,0 +1,19 @@ +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}) + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8a8286bda8e314d47f5e89b2b454bd6b84709e67..125f99dbf7db9a4900b5f402021e23eb463f1677 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -9,3 +9,5 @@ set(BASE_SOURCES ) add_library(cellalgo ${BASE_SOURCES} ${HEADERS}) +add_dependencies(cellalgo build_all_mods) +