1# Macro utility to clone the CMock submodule.
2macro( clone_cmock )
3        find_package( Git REQUIRED )
4        message( "Cloning submodule CMock." )
5        execute_process( COMMAND rm -rf ${CMOCK_DIR}
6                         COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive ${CMOCK_DIR}
7                        WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
8                        RESULT_VARIABLE CMOCK_CLONE_RESULT )
9
10        if( NOT ${CMOCK_CLONE_RESULT} STREQUAL "0" )
11                message( FATAL_ERROR "Failed to clone CMock submodule." )
12        endif()
13endmacro()
14
15# Macro utility to add library targets for Unity and CMock to build configuration.
16macro( add_cmock_targets )
17        # Build Configuration for CMock and Unity libraries.
18        list( APPEND CMOCK_INCLUDE_DIRS
19                "${CMOCK_DIR}/vendor/unity/src/"
20                "${CMOCK_DIR}/vendor/unity/extras/fixture/src"
21                "${CMOCK_DIR}/vendor/unity/extras/memory/src"
22                "${CMOCK_DIR}/src"
23        )
24
25        add_library(cmock STATIC
26        "${CMOCK_DIR}/src/cmock.c"
27        )
28
29        set_target_properties(cmock PROPERTIES
30                ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib
31                POSITION_INDEPENDENT_CODE ON
32                COMPILE_FLAGS "-Og"
33                )
34
35        target_include_directories(cmock PUBLIC
36                ${CMOCK_DIR}/src
37                ${CMOCK_DIR}/vendor/unity/src/
38                ${CMOCK_DIR}/examples
39                ${CMOCK_INCLUDE_DIRS}
40                )
41
42        add_library(unity STATIC
43                "${CMOCK_DIR}/vendor/unity/src/unity.c"
44                "${CMOCK_DIR}/vendor/unity/extras/fixture/src/unity_fixture.c"
45                "${CMOCK_DIR}/vendor/unity/extras/memory/src/unity_memory.c"
46                )
47
48        set_target_properties(unity PROPERTIES
49                ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib
50                POSITION_INDEPENDENT_CODE ON
51                )
52
53        target_include_directories(unity PUBLIC
54                ${CMOCK_INCLUDE_DIRS}
55                )
56
57        target_link_libraries(cmock unity)
58endmacro()
59