cmake_minimum_required(VERSION 3.16)
project(winrar-keygen LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Version
set(APP_VERSION "4.2.0")

add_executable(winrar-keygen
    _tmain.cpp
    BigInteger.hpp
    EllipticCurveGF2m.hpp
    GaloisField.hpp
    Hasher.hpp
    HasherCrc32Traits.hpp
    HasherSha1Traits.hpp
    WinRarConfig.hpp
    WinRarKeygen.hpp
)

if(WIN32)
    target_sources(winrar-keygen PRIVATE winrar-keygen.rc)
endif()

target_compile_definitions(winrar-keygen PRIVATE
    APP_VERSION="${APP_VERSION}"
)

# Find GMP
find_path(GMP_INCLUDE_DIR gmp.h REQUIRED)
target_include_directories(winrar-keygen PRIVATE ${GMP_INCLUDE_DIR})

# macOS Universal Binary support
if(APPLE AND CMAKE_OSX_ARCHITECTURES)
    message(STATUS "Building macOS Universal Binary: ${CMAKE_OSX_ARCHITECTURES}")
endif()

# Static linking on Linux for portable binaries
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
    find_library(GMP_STATIC_LIBRARY libgmp.a)
    if(GMP_STATIC_LIBRARY)
        target_link_libraries(winrar-keygen PRIVATE ${GMP_STATIC_LIBRARY})
        target_link_options(winrar-keygen PRIVATE -static-libgcc -static-libstdc++)
        message(STATUS "Using static GMP: ${GMP_STATIC_LIBRARY}")
    else()
        find_library(GMP_LIBRARY gmp REQUIRED)
        target_link_libraries(winrar-keygen PRIVATE ${GMP_LIBRARY})
        message(STATUS "Using dynamic GMP: ${GMP_LIBRARY}")
    endif()
else()
    find_library(GMP_LIBRARY gmp REQUIRED)
    target_link_libraries(winrar-keygen PRIVATE ${GMP_LIBRARY})
endif()
