forked from hyperledger-iroha/iroha-dco
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfunctions.cmake
96 lines (88 loc) · 3.79 KB
/
functions.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# Compile the specified target as a modern, strict C++.
function(strictmode target)
# Require pure C++14 standard.
set_target_properties(${target} PROPERTIES
CXX_STANDARD 14
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF
)
# Enable more warnings and turn them into compile errors.
if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR
(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR
(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang"))
target_compile_options(${target} PRIVATE -Wall -Wpedantic)
elseif ((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR
(CMAKE_CXX_COMPILER_ID STREQUAL "Intel"))
target_compile_options(${target} PRIVATE /W3 /WX)
else ()
message(AUTHOR_WARNING "Unknown compiler: building target ${target} with default options")
endif ()
endfunction()
# Creates test "test_name", with "SOURCES" (use string as second argument)
function(addtest test_name SOURCES)
add_executable(${test_name} ${SOURCES})
target_link_libraries(${test_name} gtest gmock)
target_include_directories(${test_name} PUBLIC ${PROJECT_SOURCE_DIR}/test)
add_test(
NAME ${test_name}
COMMAND $<TARGET_FILE:${test_name}>
)
strictmode(${test_name})
endfunction()
# Creates benchmark "bench_name", with "SOURCES" (use string as second argument)
function(addbenchmark bench_name SOURCES)
add_executable(${bench_name} ${SOURCES})
target_link_libraries(${bench_name} PRIVATE benchmark)
strictmode(${bench_name})
endfunction()
function(compile_proto_to_cpp PROTO)
string(REGEX REPLACE "\\.proto$" ".pb.h" GEN_PB_HEADER ${PROTO})
string(REGEX REPLACE "\\.proto$" ".pb.cc" GEN_PB ${PROTO})
string(REGEX REPLACE "\\.proto$" "proto_h" GEN_TARGET ${PROTO})
add_custom_command(
OUTPUT ${IROHA_SCHEMA_DIR}/${GEN_PB_HEADER} ${IROHA_SCHEMA_DIR}/${GEN_PB}
COMMAND "${protoc_EXECUTABLE}" --cpp_out=${IROHA_SCHEMA_DIR} ${PROTO}
DEPENDS protoc
WORKING_DIRECTORY ${IROHA_SCHEMA_DIR})
add_library(${GEN_TARGET}
"${IROHA_SCHEMA_DIR}/${GEN_PB}")
target_include_directories(${GEN_TARGET} PUBLIC
${protobuf_INCLUDE_DIRS}
${IROHA_SCHEMA_DIR}
)
target_link_libraries(${GEN_TARGET}
${protobuf_LIBRARIES}
)
set_property(TARGET protobuf APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${GEN_TARGET})
add_dependencies(protobuf ${GEN_TARGET})
endfunction()
function(compile_proto_to_grpc_cpp PROTO)
string(REGEX REPLACE "\\.proto$" ".pb.h" GEN_PB_HEADER ${PROTO})
string(REGEX REPLACE "\\.proto$" ".pb.cc" GEN_PB ${PROTO})
string(REGEX REPLACE "\\.proto$" ".grpc.pb.h" GEN_GRPC_PB_HEADER ${PROTO})
string(REGEX REPLACE "\\.proto$" ".grpc.pb.cc" GEN_GRPC_PB ${PROTO})
string(REGEX REPLACE "\\.proto$" "proto_h" GEN_TARGET ${PROTO})
add_custom_command(
OUTPUT ${IROHA_SCHEMA_DIR}/${GEN_PB_HEADER} ${IROHA_SCHEMA_DIR}/${GEN_PB} ${IROHA_SCHEMA_DIR}/${GEN_GRPC_PB_HEADER} ${IROHA_SCHEMA_DIR}/${GEN_GRPC_PB}
COMMAND "${protoc_EXECUTABLE}" --cpp_out=${IROHA_SCHEMA_DIR} ${PROTO}
COMMAND "${protoc_EXECUTABLE}" --grpc_out=${IROHA_SCHEMA_DIR} --plugin=protoc-gen-grpc="${grpc_CPP_PLUGIN}" ${PROTO}
DEPENDS grpc_cpp_plugin
WORKING_DIRECTORY ${IROHA_SCHEMA_DIR})
add_library(${GEN_TARGET}
"${IROHA_SCHEMA_DIR}/${GEN_PB}"
"${IROHA_SCHEMA_DIR}/${GEN_GRPC_PB}")
target_include_directories(${GEN_TARGET} PUBLIC
${protobuf_INCLUDE_DIRS}
${grpc_INCLUDE_DIR}
${IROHA_SCHEMA_DIR}
)
target_link_libraries(${GEN_TARGET}
${protobuf_LIBRARIES}
${grpc_LIBRARY}
)
set_property(TARGET protobuf APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${GEN_TARGET})
set_property(TARGET grpc APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${GEN_TARGET})
set_property(TARGET grpc++ APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${GEN_TARGET})
add_dependencies(protobuf ${GEN_TARGET})
add_dependencies(grpc ${GEN_TARGET})
endfunction()