CMakeCommon.cmake 3.3 KB

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