44
55cmake_minimum_required (VERSION 3.13)
66
7- project (OpenOCPP)
7+ project (OpenOCPP DESCRIPTION "Open Source C++ implementation of the OCPP 1.6 protocol"
8+ VERSION 0.5.0
9+ )
10+
11+ # Definitions for Version.h file
12+ add_definitions (-DLIBOPENOCPP_MAJOR="${PROJECT_VERSION_MAJOR} " )
13+ add_definitions (-DLIBOPENOCPP_MINOR="${PROJECT_VERSION_MINOR} " )
14+ add_definitions (-DLIBOPENOCPP_FIX="${PROJECT_VERSION_PATCH} " )
815
916# Build options
1017include (CMakeLists_Options.txt)
@@ -15,18 +22,124 @@ if(NOT DEFINED TARGET)
1522endif ()
1623include (CMakeLists_${TARGET} .txt)
1724
25+ # Enable position independant code for dynamic library generation
26+ set (CMAKE_POSITION_INDEPENDENT_CODE ON )
27+
1828# 3rd party
1929add_subdirectory (3rdparty)
2030
2131# OpenSSL is mandatory
22- find_package (OpenSSL REQUIRED COMPONENTS SSL Crypto)
23-
24- # Subdirectories
25- add_subdirectory (examples)
26- add_subdirectory (src)
32+ find_package (OpenSSL REQUIRED COMPONENTS SSL Crypto)
2733
2834# Tests
2935if (${BUILD_UNIT_TESTS} )
3036 enable_testing ()
3137 add_subdirectory (tests)
3238endif ()
39+
40+
41+ # Default output directories
42+ if (NOT DEFINED BIN_DIR)
43+ set (BIN_DIR ${CMAKE_SOURCE_DIR} /bin/${TARGET} )
44+ endif ()
45+ set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${BIN_DIR} )
46+ set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${BIN_DIR} )
47+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BIN_DIR} )
48+
49+ # Examples
50+ if (${BUILD_EXAMPLES} )
51+ add_subdirectory (examples)
52+ endif ()
53+
54+ # Open OCPP library sources
55+ add_subdirectory (src)
56+
57+ # Open OCPP static library
58+ if (${BUILD_STATIC_LIBRARY} )
59+ add_library (open-ocpp-static STATIC
60+ src/version .cpp)
61+ target_link_libraries (open-ocpp-static
62+ centralsystem
63+ chargepoint
64+ config
65+ database
66+ messages
67+ rpc
68+ helpers
69+ log
70+ version
71+ x509
72+ json
73+ ws
74+ websockets
75+ )
76+ set_target_properties (open-ocpp-static PROPERTIES OUTPUT_NAME "open-ocpp_static" )
77+ set (OPEN_OCPP_STATIC_TARGET open-ocpp-static )
78+ endif ()
79+
80+ # Open OCPP dynamic library
81+ add_library (open-ocpp-dynamic SHARED
82+ src/version .cpp)
83+ target_link_libraries (open-ocpp-dynamic
84+ centralsystem
85+ chargepoint
86+ config
87+ database
88+ messages
89+ rpc
90+ helpers
91+ log
92+ version
93+ x509
94+ json
95+ ws
96+ websockets
97+
98+ stdc++fs
99+ )
100+ set_target_properties (open-ocpp-dynamic PROPERTIES OUTPUT_NAME "open-ocpp" )
101+
102+ # Install commands
103+ include (GNUInstallDirs)
104+
105+ file (GLOB_RECURSE PUBLIC_HEADERS
106+ LIST_DIRECTORIES false RELATIVE ${CMAKE_SOURCE_DIR} "${CMAKE_SOURCE_DIR} /src/*.h" )
107+
108+ install (TARGETS open-ocpp-dynamic ${OPEN_OCPP_STATIC_TARGET}
109+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
110+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
111+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
112+ )
113+ install (FILES ${PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /openocpp)
114+
115+ file (GLOB RAPIDJSON_HEADERS
116+ LIST_DIRECTORIES false RELATIVE ${CMAKE_SOURCE_DIR} "${CMAKE_SOURCE_DIR} /3rdparty/rapidjson/include/rapidjson/*.h" )
117+ file (GLOB RAPIDJSON_INTERNAL_HEADERS
118+ LIST_DIRECTORIES false RELATIVE ${CMAKE_SOURCE_DIR} "${CMAKE_SOURCE_DIR} /3rdparty/rapidjson/include/rapidjson/internal/*.h" )
119+ file (GLOB RAPIDJSON_ERROR_HEADERS
120+ LIST_DIRECTORIES false RELATIVE ${CMAKE_SOURCE_DIR} "${CMAKE_SOURCE_DIR} /3rdparty/rapidjson/include/rapidjson/error/*.h" )
121+ install (FILES ${RAPIDJSON_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /openocpp/rapidjson)
122+ install (FILES ${RAPIDJSON_INTERNAL_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /openocpp/rapidjson/internal )
123+ install (FILES ${RAPIDJSON_ERROR_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /openocpp/rapidjson/error)
124+
125+ # Generate pkgconfig files
126+ set (PKG_CONFIG_LIBDIR "\$ {prefix}/lib" )
127+ set (PKG_CONFIG_INCLUDEDIR "\$ {prefix}/include/openocpp" )
128+ set (PKG_CONFIG_LIBS "-L\$ {libdir}" )
129+ set (PKG_CONFIG_CFLAGS "-I\$ {includedir}" )
130+
131+ set (LIB_NAME "open-ocpp" )
132+ configure_file (
133+ "${CMAKE_CURRENT_SOURCE_DIR} /deploy/libopen-ocpp.pc.in"
134+ "${CMAKE_CURRENT_BINARY_DIR} /libopen-ocpp.pc"
135+ )
136+ install (FILES "${CMAKE_BINARY_DIR} /libopen-ocpp.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig)
137+
138+ if (${BUILD_STATIC_LIBRARY} )
139+ set (LIB_NAME "open-ocpp_static" )
140+ configure_file (
141+ "${CMAKE_CURRENT_SOURCE_DIR} /deploy/libopen-ocpp.pc.in"
142+ "${CMAKE_CURRENT_BINARY_DIR} /libopen-ocpp_static.pc"
143+ )
144+ install (FILES "${CMAKE_BINARY_DIR} /libopen-ocpp_static.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig)
145+ endif ()
0 commit comments