cmake_minimum_required(VERSION 3.20)

project(EF_Cheetov0_SourceRebuild C)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

set(DECOMPILED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../EF-Cheetov0-ghidra-decompile-all" CACHE PATH "Path to Ghidra decompiled C files")

if(NOT EXISTS "${DECOMPILED_DIR}")
    message(FATAL_ERROR "Decompiled directory not found: ${DECOMPILED_DIR}")
endif()

file(GLOB DECOMPILED_SOURCES "${DECOMPILED_DIR}/*.c")

if(DECOMPILED_SOURCES STREQUAL "")
    message(FATAL_ERROR "No .c files found in ${DECOMPILED_DIR}")
endif()

set(SELECTED_LIST "${CMAKE_CURRENT_SOURCE_DIR}/cmake/selected_sources.cmake")
if(EXISTS "${SELECTED_LIST}")
    include("${SELECTED_LIST}")
    if(DEFINED SELECTED_SOURCES AND NOT SELECTED_SOURCES STREQUAL "")
        set(DECOMPILED_SOURCES ${SELECTED_SOURCES})
        message(STATUS "Using selected source subset: ${SELECTED_LIST}")
        list(LENGTH DECOMPILED_SOURCES SELECTED_COUNT)
        message(STATUS "Selected source count: ${SELECTED_COUNT}")
    endif()
endif()

add_library(EF_Cheetov0_source STATIC
    ${DECOMPILED_SOURCES}
    src/ghidra_symbols.c
)

target_include_directories(EF_Cheetov0_source PRIVATE
    "${CMAKE_CURRENT_SOURCE_DIR}/include"
)

if(MSVC)
    target_compile_options(EF_Cheetov0_source PRIVATE
        /TC
        /FI"${CMAKE_CURRENT_SOURCE_DIR}/include/ghidra_compat.h"
        /wd4005
        /wd4013
        /wd4024
        /wd4047
        /wd4090
        /wd4101
        /wd4133
        /wd4244
        /wd4267
        /wd4305
        /wd4311
        /wd4312
    )
else()
    target_compile_options(EF_Cheetov0_source PRIVATE
        -x c
        -fms-extensions
        -include
        "${CMAKE_CURRENT_SOURCE_DIR}/include/ghidra_compat.h"
        -Wno-error=implicit-function-declaration
        -Wno-int-conversion
        -Wno-incompatible-pointer-types
        -Wno-pointer-integer-compare
        -Wno-int-to-pointer-cast
    )
    target_compile_definitions(EF_Cheetov0_source PRIVATE
        __cdecl=
        __fastcall=
        __thiscall=
        __stdcall=
    )
endif()

target_compile_features(EF_Cheetov0_source PRIVATE c_std_11)
