cmake_minimum_required(VERSION 4.1)
project(basic C)

set(CMAKE_C_STANDARD 23)

set(SRC
    "src/Main.c"
    "src/Code.c"
    "src/Values.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    -Wdeprecated-non-prototype
    -Wframe-larger-than=8388608 -Wmissing-variable-declarations
    -Wzero-as-null-pointer-constant
    -fdiagnostics-color=always  -fstrict-flex-arrays=3
    -pedantic                   -pedantic-errors
)
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
    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
    )
endif()

add_executable(${PROJECT_NAME} ${SRC})
target_compile_options(${PROJECT_NAME} PUBLIC ${COMPILER_ARGUMENTS})

add_executable(test test/Test.c)
target_compile_options(test PUBLIC ${COMPILER_ARGUMENTS})
