Apply cmake-format

This commit is contained in:
Martchus 2019-02-09 21:25:11 +01:00
parent 39dcba215e
commit 1f6fade6c2
3 changed files with 144 additions and 159 deletions

View File

@ -15,8 +15,7 @@ set(HEADER_FILES
frontendaction.h
consumer.h
visitor.h
clangversionabstraction.h
)
clangversionabstraction.h)
set(SRC_FILES
codegenerator.cpp
serializationcodegenerator.cpp
@ -27,24 +26,14 @@ set(SRC_FILES
consumer.cpp
clangversionabstraction.cpp
visitor.cpp
main.cpp
)
set(TEST_HEADER_FILES
tests/helper.h
)
set(TEST_SRC_FILES
tests/binarygenerator.cpp
)
main.cpp)
set(TEST_HEADER_FILES tests/helper.h)
set(TEST_SRC_FILES tests/binarygenerator.cpp)
# add JSON-specific test cases
if (RapidJSON_FOUND)
list(APPEND TEST_HEADER_FILES
tests/structs.h
tests/morestructs.h
)
list(APPEND TEST_SRC_FILES
tests/jsongenerator.cpp
)
list(APPEND TEST_HEADER_FILES tests/structs.h tests/morestructs.h)
list(APPEND TEST_SRC_FILES tests/jsongenerator.cpp)
endif ()
# link against c++utilities
@ -52,7 +41,14 @@ use_cpp_utilities()
# find Clang for LibTooling; adding clangTooling should be sufficient as it pulls all transitive dependencies
find_package(Clang REQUIRED)
list(APPEND PRIVATE_LIBRARIES clangTooling clangFrontend clangAST clangLex clangSema clangBasic LLVM)
list(APPEND PRIVATE_LIBRARIES
clangTooling
clangFrontend
clangAST
clangLex
clangSema
clangBasic
LLVM)
# also add reflective_rapidjson which is header-only but might pull additional include dirs for RapidJSON
list(APPEND PRIVATE_LIBRARIES reflective_rapidjson)
@ -68,6 +64,7 @@ include(Doxygen)
# trigger code generator for tests because the tests already contain structs to be (de)serialized
if (TARGET reflective_rapidjson_generator_tests)
include(ReflectionGenerator)
# cmake-format: off
add_reflection_generator_invocation(
INPUT_FILES
tests/structs.h # used by test cases
@ -88,6 +85,7 @@ if(TARGET reflective_rapidjson_generator_tests)
JSON_VISIBILITY
LIB_EXPORT # not required, just to test setting visibility
)
# cmake-format: on
list(APPEND TEST_HEADER_FILES ${TEST_GENERATED_HEADER_FILES})
target_sources(reflective_rapidjson_generator_tests PRIVATE ${TEST_GENERATED_HEADER_FILES})
endif ()
@ -99,8 +97,8 @@ if(RapidJSON_FOUND)
endif ()
# add path of Clang's resource dir to config header so test cases can use it
string(APPEND META_CUSTOM_CONFIG "#define REFLECTION_GENERATOR_CLANG_RESOURCE_DIR \"${REFLECTION_GENERATOR_CLANG_RESOURCE_DIR}\"\n")
string(APPEND META_CUSTOM_CONFIG
"#define REFLECTION_GENERATOR_CLANG_RESOURCE_DIR \"${REFLECTION_GENERATOR_CLANG_RESOURCE_DIR}\"\n")
# make config header
include(ConfigHeader)

View File

