cmake_minimum_required(VERSION 3.21)
project(BuzzPrepare VERSION 0.1.0 LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
include(CTest)
find_package(Qt6 6.2 REQUIRED COMPONENTS Core Network Widgets)
set(CMAKE_AUTORCC ON)
set(ZLIB_BUILD_TESTING OFF CACHE BOOL "" FORCE)
set(ZLIB_BUILD_SHARED OFF CACHE BOOL "" FORCE)
set(ZLIB_INSTALL OFF CACHE BOOL "" FORCE)
add_subdirectory(../third_party/zlib zlib EXCLUDE_FROM_ALL)
add_library(buzz_prepare_core STATIC src/common.cpp src/crypto.cpp src/certified.cpp src/import.cpp src/disc.cpp
    src/session.cpp src/elf.cpp src/ppu_loader.cpp src/spu_images.cpp src/spu_decode.cpp src/spu_lift.cpp
    src/spu_workloads.cpp src/hle_nids.cpp src/ppu_decode.cpp src/ppu_functions.cpp src/ppu_scalar.cpp)
target_include_directories(buzz_prepare_core PUBLIC src)
target_link_libraries(buzz_prepare_core PUBLIC Qt6::Core PRIVATE ZLIB::ZLIBSTATIC)
if(WIN32)
    target_link_libraries(buzz_prepare_core PRIVATE bcrypt)
else()
    find_package(OpenSSL REQUIRED COMPONENTS Crypto)
    target_link_libraries(buzz_prepare_core PRIVATE OpenSSL::Crypto)
endif()
add_library(buzz_prepare_wizard STATIC src/wizard.cpp)
target_link_libraries(buzz_prepare_wizard PUBLIC Qt6::Widgets PRIVATE Qt6::Network buzz_prepare_core)
add_executable(BuzzPrepare src/main.cpp src/wizard.qrc)
target_link_libraries(BuzzPrepare PRIVATE buzz_prepare_core buzz_prepare_wizard)
if(WIN32)
    qt_add_executable(BuzzSetup WIN32 src/setup_main.cpp src/wizard.qrc src/wizard.rc)
    target_link_libraries(BuzzSetup PRIVATE buzz_prepare_wizard)
    install(TARGETS BuzzSetup RUNTIME DESTINATION bin)
endif()
if(MSVC)
    target_compile_options(buzz_prepare_core PRIVATE /W4 /utf-8)
    target_compile_options(BuzzPrepare PRIVATE /W4 /utf-8)
    target_compile_options(buzz_prepare_wizard PRIVATE /W4 /utf-8)
else()
    target_compile_options(buzz_prepare_core PRIVATE -Wall -Wextra -Wpedantic)
    target_compile_options(BuzzPrepare PRIVATE -Wall -Wextra -Wpedantic)
    target_compile_options(buzz_prepare_wizard PRIVATE -Wall -Wextra -Wpedantic)
endif()
if(BUILD_TESTING)
    find_package(Qt6 REQUIRED COMPONENTS Test)
    add_executable(preparation_import_test tests/import_test.cpp)
    target_link_libraries(preparation_import_test PRIVATE buzz_prepare_core Qt6::Test)
    if(MSVC)
        target_compile_options(preparation_import_test PRIVATE /utf-8)
    endif()
    add_test(NAME preparation-import COMMAND preparation_import_test)
endif()
install(TARGETS BuzzPrepare RUNTIME DESTINATION bin)
