cmake_minimum_required(VERSION 4.1) project(basic C) set(CMAKE_C_STANDARD 23) set(SRC "src/Main.c" "src/Code.c" "src/Error.c" "src/Compiler.c" "src/Tokenizer.c" "src/Buffer.c" "src/Memory.c" "src/SystemFunctions.c" "src/Utils.c" "src/Window.c" "src/WindowCharacters.c" ) set(COMPILER_ARGUMENTS -Wall -Wvla -Werror -Wextra -Wundef -Walloca -Wshadow -Wformat=2 -Wcast-qual -Wdate-time -Winit-self -Wmultichar -Wnarrowing -Wcast-align -Wconversion -Wfloat-equal -Winvalid-pch -Warray-bounds -Wenum-compare -Winvalid-utf8 -Wwrite-strings -Wmissing-braces -Wnested-externs -Wshift-overflow -Warray-parameter -Wenum-conversion -Wformat-overflow -Wredundant-decls -Wsign-conversion -Wstack-protector -Wdouble-promotion -Wjump-misses-init -Wnull-dereference -Wunreachable-code -Wbad-function-cast -Wformat-signedness -Wformat-truncation -Wstrict-overflow=2 -Wstrict-prototypes -Winfinite-recursion -Wmissing-prototypes -Woverlength-strings -Wimplicit-fallthrough -Wmissing-declarations -Wmissing-include-dirs -Wold-style-definition -Wdisabled-optimization -Wunused-const-variable -Wlarger-than=1073741824 -Wframe-larger-than=8388608 -Wmissing-variable-declarations -fdiagnostics-color=always -fstrict-flex-arrays=3 -pedantic -pedantic-errors ) if(CMAKE_C_COMPILER_ID STREQUAL "GNU") if(CMAKE_C_COMPILER_VERSION VERSION_GREATER 15.0) set(COMPILER_ARGUMENTS ${COMPILER_ARGUMENTS} -Wdeprecated-non-prototype -Wzero-as-null-pointer-constant ) endif() set(COMPILER_ARGUMENTS ${COMPILER_ARGUMENTS} -Walloc-zero -Wlogical-op -Wtrampolines -Wbidi-chars=any -Wduplicated-cond -Wnormalized=nfkc -Warith-conversion -Wuse-after-free=3 -Wattribute-alias=2 -Wstrict-flex-arrays -Wduplicated-branches -Wstack-usage=8388608 -Wstringop-overflow=4 -Wanalyzer-too-complex -Wtrivial-auto-var-init -Wanalyzer-symbol-too-complex -Wflex-array-member-not-at-end ) elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang") set(COMPILER_ARGUMENTS ${COMPILER_ARGUMENTS} -Wmissing-variable-declarations -Wconditional-uninitialized -Wold-style-definition -Wmissing-prototypes -Wstrict-prototypes -Wbad-function-cast -Wmissing-noreturn -Wextra-semi-stmt -Wnested-externs -Wnarrowing -Wdeprecated-non-prototype -Wzero-as-null-pointer-constant ) endif() add_executable(${PROJECT_NAME} ${SRC}) add_subdirectory(thirdparty/glfw) if(DOCKER) set(LIBS libGLEW.a) else() set(LIBS GLEW) endif() target_link_libraries(${PROJECT_NAME} PRIVATE glfw GL ${LIBS}) target_compile_options(${PROJECT_NAME} PUBLIC ${COMPILER_ARGUMENTS}) add_executable(test test/Test.c) target_compile_options(test PUBLIC ${COMPILER_ARGUMENTS})