CMakeLists.txt 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. cmake_minimum_required(VERSION 3.5)
  2. include(CheckCSourceCompiles)
  3. include(CheckFunctionExists)
  4. set(CMAKE_C_STANDARD 11)
  5. set(CMAKE_C_STANDARD_REQUIRED ON)
  6. add_definitions("-Wall -Werror -Wextra -Wno-unused-parameter
  7. -D_GNU_SOURCE -mfp16-format=alternative")
  8. macro(c_attribute_required attrname code)
  9. if (NOT DEFINED ATTRIBUTE_${attrname}_SUPPORT OR
  10. NOT ATTRIBUTE_${attrname}_SUPPORT)
  11. message(STATUS "Checking if compiler supports __attribute__((${attrname}))")
  12. check_c_source_compiles("${code}" ATTRIBUTE_${attrname}_SUPPORT)
  13. if (NOT ATTRIBUTE_${attrname}_SUPPORT)
  14. message(FATAL_ERROR "Compiler must support __attribute__((${attrname}))")
  15. endif()
  16. endif()
  17. endmacro()
  18. macro(c_function_required f)
  19. if(NOT DEFINED FUNCTION_${f}_SUPPORT)
  20. message(STATUS "Checking if compiler supports ${f}")
  21. check_function_exists("${f}" FUNCTION_${f}_SUPPORT)
  22. if(NOT FUNCTION_${f}_SUPPORT)
  23. message(FATAL_ERROR "libc must support ${f}")
  24. endif()
  25. endif()
  26. endmacro()
  27. c_attribute_required(packed "struct s { int a; } __attribute__((packed)); main;")
  28. c_attribute_required(constructor "void __attribute__((constructor)) f(){}main;")
  29. c_attribute_required(format
  30. "void __attribute__((format (printf, 1, 2))) f(const char *, ...);main;")
  31. c_function_required(asprintf)
  32. include_directories("include")
  33. add_subdirectory(src)
  34. add_subdirectory(panwrap)
  35. # vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab :