1if(NOT ${CMAKE_VERSION} VERSION_LESS "3.10.0") 2 include_guard(GLOBAL) 3endif() 4 5if(NOT CMAKE_BUILD_TYPE) 6 message(STATUS "CMAKE_BUILD_TYPE not set - defaulting to Debug build.") 7 set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build, options are: ${CMAKE_CONFIGURATION_TYPES}." FORCE) 8endif() 9message (STATUS "Build type: ${CMAKE_BUILD_TYPE}") 10 11set(LWIP_CONTRIB_DIR ${LWIP_DIR}/contrib) 12 13# ARM mbedtls support https://tls.mbed.org/ 14if(NOT DEFINED LWIP_MBEDTLSDIR) 15 set(LWIP_MBEDTLSDIR ${LWIP_DIR}/../mbedtls) 16 message(STATUS "LWIP_MBEDTLSDIR not set - using default location ${LWIP_MBEDTLSDIR}") 17endif() 18if(EXISTS ${LWIP_MBEDTLSDIR}/CMakeLists.txt) 19 set(LWIP_HAVE_MBEDTLS ON BOOL) 20 21 # Prevent building MBEDTLS programs and tests 22 set(ENABLE_PROGRAMS OFF CACHE BOOL "") 23 set(ENABLE_TESTING OFF CACHE BOOL "") 24 25 # mbedtls uses cmake. Sweet! 26 add_subdirectory(${LWIP_MBEDTLSDIR} mbedtls) 27 28 set (LWIP_MBEDTLS_DEFINITIONS 29 LWIP_HAVE_MBEDTLS=1 30 ) 31 set (LWIP_MBEDTLS_INCLUDE_DIRS 32 ${LWIP_MBEDTLSDIR}/include 33 ) 34 set (LWIP_MBEDTLS_LINK_LIBRARIES 35 mbedtls 36 mbedcrypto 37 mbedx509 38 ) 39endif() 40 41set(LWIP_COMPILER_FLAGS_GNU_CLANG 42 $<$<CONFIG:Debug>:-Og> 43 $<$<CONFIG:Debug>:-g> 44 $<$<CONFIG:Release>:-O3> 45 -Wall 46 -pedantic 47 -Werror 48 -Wparentheses 49 -Wsequence-point 50 -Wswitch-default 51 -Wextra 52 -Wundef 53 -Wshadow 54 -Wpointer-arith 55 -Wcast-qual 56 -Wwrite-strings 57 $<$<COMPILE_LANGUAGE:C>:-Wold-style-definition> 58 -Wcast-align 59 $<$<COMPILE_LANGUAGE:C>:-Wmissing-prototypes> 60 $<$<COMPILE_LANGUAGE:C>:-Wnested-externs> 61 -Wunreachable-code 62 -Wuninitialized 63 -Wmissing-prototypes 64 -Waggregate-return 65 -Wlogical-not-parentheses 66) 67 68if (NOT LWIP_HAVE_MBEDTLS) 69 list(APPEND LWIP_COMPILER_FLAGS_GNU_CLANG 70 -Wredundant-decls 71 $<$<COMPILE_LANGUAGE:C>:-Wc++-compat> 72 ) 73endif() 74 75if(CMAKE_C_COMPILER_ID STREQUAL "GNU") 76 list(APPEND LWIP_COMPILER_FLAGS_GNU_CLANG 77 -Wlogical-op 78 -Wtrampolines 79 ) 80 81 if (NOT LWIP_HAVE_MBEDTLS) 82 list(APPEND LWIP_COMPILER_FLAGS_GNU_CLANG 83 $<$<COMPILE_LANGUAGE:C>:-Wc90-c99-compat> 84 ) 85 endif() 86 87 if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9) 88 if(LWIP_USE_SANITIZERS) 89 list(APPEND LWIP_COMPILER_FLAGS_GNU_CLANG 90 -fsanitize=address 91 -fsanitize=undefined 92 -fno-sanitize=alignment 93 -fstack-protector 94 -fstack-check 95 ) 96 set(LWIP_SANITIZER_LIBS asan ubsan) 97 endif() 98 endif() 99 100 set(LWIP_COMPILER_FLAGS ${LWIP_COMPILER_FLAGS_GNU_CLANG}) 101endif() 102 103if(CMAKE_C_COMPILER_ID STREQUAL "Clang") 104 list(APPEND LWIP_COMPILER_FLAGS_GNU_CLANG 105 -Wdocumentation 106 -Wno-documentation-deprecated-sync 107 ) 108 109 if(LWIP_USE_SANITIZERS) 110 list(APPEND LWIP_COMPILER_FLAGS_GNU_CLANG 111 -fsanitize=address 112 -fsanitize=undefined 113 -fno-sanitize=alignment 114 ) 115 set(LWIP_SANITIZER_LIBS asan ubsan) 116 endif() 117 118 set(LWIP_COMPILER_FLAGS ${LWIP_COMPILER_FLAGS_GNU_CLANG}) 119endif() 120 121if(CMAKE_C_COMPILER_ID STREQUAL "MSVC") 122 set(LWIP_COMPILER_FLAGS 123 $<$<CONFIG:Debug>:/Od> 124 $<$<CONFIG:Release>:/Ox> 125 /W4 126 /WX 127 ) 128endif() 129