-
-
Notifications
You must be signed in to change notification settings - Fork 1k
/
CMakeLists.txt
56 lines (44 loc) · 2.14 KB
/
CMakeLists.txt
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
include(ShogunUtils)
# add test case for each generated example
# (not generated yet so have to fake filenames from META_EXAMPLES list)
FOREACH(META_EXAMPLE ${META_EXAMPLES})
# assume a structure <target_language>/<category>/listing.sg
GET_META_EXAMPLE_VARS(${META_EXAMPLE} EXAMPLE_NAME EXAMPLE_REL_DIR EXAMPLE_NAME_WITH_DIR)
if(WIN32)
SET(SHOGUN_LIBRARY shogun::shogun-static)
else()
SET(SHOGUN_LIBRARY shogun::shogun)
endif()
# meta examples have to be generated before executable and test is added
SET(GENERATED_CPP ${EXAMPLE_REL_DIR}/${EXAMPLE_NAME}.cpp)
SET(GENERATED_CPP_BINARY cpp-${EXAMPLE_REL_DIR}-${EXAMPLE_NAME})
# generate binary in relative directory
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXAMPLE_REL_DIR})
ADD_EXECUTABLE(${GENERATED_CPP_BINARY} ${GENERATED_CPP})
ADD_DEPENDENCIES(${GENERATED_CPP_BINARY} meta_examples ${SHOGUN_LIBRARY})
SET_SOURCE_FILES_PROPERTIES(${GENERATED_CPP} PROPERTIES GENERATED 1)
TARGET_LINK_LIBRARIES(${GENERATED_CPP_BINARY} ${SHOGUN_LIBRARY} ${SANITIZER_LIBRARY})
# Suppress unused variable warnings
# if we are not testing the meta_examples
IF (NOT ENABLE_TESTING)
SET_TARGET_PROPERTIES(${GENERATED_CPP_BINARY} PROPERTIES
COMPILE_FLAGS "-Wno-unused-variable")
ENDIF()
IF(SANITIZER_FLAGS)
SET_TARGET_PROPERTIES(${GENERATED_CPP_BINARY} PROPERTIES COMPILE_FLAGS ${SANITIZER_FLAGS})
ENDIF()
# Add examples to the dependencies of modular interfaces to make sure
# nothing will infer with them being build single-threaded.
IF(SWIG_SINGLE_THREADED)
FOREACH(SG_INTERFACE_TARGET ${SG_INTERFACE_TARGETS})
ADD_DEPENDENCIES(${SG_INTERFACE_TARGET} ${GENERATED_CPP_BINARY})
ENDFOREACH(SG_INTERFACE_TARGET ${SG_INTERFACE_TARGETS})
ENDIF(SWIG_SINGLE_THREADED)
LIST(APPEND GENERATED_CPP_EXAMPLES ${GENERATED_CPP_BINARY})
ADD_TEST(NAME generated_cpp-${EXAMPLE_NAME_WITH_DIR}
COMMAND ${GENERATED_CPP_BINARY}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE_REL_DIR})
ENDFOREACH()
add_custom_target(build_cpp_meta_examples ALL
DEPENDS ${GENERATED_CPP_EXAMPLES}
COMMENT "Compiled generated cpp examples")