aboutsummaryrefslogtreecommitdiff
path: root/library/CMakeLists.txt
blob: 75d92182ef792ddcb77c042afc5dfd94650eb324 (plain)
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
project (mipi_syst_library)
cmake_minimum_required (VERSION 2.8)
enable_testing()

set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "")

find_package(Doxygen)

if (NOT DEFINED SYST_CFG_CONFORMANCE_LEVEL)
    message(WARNING "SYST_CFG_CONFORMANCE_LEVEL not set, defaulting to leval 30 (complete implementation)")
else()
    message(STATUS "Building for SyS-T conformance level ${SYST_CFG_CONFORMANCE_LEVEL}.")
endif()
# SYS-T API version settings
#
set(SYST_CFG_VERSION_MAJOR "1" CACHE STRING "Supported MIPI SyS-T major specification version.")
set(SYST_CFG_VERSION_MINOR "0" CACHE STRING "Supported MIPI SyS-T minor specification version.")
set(SYST_CFG_CONFORMANCE_LEVEL "30" CACHE STRING "Supported MIPI SyS-T API conformance level. (10=min, 20=low overhead, 30=complete)")

# SYS-T Implementation patch level
#
set(SYST_CFG_VERSION_PATCH "0" CACHE PATH "SyS-T Library patch level.")



# External build dependencies:
# * Google Test https://github.com/google/googletest (for unit tests)
#
if (NOT DEFINED SYST_BUILD_GTEST_DIR)
    get_filename_component(GTEST_DIR "${CMAKE_CURRENT_LIST_DIR}/../external/googletest/googletest" ABSOLUTE)
endif()
set(SYST_BUILD_GTEST_DIR "${GTEST_DIR}" CACHE PATH "Location of Google Test sources, which are needed for unit tests")
if (NOT EXISTS  "${SYST_BUILD_GTEST_DIR}/include/gtest/gtest.h")
    message(WARNING
        "SYST_BUILD_GTEST_DIR=${SYST_BUILD_GTEST_DIR} does not point to a Google Test source location. Unittests will not be build. Try running \n"
        "git submodule update --init --recursive\n"
        "to populate the external folder git submodules or change SYST_BUILD_GTEST_DIR to point to Google Test sources.")
    set(BUILD_TEST "OFF")
else()
    set(BUILD_TEST "ON")
endif()

option(SYST_BUILD_DOC "Create documentation (requires Doxygen)" ${DOXYGEN_FOUND})
option(SYST_BUILD_TEST "Build unit test (requires GoogleTest)" ${BUILD_TEST})
option(SYST_BUILD_HW_CRC "Use CPU crc32 instruction support if supported by architecture." ON)

if (NOT DEFINED SYST_BUILD_PLATFORM_NAME)
    set (SYST_BUILD_PLATFORM_NAME "example" CACHE STRING "Directory name of platform specific source code")
    message(WARNING "SYST_BUILD_PLATFORM_NAME directory name  variable is not set, using 'example' as default.")
endif()


# HW CRC support enabling
#
if (SYST_BUILD_HW_CRC)
   if (CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86|x86_64.*|i?86.*|AMD64.*")
        add_definitions(-D MIPI_SYST_CRC_INTRINSIC_ON)
        message(STATUS "Enabling x86 crc32 CPU instruction support (SSE 4.2). Unset SYST_BUILD_HW_CRC to disable." )
        if (NOT WIN32)
            add_definitions(-msse4.2)
        endif()
    endif()
endif()

configure_file(include/mipi_syst.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/mipi_syst.h)

set (mipi_syst_Includes
     include/mipi_syst.h.in
     include/mipi_syst/api.h
     include/mipi_syst/compiler.h
     include/mipi_syst/crc32.h
     include/mipi_syst/message.h
     include/mipi_syst/inline.h
)

set (mipi_syst_Sources
     src/mipi_syst_api.c
     src/mipi_syst_compiler.c
     src/mipi_syst_crc32.c
     src/mipi_syst_init.c
     src/mipi_syst_inline.c
     src/mipi_syst_writer.c
)

set (mipi_syst_Platform_inc          platform/${SYST_BUILD_PLATFORM_NAME}/include)
set (mipi_syst_Platform_src          platform/${SYST_BUILD_PLATFORM_NAME}/src/mipi_syst_platform.c)

file(GLOB mipi_syst_Platform_includes "${mipi_syst_Platform_inc}/*.h")

include_directories(
     ${mipi_syst_Platform_inc}
     ${CMAKE_CURRENT_BINARY_DIR}/include
     include
)

add_library(mipi_syst
         SHARED
         ${mipi_syst_Platform_includes}
         ${mipi_syst_Includes}
         ${mipi_syst_Sources}
         ${mipi_syst_Platform_src}
)

add_library(mipi_syst_static
         STATIC
         ${mipi_syst_Platform_includes}
         ${mipi_syst_Includes}
         ${mipi_syst_Sources}
         ${mipi_syst_Platform_src}
)

add_library(mipi_syst_ut
         STATIC
         ${mipi_syst_Platform_includes}
         ${mipi_syst_Includes}
         ${mipi_syst_Sources}
         ${mipi_syst_Platform_src}
)

set_target_properties(mipi_syst_ut  PROPERTIES
    VERSION ${SYST_CFG_VERSION_MAJOR}.${SYST_CFG_VERSION_MINOR}.${SYST_CFG_VERSION_PATCH}
    COMPILE_FLAGS "-DMIPI_SYST_STATIC -DMIPI_SYST_UNIT_TEST"
    FOLDER "Instrumentation Library"
)

set_target_properties(mipi_syst  PROPERTIES
    VERSION ${SYST_CFG_VERSION_MAJOR}.${SYST_CFG_VERSION_MINOR}.${SYST_CFG_VERSION_PATCH}
    COMPILE_FLAGS "-DMIPI_SYST_EXPORTS"
    FOLDER "Instrumentation Library"
)

set_target_properties(mipi_syst_static  PROPERTIES
    VERSION ${SYST_CFG_VERSION_MAJOR}.${SYST_CFG_VERSION_MINOR}.${SYST_CFG_VERSION_PATCH}
    COMPILE_FLAGS "-DMIPI_SYST_STATIC"
    FOLDER "Instrumentation Library"
)

install(TARGETS mipi_syst mipi_syst_static
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
)

install(DIRECTORY include/mipi_syst DESTINATION include)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/ DESTINATION include)
install(DIRECTORY ${mipi_syst_Platform_inc}/ DESTINATION include)

add_subdirectory(doxygen)
add_subdirectory(test)