cmake_minimum_required(VERSION 3.20)
project(JanusLoader CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# ── VM + Loader library ───────────────────────────────────────────────────────
add_library(janus_vm STATIC
    src/vm/core.cpp
    src/vm/alu.cpp
    src/vm/mem.cpp
    src/vm/branch.cpp
    src/vm/system.cpp
    src/syscall/winapi.cpp
    src/syscall/table.cpp
    src/loader/crypto.cpp
    src/loader/loader.cpp
    src/loader/payload_blob.cpp
)

target_include_directories(janus_vm PUBLIC include)

if (MSVC)
    target_compile_options(janus_vm PRIVATE /O2 /GS- /W4)
    target_compile_definitions(janus_vm PRIVATE _CRT_SECURE_NO_WARNINGS)
else()
    target_compile_options(janus_vm PRIVATE -O2 -Wall -Wextra)
endif()

# ── Loader executable ─────────────────────────────────────────────────────────
add_executable(JanusLoader src/main.cpp)
target_link_libraries(JanusLoader PRIVATE janus_vm)

if (WIN32)
    target_link_libraries(JanusLoader PRIVATE kernel32)
endif()

# ── Build payload separately ──────────────────────────────────────────────────
# cd payload && cmake -B build -DCMAKE_TOOLCHAIN_FILE=../cmake/riscv64.cmake && cmake --build build
