1cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
2cmake_policy(SET CMP0054 NEW)
3cmake_policy(SET CMP0057 NEW)
4cmake_policy(SET CMP0077 NEW)
5
6project(web_test LANGUAGES C)
7
8# Set build configurations
9set(BUILD_CONFIGURATIONS default_build_coverage no_tls_build_coverage
10                         digest_authenticate_build)
11set(CMAKE_CONFIGURATION_TYPES
12    ${BUILD_CONFIGURATIONS}
13    CACHE STRING "list of supported configuration types" FORCE)
14set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
15                                             ${CMAKE_CONFIGURATION_TYPES})
16list(GET CMAKE_CONFIGURATION_TYPES 0 BUILD_TYPE)
17if((NOT CMAKE_BUILD_TYPE) OR (NOT ("${CMAKE_BUILD_TYPE}" IN_LIST
18                                   CMAKE_CONFIGURATION_TYPES)))
19  set(CMAKE_BUILD_TYPE
20      "${BUILD_TYPE}"
21      CACHE STRING "Build Type of the project" FORCE)
22endif()
23
24message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
25message(STATUS "Using toolchain file: ${CMAKE_TOOLCHAIN_FILE}.")
26
27set(SECURE -DNX_WEB_HTTPS_ENABLE -DNX_TCPSERVER_ENABLE_TLS -DNX_SECURE_ENABLE_CLIENT_CERTIFICATE_VERIFY)
28set(MULTIPART -DNX_WEB_HTTP_MULTIPART_ENABLE)
29set(DIGEST -DNX_WEB_HTTP_DIGEST_ENABLE)
30
31set(default_build_coverage ${SECURE} ${MULTIPART} -DNX_ENABLE_EXTENDED_NOTIFY_SUPPORT)
32set(no_tls_build_coverage ${MULTIPART})
33set(digest_authenticate_build ${SECURE} ${MULTIPART} ${DIGEST})
34
35add_compile_options(
36  -m32
37  -std=c99
38  -ggdb
39  -g3
40  -gdwarf-2
41  -fdiagnostics-color
42  -Werror
43  -DTX_INCLUDE_USER_DEFINE_FILE
44  ${${CMAKE_BUILD_TYPE}})
45add_link_options(-m32)
46
47enable_testing()
48
49add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../../.. netxduo)
50add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/regression regression)
51
52# Coverage
53if(CMAKE_BUILD_TYPE MATCHES ".*_coverage")
54  target_compile_options(netxduo PRIVATE -fprofile-arcs -ftest-coverage)
55  target_link_options(netxduo PRIVATE -fprofile-arcs -ftest-coverage)
56endif()
57
58# Build ThreadX library once
59execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/run.sh build_libs)
60add_custom_target(build_libs ALL COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/run.sh
61                                         build_libs)
62add_dependencies(netxduo build_libs)
63target_include_directories(netxduo PUBLIC ${CMAKE_BINARY_DIR}/../libs/inc)
64add_library(threadx SHARED IMPORTED GLOBAL)
65add_library("azrtos::threadx" ALIAS threadx)
66set_target_properties(
67  threadx PROPERTIES IMPORTED_LOCATION
68                     ${CMAKE_BINARY_DIR}/../libs/threadx/libthreadx.so)
69add_library(filex SHARED IMPORTED GLOBAL)
70add_library("azrtos::filex" ALIAS filex)
71set_target_properties(
72  filex PROPERTIES IMPORTED_LOCATION
73                   ${CMAKE_BINARY_DIR}/../libs/filex/libfilex.so)
74target_link_libraries(netxduo PUBLIC filex)
75
76target_compile_options(
77  netxduo
78  PRIVATE -Werror
79          -Wall
80          -Wextra
81          -pedantic
82          -fmessage-length=0
83          -fsigned-char
84          -ffunction-sections
85          -fdata-sections
86          -Wunused
87          -Wuninitialized
88          -Wmissing-declarations
89          -Wconversion
90          -Wpointer-arith
91          -Wshadow
92          -Wlogical-op
93          -Waggregate-return
94          -Wfloat-equal)
95