11cmake_minimum_required (VERSION 3.16)
22
3- project (dbc VERSION 0.1.1 DESCRIPTION "C++ DBC Parser" )
3+ project (dbc
4+ VERSION 0.2.0
5+ DESCRIPTION "C++ DBC Parser"
6+ )
7+
8+ # -- PROJECT OPTIONS -- #
9+ option (DBC_ENABLE_TESTS "Enable Unittests" ON )
10+ option (DBC_TEST_LOCALE_INDEPENDENCE "Used to deterime if the libary is locale agnostic when it comes to converting floats. You need `de_DE.UTF-8` locale installed for this testing." OFF )
11+ option (DBC_GENERATE_DOCS "Use doxygen if installed to generated documentation files" OFF )
12+ # ---------------------- #
413
514set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
615
@@ -12,14 +21,6 @@ set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE)
1221set (CPACK_RESOURCE_FILE_README ${CMAKE_CURRENT_SOURCE_DIR} /README.md )
1322include (CPack)
1423
15- option (DEBUG "use debug flag" NO )
16- option (ENABLE_TESTS "Enable Unittests" ON )
17- # Turn OFF, if you are using FetchContent to include it to your project
18- option (FETCH_CONTENT_INCLUSION "Include project with FetchContent_Declare in another project. In this case the headers and the cmake files are not needed, only the library" OFF )
19-
20- # defines variables used in the dbc.pc.in
21- include (GNUInstallDirs)
22-
2324# specify the C++ standard
2425set (CMAKE_CXX_STANDARD 11)
2526set (CMAKE_CXX_STANDARD_REQUIRED True )
@@ -37,80 +38,78 @@ if (NOT ${FastFloat_FOUND})
3738 add_subdirectory (${fastfloat_SOURCE_DIR} ${fastfloat_BINARY_DIR} EXCLUDE_FROM_ALL )
3839endif ()
3940
40- set (GCC_COMPILE_FLAGS "-Wextra -Wall -Wfloat-equal -Wundef -Wshadow \
41- -Wpointer-arith -Wcast-align -Wstrict-prototypes -Wwrite-strings \
42- -Waggregate-return -Wcast-qual -Wswitch-default -Wswitch-enum -Wconversion \
43- -Wunreachable-code -Wformat=2 -Werror -Wuninitialized -Winit-self" )
44-
45- if (DEBUG)
46- set (GCC_COMPILE_FLAGS ${GCC_COMPILE_FLAGS} " -g" )
47- else ()
48- set (GCC_COMPILE_FLAGS ${GCC_COMPILE_FLAGS} " -O2" )
49- endif ()
50-
51- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS} " )
52-
5341# add where to find the source files
54- # file(GLOB_RECURSE SOURCE ${PROJECT_SOURCE_DIR}/src/ *.cpp)
55- list (APPEND SOURCE ${PROJECT_SOURCE_DIR} /src/utils.cpp
56- ${PROJECT_SOURCE_DIR} /src/message.cpp
57- ${PROJECT_SOURCE_DIR} /src/signal.cpp
58- ${PROJECT_SOURCE_DIR} /src/dbc.cpp)
42+ list (APPEND SOURCE_FILES
43+ ${PROJECT_SOURCE_DIR} /src/utils.cpp
44+ ${PROJECT_SOURCE_DIR} /src/message.cpp
45+ ${PROJECT_SOURCE_DIR} /src/signal.cpp
46+ ${PROJECT_SOURCE_DIR} /src/dbc.cpp
47+ )
5948
60- set ( HEADER_FILES
49+ list ( APPEND HEADER_FILES
6150 ${PROJECT_SOURCE_DIR} /include /libdbc/dbc.hpp
6251 ${PROJECT_SOURCE_DIR} /include /libdbc/message.hpp
6352 ${PROJECT_SOURCE_DIR} /include /libdbc/signal.hpp
6453 ${PROJECT_SOURCE_DIR} /include /libdbc/utils/utils.hpp
6554 ${PROJECT_SOURCE_DIR} /include /libdbc/exceptions/error.hpp
6655)
6756
68- include_directories (src)
69- include_directories (include )
70-
71- if (ENABLE_TESTS)
57+ if (DBC_ENABLE_TESTS)
7258 include (CTest)
7359 add_subdirectory (test )
7460endif ()
7561
76- add_subdirectory (doc )
62+ if (DBC_GENERATE_DOCS)
63+ add_subdirectory (doc )
64+ endif ()
65+
66+ list (APPEND GCC_CLANG_COMPILE_FLAGS
67+ -Wall -Wextra -Wpedantic
68+ -Wconversion -Wint-in-bool -context
69+ -Wmissing-declarations -Wmissing-field-initializers
70+ -Werror
71+ )
7772
78- add_library (${PROJECT_NAME} STATIC ${SOURCE} )
79- target_link_libraries (${PROJECT_NAME} FastFloat::fast_float)
8073
81- if (${CMAKE_MINOR_VERSION} GREATER_EQUAL 23)
82- target_sources (${PROJECT_NAME} INTERFACE FILE_SET HEADERS
83- TYPE HEADERS
84- BASE_DIRS ${PROJECT_SOURCE_DIR} /include /libdbc
85- FILES ${HEADER_FILES} )
74+ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
75+ add_compile_options (/W4 /WX)
76+ elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
77+ # Clang shadow warnings aren't as sensitive as gcc
78+ add_compile_options (${GCC_CLANG_COMPILE_FLAGS} -Wshadow)
79+ else ()
80+ add_compile_options (${GCC_CLANG_COMPILE_FLAGS} )
8681endif ()
8782
83+ add_library (${PROJECT_NAME} STATIC ${SOURCE_FILES} )
84+ target_link_libraries (${PROJECT_NAME} FastFloat::fast_float)
85+ target_include_directories (${PROJECT_NAME} PUBLIC
86+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include >
87+ $<INSTALL_INTERFACE:include >
88+ )
89+ target_compile_features (${PROJECT_NAME} PRIVATE cxx_std_11)
90+
91+ target_sources (${PROJECT_NAME} INTERFACE FILE_SET HEADERS
92+ TYPE HEADERS
93+ BASE_DIRS ${PROJECT_SOURCE_DIR} /include /libdbc
94+ FILES ${HEADER_FILES}
95+ )
96+
8897add_custom_target (release
8998 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
9099 COMMAND ${CMAKE_SOURCE_DIR} /scripts/create_single_header.sh
91- DEPENDS ${PROJECT_NAME} )
100+ DEPENDS ${PROJECT_NAME}
101+ )
92102
93103## Installation
94104# install lib
95105install (TARGETS ${PROJECT_NAME}
96106 DESTINATION ${CMAKE_INSTALL_LIBDIR} )
97107
98108# install headers
99- if (${CMAKE_MINOR_VERSION} GREATER_EQUAL 23 AND NOT FETCH_CONTENT_INCLUSION)
100- install (TARGETS ${PROJECT_NAME}
101- FILE_SET HEADERS
102- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /lib${PROJECT_NAME}
103- INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
104- )
105- elseif (NOT FETCH_CONTENT_INCLUSION)
106- install (DIRECTORY ${PROJECT_SOURCE_DIR} /include /libdbc DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
107- endif ()
108-
109+ install (DIRECTORY ${PROJECT_SOURCE_DIR} /include /libdbc DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
109110
110- if (NOT FETCH_CONTENT_INCLUSION)
111- # Generate pkg-config file
112- configure_file (${PROJECT_NAME} .pc.in ${PROJECT_NAME} .pc @ONLY)
113- install (
114- FILES ${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} .pc
115- DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig)
116- endif ()
111+ # Generate pkg-config file
112+ configure_file (${PROJECT_NAME} .pc.in ${PROJECT_NAME} .pc @ONLY)
113+ install (
114+ FILES ${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} .pc
115+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig)
0 commit comments