@ -5,21 +5,12 @@ set(META_PROJECT_TYPE library)
set(META_HEADER_ONLY_LIB ON)
# add project files
set(HEADER_FILES
traits.h
)
set(SRC_FILES
)
set(TEST_HEADER_FILES
)
set(TEST_SRC_FILES
)
set(CMAKE_MODULE_FILES
cmake/modules/ReflectionGenerator.cmake
)
set(DOC_FILES
README.md
)
set(HEADER_FILES traits.h)
set(SRC_FILES)
set(TEST_HEADER_FILES)
set(TEST_SRC_FILES)
set(CMAKE_MODULE_FILES cmake/modules/ReflectionGenerator.cmake)
set(DOC_FILES README.md)
# add JSON-specific sources
if (RapidJSON_FOUND)
@ -28,13 +19,11 @@ if(RapidJSON_FOUND)
json/reflector-boosthana.h
json/reflector-chronoutilities.h
json/serializable.h
json/errorhandling.h
)
json/errorhandling.h)
list(APPEND TEST_SRC_FILES
tests/jsonreflector.cpp
tests/jsonreflector-boosthana.cpp
tests/jsonreflector-chronoutilities.cpp
)
tests/jsonreflector-chronoutilities.cpp)
endif ()
# add binary (de)serialization specific sources
@ -42,13 +31,11 @@ list(APPEND HEADER_FILES
binary/reflector.h
binary/reflector-boosthana.h
binary/reflector-chronoutilities.h
binary/serializable.h
)
binary/serializable.h)
list(APPEND TEST_SRC_FILES
tests/traits.cpp
tests/binaryreflector.cpp
tests/binaryreflector-boosthana.cpp
)
tests/binaryreflector-boosthana.cpp)
# add (only) the CMake module and include dirs for c++utilities because we're not depending on the actual library
list(APPEND CMAKE_MODULE_PATH ${CPP_UTILITIES_MODULE_DIRS})

View File

