cmake_minimum_required(VERSION 3.20)
project(mgc64 VERSION 0.1.0 LANGUAGES C)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)

set(MGC_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)

set(MGC_LIBRARY_SOURCES
    src/common/status.c
src/common/memory.c
src/common/string.c
src/common/vector.c
src/common/map.c
src/common/file_io.c
src/common/diagnostic.c
src/frontend/token.c
src/frontend/lexer.c
src/frontend/ast.c
src/frontend/parser.c
src/frontend/types.c
src/frontend/symbol.c
src/frontend/semantic.c
src/frontend/const_eval.c
src/frontend/pilot_keywords.c
src/frontend/pilot_parser.c
src/middle/ir.c
src/middle/cfg.c
src/middle/ssa.c
src/middle/ir_builder.c
src/middle/opt_passes.c
src/backend/target.c
src/backend/abi.c
src/backend/mir.c
src/backend/frame.c
src/backend/regalloc.c
src/backend/isel.c
src/backend/x64_encoding.c
src/backend/codegen.c
src/assembler/asm_token.c
src/assembler/asm_expr.c
src/assembler/asm_lexer.c
src/assembler/asm_parser.c
src/assembler/asm_encoder.c
src/assembler/coff_writer.c
src/assembler/assembler.c
src/linker/object.c
src/linker/archive.c
src/linker/symbol_resolution.c
src/linker/relocation.c
src/linker/import_table.c
src/linker/pe_writer.c
src/linker/linker.c
src/runtime/crt.c
src/runtime/builtins.c
src/driver/cli.c
src/driver/pipeline.c
src/driver/compiler.c
)

add_library(mgc64_core STATIC ${MGC_LIBRARY_SOURCES})
target_include_directories(mgc64_core PUBLIC ${MGC_INCLUDE_DIR})

add_executable(mgc64 src/driver/main.c)
target_include_directories(mgc64 PRIVATE ${MGC_INCLUDE_DIR})
target_link_libraries(mgc64 PRIVATE mgc64_core)

if(MINGW)
    target_compile_definitions(mgc64_core PUBLIC MGC_HOST_MINGW=1)
endif()
