cmake_minimum_required(VERSION 3.22)
project(wcapi)

if (CMAKE_BUILD_TYPE STREQUAL "Debug")
    if (WIN32)
        set(CARGO_CMD cargo build --target x86_64-pc-windows-gnu)
        set(TARGET_DIR "x86_64-pc-windows-gnu/debug")
    endif(WIN32)
    if(APPLE)
        set(CARGO_CMD cargo build)
        set(TARGET_DIR "debug")
    elseif(UNIX)
        set(CARGO_CMD cargo build --target x86_64-unknown-linux-gnu)
        set(TARGET_DIR "x86_64-unknown-linux-gnu/debug")
    endif()

else ()
    if (WIN32)
        set(CARGO_CMD cargo build --release --target x86_64-pc-windows-gnu)
        set(TARGET_DIR "x86_64-pc-windows-gnu/release")
    endif(WIN32)
    if(APPLE)
        set(CARGO_CMD cargo build --release)
        set(TARGET_DIR "release")
    elseif(UNIX)
        set(CARGO_CMD cargo build --release --target x86_64-unknown-linux-gnu)
        set(TARGET_DIR "x86_64-unknown-linux-gnu/release")
    endif()
endif ()

if(WIN32)
	set(WCAPI_SO "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_DIR}/wc_api.dll")
elseif(UNIX AND NOT APPLE)
	set(WCAPI_SO "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_DIR}/libwc_api.so")
endif()
set(WCAPI_A "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_DIR}/libwc_api.a")
set(WCAPI_H "${CMAKE_CURRENT_BINARY_DIR}/wc-api.h")
set(WCAPI_CPP_H "${CMAKE_CURRENT_BINARY_DIR}/wc-api-cpp.h")

if(APPLE)
# macOS: only copy the static library (no shared lib)
add_custom_target( wcapi ALL
    COMMENT "Compiling Rust Warecache API library"
    COMMAND CARGO_TARGET_DIR=${CMAKE_CURRENT_BINARY_DIR} ${CARGO_CMD}
    COMMAND cp ${WCAPI_A} ${CMAKE_CURRENT_BINARY_DIR}
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
else()
add_custom_target( wcapi ALL
    COMMENT "Compiling Rust Warecache API library"
    COMMAND CARGO_TARGET_DIR=${CMAKE_CURRENT_BINARY_DIR} ${CARGO_CMD}
    COMMAND cp ${WCAPI_SO} ${CMAKE_CURRENT_BINARY_DIR}
    COMMAND cp ${WCAPI_A} ${CMAKE_CURRENT_BINARY_DIR}
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
endif()

# Tests for wc-api
add_test(NAME wcapi_test
    COMMAND cargo test
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
