CMakeLists.txt 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. cmake_minimum_required(VERSION 4.1)
  2. project(basic C)
  3. set(CMAKE_C_STANDARD 23)
  4. set(SRC
  5. "src/Main.c"
  6. "src/Code.c"
  7. "src/Error.c"
  8. "src/Compiler.c"
  9. "src/Tokenizer.c"
  10. "src/Buffer.c"
  11. "src/Memory.c"
  12. "src/SystemFunctions.c"
  13. "src/Utils.c"
  14. "src/Window.c"
  15. "src/WindowCharacters.c"
  16. )
  17. set(COMPILER_ARGUMENTS
  18. -Wall -Wvla -Werror
  19. -Wextra -Wundef -Walloca
  20. -Wshadow -Wformat=2 -Wcast-qual
  21. -Wdate-time -Winit-self -Wmultichar
  22. -Wnarrowing -Wcast-align -Wconversion
  23. -Wfloat-equal -Winvalid-pch -Warray-bounds
  24. -Wenum-compare -Winvalid-utf8 -Wwrite-strings
  25. -Wmissing-braces -Wnested-externs -Wshift-overflow
  26. -Warray-parameter -Wenum-conversion -Wformat-overflow
  27. -Wredundant-decls -Wsign-conversion -Wstack-protector
  28. -Wdouble-promotion -Wjump-misses-init -Wnull-dereference
  29. -Wunreachable-code -Wbad-function-cast -Wformat-signedness
  30. -Wformat-truncation -Wstrict-overflow=2 -Wstrict-prototypes
  31. -Winfinite-recursion -Wmissing-prototypes -Woverlength-strings
  32. -Wimplicit-fallthrough -Wmissing-declarations -Wmissing-include-dirs
  33. -Wold-style-definition -Wdisabled-optimization -Wunused-const-variable
  34. -Wlarger-than=1073741824
  35. -Wframe-larger-than=8388608 -Wmissing-variable-declarations
  36. -fdiagnostics-color=always -fstrict-flex-arrays=3
  37. -pedantic -pedantic-errors
  38. )
  39. if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
  40. if(CMAKE_C_COMPILER_VERSION VERSION_GREATER 15.0)
  41. set(COMPILER_ARGUMENTS ${COMPILER_ARGUMENTS}
  42. -Wdeprecated-non-prototype
  43. -Wzero-as-null-pointer-constant
  44. )
  45. endif()
  46. set(COMPILER_ARGUMENTS ${COMPILER_ARGUMENTS}
  47. -Walloc-zero -Wlogical-op -Wtrampolines
  48. -Wbidi-chars=any -Wduplicated-cond -Wnormalized=nfkc
  49. -Warith-conversion -Wuse-after-free=3 -Wattribute-alias=2
  50. -Wstrict-flex-arrays -Wduplicated-branches -Wstack-usage=8388608
  51. -Wstringop-overflow=4 -Wanalyzer-too-complex -Wtrivial-auto-var-init
  52. -Wanalyzer-symbol-too-complex -Wflex-array-member-not-at-end
  53. )
  54. elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang")
  55. set(COMPILER_ARGUMENTS ${COMPILER_ARGUMENTS}
  56. -Wmissing-variable-declarations -Wconditional-uninitialized
  57. -Wold-style-definition -Wmissing-prototypes
  58. -Wstrict-prototypes -Wbad-function-cast
  59. -Wmissing-noreturn -Wextra-semi-stmt
  60. -Wnested-externs -Wnarrowing
  61. -Wdeprecated-non-prototype -Wzero-as-null-pointer-constant
  62. )
  63. endif()
  64. add_executable(${PROJECT_NAME} ${SRC})
  65. add_subdirectory(thirdparty/glfw)
  66. if(DOCKER)
  67. set(LIBS libGLEW.a)
  68. else()
  69. set(LIBS GLEW)
  70. endif()
  71. target_link_libraries(${PROJECT_NAME} PRIVATE glfw GL ${LIBS})
  72. target_compile_options(${PROJECT_NAME} PUBLIC ${COMPILER_ARGUMENTS})
  73. add_executable(test test/Test.c)
  74. target_compile_options(test PUBLIC ${COMPILER_ARGUMENTS})