@ -16,34 +16,39 @@ if(REFLECTION_GENERATOR_EXECUTABLE)
endif ()
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}"
PATHS "/usr/bin" "/bin"
)
find_program(REFLECTION_GENERATOR_EXECUTABLE "${DEFAULT_REFLECTION_GENERATOR_EXECUTABLE}" PATHS "/usr/bin" "/bin")
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. Set REFLECTION_GENERATOR_EXECUTABLE to specify the path.")
message(
FATAL_ERROR
"Unable to find executable of generator for reflection code. Set REFLECTION_GENERATOR_EXECUTABLE to specify the path."
)
endif ()
# determine Clang's resource directory
set(REFLECTION_GENERATOR_CLANG_RESOURCE_DIR "" CACHE PATH "directory containing Clang's builtin headers, usually /usr/lib/clang/version")
set(REFLECTION_GENERATOR_CLANG_RESOURCE_DIR ""
CACHE PATH "directory containing Clang's builtin headers, usually /usr/lib/clang/version")
if (NOT REFLECTION_GENERATOR_CLANG_RESOURCE_DIR)
if (NOT REFLECTION_GENERATOR_CLANG_BIN)
find_program(REFLECTION_GENERATOR_CLANG_BIN clang
NAMES clang++
PATHS "/usr/bin" "/bin"
)
find_program(REFLECTION_GENERATOR_CLANG_BIN clang NAMES clang++ PATHS "/usr/bin" "/bin")
if (NOT REFLECTION_GENERATOR_CLANG_BIN)
message(FATAL_ERROR "Unable to find the clang executable to determine Clang's resource directory")
endif ()
endif ()
exec_program(${REFLECTION_GENERATOR_CLANG_BIN} ARGS -print-resource-dir OUTPUT_VARIABLE REFLECTION_GENERATOR_CLANG_RESOURCE_DIR)
exec_program(${REFLECTION_GENERATOR_CLANG_BIN}
ARGS
-print-resource-dir
OUTPUT_VARIABLE
REFLECTION_GENERATOR_CLANG_RESOURCE_DIR)
endif ()
if (NOT REFLECTION_GENERATOR_CLANG_RESOURCE_DIR OR NOT IS_DIRECTORY "${REFLECTION_GENERATOR_CLANG_RESOURCE_DIR}")
message(FATAL_ERROR "Unable to find Clang's resource directory. Set REFLECTION_GENERATOR_CLANG_RESOURCE_DIR manually to the corresponding path (usually /usr/lib/clang/\$version).")
message(
FATAL_ERROR
"Unable to find Clang's resource directory. Set REFLECTION_GENERATOR_CLANG_RESOURCE_DIR manually to the corresponding path (usually /usr/lib/clang/\$version)."
)
endif ()
message(STATUS "Using ${REFLECTION_GENERATOR_CLANG_RESOURCE_DIR} as Clang's resource directory for Reflective RapidJSON")
@ -57,19 +62,9 @@ set(REFLECTION_GENERATOR_TRIPLE "" CACHE STRING "platform triple for code genera
include(CMakeParseArguments)
function (add_reflection_generator_invocation)
# parse arguments
set(OPTIONAL_ARGS
)
set(ONE_VALUE_ARGS
OUTPUT_DIRECTORY
JSON_VISIBILITY
)
set(MULTI_VALUE_ARGS
INPUT_FILES
GENERATORS
OUTPUT_LISTS
CLANG_OPTIONS
CLANG_OPTIONS_FROM_TARGETS
JSON_CLASSES)
set(OPTIONAL_ARGS)
set(ONE_VALUE_ARGS OUTPUT_DIRECTORY JSON_VISIBILITY)
set(MULTI_VALUE_ARGS INPUT_FILES GENERATORS OUTPUT_LISTS CLANG_OPTIONS CLANG_OPTIONS_FROM_TARGETS JSON_CLASSES)
cmake_parse_arguments(ARGS "${OPTIONAL_ARGS}" "${ONE_VALUE_ARGS}" "${MULTI_VALUE_ARGS}" ${ARGN})
# determine file name or file path if none specified
@ -84,9 +79,10 @@ function(add_reflection_generator_invocation)
# apply specified REFLECTION_GENERATOR_TRIPLET
if (REFLECTION_GENERATOR_TRIPLE)
list(APPEND ARGS_CLANG_OPTIONS
-Xclang -triple
-Xclang "${REFLECTION_GENERATOR_TRIPLE}"
)
-Xclang
-triple
-Xclang
"${REFLECTION_GENERATOR_TRIPLE}")
endif ()
# apply specified REFLECTION_GENERATOR_INCLUDE_DIRECTORIES
@ -97,18 +93,21 @@ function(add_reflection_generator_invocation)
list(APPEND ARGS_CLANG_OPTIONS -I "${INCLUDE_DIR}")
endforeach ()
# add workaround for cross compiling with mingw-w64 to prevent host stdlib.h being included
# (not sure why specifying REFLECTION_GENERATOR_INCLUDE_DIRECTORIES is not enough to let it find this particular header file)
# add workaround for cross compiling with mingw-w64 to prevent host stdlib.h being included (not sure why specifying
# REFLECTION_GENERATOR_INCLUDE_DIRECTORIES is not enough to let it find this particular header file)
if (MINGW)
# find MinGW version of stdlib.h
find_file(MINGW_W64_STDLIB_H stdlib.h ${REFLECTION_GENERATOR_INCLUDE_DIRECTORIES})
if (NOT EXISTS "${MINGW_W64_STDLIB_H}")
message(FATAL_ERROR "Unable to locate MinGW version of stdlib.h. Ensure it is in REFLECTION_GENERATOR_INCLUDE_DIRECTORIES.")
message(
FATAL_ERROR
"Unable to locate MinGW version of stdlib.h. Ensure it is in REFLECTION_GENERATOR_INCLUDE_DIRECTORIES.")
endif ()
# ensure libtooling includes the MinGW version of stdlib.h rather than the host version
list(APPEND ARGS_CLANG_OPTIONS
-include "${MINGW_W64_STDLIB_H}"
-include
"${MINGW_W64_STDLIB_H}"
-D_STDLIB_H # prevent processing of host stdlib.h
)
endif ()
@ -139,24 +138,25 @@ function(add_reflection_generator_invocation)
# compose the CLI arguments and actually add the custom command
set(CLI_ARGUMENTS
--output-file "${OUTPUT_FILE}"
--input-file "${INPUT_FILE}"
--generators ${ARGS_GENERATORS}
--clang-opt ${ARGS_CLANG_OPTIONS}
--json-classes ${ARGS_JSON_CLASSES}
)
--output-file
"${OUTPUT_FILE}"
--input-file
"${INPUT_FILE}"
--generators
${ARGS_GENERATORS}
--clang-opt
${ARGS_CLANG_OPTIONS}
--json-classes
${ARGS_JSON_CLASSES})
if (ARGS_JSON_VISIBILITY)
list(APPEND CLI_ARGUMENTS --json-visibility "${ARGS_JSON_VISIBILITY}")
endif ()
add_custom_command(
OUTPUT "${OUTPUT_FILE}"
COMMAND "${REFLECTION_GENERATOR_EXECUTABLE}"
ARGS ${CLI_ARGUMENTS}
add_custom_command(OUTPUT "${OUTPUT_FILE}"
COMMAND "${REFLECTION_GENERATOR_EXECUTABLE}" ARGS ${CLI_ARGUMENTS}
DEPENDS "${INPUT_FILE}"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
COMMENT "Generating reflection code for ${INPUT_FILE}"
VERBATIM
)
VERBATIM)
# prevent Qt's code generator to be executed on the files generated by this code generator
set_property(SOURCE "${OUTPUT_FILE}" PROPERTY SKIP_AUTOGEN ON)