replace : iotivity -> iotivity-sec
[platform/upstream/iotivity.git] / extlibs / mbedtls / mbedtls / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.6)
2 project("mbed TLS" C)
3
4 option(USE_PKCS11_HELPER_LIBRARY "Build mbed TLS with the pkcs11-helper library." OFF)
5 option(ENABLE_ZLIB_SUPPORT "Build mbed TLS with zlib library." OFF)
6
7 option(ENABLE_PROGRAMS "Build mbed TLS programs." ON)
8
9 option(UNSAFE_BUILD "Allow unsafe builds. These builds ARE NOT SECURE." OFF)
10
11 # the test suites currently have compile errors with MSVC
12 if(MSVC)
13     option(ENABLE_TESTING "Build mbed TLS tests." OFF)
14 else()
15     option(ENABLE_TESTING "Build mbed TLS tests." ON)
16 endif()
17
18 # Warning string - created as a list for compatibility with CMake 2.8
19 set(WARNING_BORDER "*******************************************************\n")
20 set(NULL_ENTROPY_WARN_L1 "****  WARNING!  MBEDTLS_TEST_NULL_ENTROPY defined!\n")
21 set(NULL_ENTROPY_WARN_L2 "****  THIS BUILD HAS NO DEFINED ENTROPY SOURCES\n")
22 set(NULL_ENTROPY_WARN_L3 "****  AND IS *NOT* SUITABLE FOR PRODUCTION USE\n")
23
24 set(NULL_ENTROPY_WARNING "${WARNING_BORDER}"
25                          "${NULL_ENTROPY_WARN_L1}"
26                          "${NULL_ENTROPY_WARN_L2}"
27                          "${NULL_ENTROPY_WARN_L3}"
28                          "${WARNING_BORDER}")
29
30 find_package(Perl)
31 if(PERL_FOUND)
32
33     # If NULL Entropy is configured, display an appropriate warning
34     execute_process(COMMAND ${PERL_EXECUTABLE} ${CMAKE_SOURCE_DIR}/scripts/config.pl -f ${CMAKE_SOURCE_DIR}/include/mbedtls/config.h get MBEDTLS_TEST_NULL_ENTROPY
35                         RESULT_VARIABLE result)
36     if(${result} EQUAL 0)
37         message(WARNING ${NULL_ENTROPY_WARNING})
38
39         if(NOT UNSAFE_BUILD)
40             message(FATAL_ERROR "\
41 \n\
42 Warning! You have enabled MBEDTLS_TEST_NULL_ENTROPY. \
43 This option is not safe for production use and negates all security \
44 It is intended for development use only. \
45 \n\
46 To confirm you want to build with this option, re-run cmake with the \
47 option: \n\
48   cmake -DUNSAFE_BUILD=ON ")
49
50             return()
51         endif()
52     endif()
53 endif()
54
55 set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE}
56     CACHE STRING "Choose the type of build: None Debug Release Coverage ASan ASanDbg MemSan MemSanDbg Check CheckFull"
57     FORCE)
58
59 string(REGEX MATCH "Clang" CMAKE_COMPILER_IS_CLANG "${CMAKE_C_COMPILER_ID}")
60
61 if(CMAKE_COMPILER_IS_GNUCC)
62     # some warnings we want are not available with old GCC versions
63     # note: starting with CMake 2.8 we could use CMAKE_C_COMPILER_VERSION
64     execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion
65                     OUTPUT_VARIABLE GCC_VERSION)
66     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -W -Wdeclaration-after-statement -Wwrite-strings")
67     if (GCC_VERSION VERSION_GREATER 4.5 OR GCC_VERSION VERSION_EQUAL 4.5)
68         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wlogical-op")
69     endif()
70     if (GCC_VERSION VERSION_GREATER 4.8 OR GCC_VERSION VERSION_EQUAL 4.8)
71         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wshadow")
72     endif()
73     set(CMAKE_C_FLAGS_RELEASE     "-O2")
74     set(CMAKE_C_FLAGS_DEBUG       "-O0 -g3")
75     set(CMAKE_C_FLAGS_COVERAGE    "-O0 -g3 --coverage")
76     set(CMAKE_C_FLAGS_ASAN        "-Werror -fsanitize=address -fno-common -O3")
77     set(CMAKE_C_FLAGS_ASANDBG     "-Werror -fsanitize=address -fno-common -O1 -g3 -fno-omit-frame-pointer -fno-optimize-sibling-calls ")
78     set(CMAKE_C_FLAGS_CHECK       "-Werror -Os")
79     set(CMAKE_C_FLAGS_CHECKFULL   "${CMAKE_C_FLAGS_CHECK} -Wcast-qual")
80 endif(CMAKE_COMPILER_IS_GNUCC)
81
82 if(CMAKE_COMPILER_IS_CLANG)
83     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -W -Wdeclaration-after-statement -Wwrite-strings -Wpointer-arith -Wimplicit-fallthrough -Wshadow")
84     set(CMAKE_C_FLAGS_RELEASE     "-O2")
85     set(CMAKE_C_FLAGS_DEBUG       "-O0 -g3")
86     set(CMAKE_C_FLAGS_COVERAGE    "-O0 -g3 --coverage")
87     set(CMAKE_C_FLAGS_ASAN        "-Werror -fsanitize=address -fno-common -fsanitize=undefined -fno-sanitize-recover -O3")
88     set(CMAKE_C_FLAGS_ASANDBG     "-Werror -fsanitize=address -fno-common -fsanitize=undefined -fno-sanitize-recover -O1 -g3 -fno-omit-frame-pointer -fno-optimize-sibling-calls ")
89     set(CMAKE_C_FLAGS_MEMSAN      "-Werror -fsanitize=memory -O3")
90     set(CMAKE_C_FLAGS_MEMSANDBG   "-Werror -fsanitize=memory -O1 -g3 -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize-memory-track-origins=2")
91     set(CMAKE_C_FLAGS_CHECK       "-Werror -Os")
92 endif(CMAKE_COMPILER_IS_CLANG)
93
94 if(MSVC)
95     set(CMAKE_C_FLAGS_CHECK       "/WX")
96 endif(MSVC)
97
98 if(CMAKE_BUILD_TYPE STREQUAL "Coverage")
99     if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
100         set(CMAKE_SHARED_LINKER_FLAGS "--coverage")
101     endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
102 endif(CMAKE_BUILD_TYPE STREQUAL "Coverage")
103
104 if(LIB_INSTALL_DIR)
105 else()
106     set(LIB_INSTALL_DIR lib)
107 endif()
108
109 include_directories(include/)
110
111 if(ENABLE_ZLIB_SUPPORT)
112     find_package(ZLIB)
113
114     if(ZLIB_FOUND)
115         include_directories(${ZLIB_INCLUDE_DIR})
116     endif(ZLIB_FOUND)
117 endif(ENABLE_ZLIB_SUPPORT)
118
119 add_subdirectory(library)
120 add_subdirectory(include)
121
122 if(ENABLE_PROGRAMS)
123     add_subdirectory(programs)
124 endif()
125
126 ADD_CUSTOM_TARGET(apidoc
127     COMMAND doxygen doxygen/mbedtls.doxyfile
128     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
129
130 if(ENABLE_TESTING)
131     enable_testing()
132
133     add_subdirectory(tests)
134
135     # additional convenience targets for Unix only
136     if(UNIX)
137
138         ADD_CUSTOM_TARGET(covtest
139             COMMAND make test
140             COMMAND programs/test/selftest
141             COMMAND tests/compat.sh
142             COMMAND tests/ssl-opt.sh
143         )
144
145         ADD_CUSTOM_TARGET(lcov
146             COMMAND rm -rf Coverage
147             COMMAND lcov --capture --initial --directory library/CMakeFiles/mbedtls.dir -o files.info
148             COMMAND lcov --capture --directory library/CMakeFiles/mbedtls.dir -o tests.info
149             COMMAND lcov --add-tracefile files.info --add-tracefile tests.info -o all.info
150             COMMAND lcov --remove all.info -o final.info '*.h'
151             COMMAND gendesc tests/Descriptions.txt -o descriptions
152             COMMAND genhtml --title "mbed TLS" --description-file descriptions --keep-descriptions --legend --no-branch-coverage -o Coverage final.info
153             COMMAND rm -f files.info tests.info all.info final.info descriptions
154         )
155
156         ADD_CUSTOM_TARGET(memcheck
157             COMMAND sed -i.bak s+/usr/bin/valgrind+`which valgrind`+ DartConfiguration.tcl
158             COMMAND ctest -O memcheck.log -D ExperimentalMemCheck
159             COMMAND tail -n1 memcheck.log | grep 'Memory checking results:' > /dev/null
160             COMMAND rm -f memcheck.log
161             COMMAND mv DartConfiguration.tcl.bak DartConfiguration.tcl
162         )
163     endif(UNIX)
164 endif()