From 8b61fcc29a978a72f029c6e92e81d2f0fa4a4d20 Mon Sep 17 00:00:00 2001 From: Martchus Date: Fri, 3 Nov 2017 22:41:51 +0100 Subject: [PATCH] Make location of code generator customizable --- generator/CMakeLists.txt | 10 ++++++---- lib/cmake/modules/ReflectionGenerator.cmake | 18 ++++++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt index 5f91671..a35cf2c 100644 --- a/generator/CMakeLists.txt +++ b/generator/CMakeLists.txt @@ -45,7 +45,12 @@ list(APPEND PRIVATE_LIBRARIES clangTooling) # also add reflective_rapidjson which is header-only but might pull additional include dirs for RapidJSON list(APPEND PRIVATE_LIBRARIES reflective_rapidjson) -# trigger code generator because the tests already contain structs to be (de)serialized +# include modules to apply configuration +include(BasicConfig) +include(WindowsResources) +include(AppTarget) + +# trigger code generator for tests because the tests already contain structs to be (de)serialized include(ReflectionGenerator) add_reflection_generator_invocation( INPUT_FILES @@ -58,9 +63,6 @@ add_reflection_generator_invocation( ) # include modules to apply configuration -include(BasicConfig) -include(WindowsResources) -include(AppTarget) include(TestTarget) include(ShellCompletion) include(Doxygen) diff --git a/lib/cmake/modules/ReflectionGenerator.cmake b/lib/cmake/modules/ReflectionGenerator.cmake index df43211..01cbb14 100644 --- a/lib/cmake/modules/ReflectionGenerator.cmake +++ b/lib/cmake/modules/ReflectionGenerator.cmake @@ -7,10 +7,20 @@ endif() set(REFLECTION_GENERATOR_MODULE_LOADED YES) # find code generator -set(REFLECTION_GENERATOR_EXECUTABLE reflective_rapidjson_generator) -if(CMAKE_CROSSCOMPILING OR NOT TARGET "${REFLECTION_GENERATOR_EXECUTABLE}") - # find "reflective_rapidjson_moc" from path - find_program(REFLECTION_GENERATOR_EXECUTABLE "${REFLECTION_GENERATOR_EXECUTABLE}") +set(DEFAULT_REFLECTION_GENERATOR_EXECUTABLE "reflective_rapidjson_generator") +set(CUSTOM_REFLECTION_GENERATOR_EXECUTABLE "" CACHE FILEPATH "path to executable of reflection generator") +if(CUSTOM_REFLECTION_GENERATOR_EXECUTABLE) + # use custom generator executable + if(NOT FILE "${CUSTOM_REFLECTION_GENERATOR_EXECUTABLE}") + message(FATAL_ERROR "The specified code generator executable \"${CUSTOM_REFLECTION_GENERATOR_EXECUTABLE}\" does not exist.") + endif() + set(REFLECTION_GENERATOR_EXECUTABLE "${CUSTOM_REFLECTION_GENERATOR_EXECUTABLE}") +elseif(CMAKE_CROSSCOMPILING OR NOT TARGET "${DEFAULT_REFLECTION_GENERATOR_EXECUTABLE}") + # find native/external "reflective_rapidjson_generator" + find_program(REFLECTION_GENERATOR_EXECUTABLE "${DEFAULT_REFLECTION_GENERATOR_EXECUTABLE}") +else() + # use "reflective_rapidjson_generator" target + set(REFLECTION_GENERATOR_EXECUTABLE "${DEFAULT_REFLECTION_GENERATOR_EXECUTABLE}") endif() if(NOT REFLECTION_GENERATOR_EXECUTABLE) message(FATAL_ERROR "Unable to find executable of generator for reflection code.")