# build_all.py sets this option when invoked with the '--sign' flag. Disabled by default
option(DEFINE_USE_SIGNATURE_CHECK_MACRO "Add define USE_SIGNATURE_CHECK to project" OFF)
if(DEFINE_USE_SIGNATURE_CHECK_MACRO)
    add_definitions(-DUSE_SIGNATURE_CHECK)
endif(DEFINE_USE_SIGNATURE_CHECK_MACRO)

option(DEFINE_RUN_AS_CONSOLE_APP_MACRO "Run the helper as a console app for debugging" OFF)
if(DEFINE_RUN_AS_CONSOLE_APP_MACRO)
    add_definitions(-DRUN_AS_CONSOLE_APP)
endif(DEFINE_RUN_AS_CONSOLE_APP_MACRO)

add_definitions(-DUNICODE -D_UNICODE -DWINDSCRIBE_SERVICE -D_WIN32_WINNT=0x0601 -DWIN32_LEAN_AND_MEAN)

find_package(Boost REQUIRED COMPONENTS serialization)
find_package(spdlog CONFIG REQUIRED)
find_path(WINREG_INCLUDE_DIRS "winreg/WinReg.hpp")

set(SOURCES
    active_processes.cpp
    adapters_info.cpp
    apps_ids.cpp
    clear_wifi_history/clear_wifi_history.cpp
    changeics/icsmanager.cpp
    close_tcp_connections.cpp
    dns_firewall.cpp
    dohdata.cpp
    executecmd.cpp
    firewallfilter.cpp
    firewallonboot.cpp
    fwpm_wrapper.cpp
    helper.cpp
    hostsedit.cpp
    ikev2ipsec.cpp
    ikev2route.cpp
    ioutils.cpp
    ipv6_firewall.cpp
    ip_address/ip4_address_and_mask.cpp
    ip_address/ip6_address_and_prefix.cpp
    macaddressspoof.cpp
    main.cpp
    openvpncontroller.cpp
    pipe_for_process.cpp
    process_command.cpp
    reinstall_wan_ikev2.cpp
    remove_app_network_profiles.cpp
    simple_xor_crypt.cpp
    split_tunneling/callout_filter.cpp
    split_tunneling/hostnames_manager/dns_resolver.cpp
    split_tunneling/hostnames_manager/hostnames_manager.cpp
    split_tunneling/hostnames_manager/ip_routes.cpp
    split_tunneling/ip_address_table.cpp
    split_tunneling/ip_forward_table.cpp
    split_tunneling/routes.cpp
    split_tunneling/routes_manager.cpp
    split_tunneling/split_tunneling.cpp
    split_tunneling/split_tunnel_service_manager.cpp
    utils.cpp
    win32service.cpp
    wireguard/wireguardcontroller.cpp
    wmi_utils.cpp
    ${CMAKE_CURRENT_BINARY_DIR}/version.rc
    ../../client/client-common/utils/crashdump.cpp
    ../../client/client-common/utils/crashhandler.cpp
    ../../client/client-common/utils/executable_signature/executable_signature.cpp
    ../../client/client-common/utils/executable_signature/executable_signature_win.cpp
    ../../client/client-common/utils/servicecontrolmanager.cpp
)

if(CI_MODE)
    add_compile_options("$<$<CONFIG:Release>:/Zi>")
    add_link_options("$<$<CONFIG:Release>:/DEBUG>" "$<$<CONFIG:Release>:/OPT:REF>" "$<$<CONFIG:Release>:/OPT:ICF>")
endif()

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc @ONLY)

add_executable(${WS_APP_IDENTIFIER}Service ${SOURCES})
set_property(TARGET ${WS_APP_IDENTIFIER}Service PROPERTY COMPILE_WARNING_AS_ERROR ON)

target_link_libraries(${WS_APP_IDENTIFIER}Service
                      PRIVATE
                      Iphlpapi
                      rpcrt4
                      Fwpuclnt
                      Ws2_32
                      Wtsapi32
                      Setupapi
                      wbemuuid
                      ntdll
                      Newdev
                      Shlwapi
                      wevtapi
                      wsnet::wsnet
                      Boost::serialization
                      spdlog::spdlog
)

target_include_directories(${WS_APP_IDENTIFIER}Service PRIVATE
                           ${WINDSCRIBE_BUILD_LIBS_PATH}/wintun/include
                           ../../client/client-common
                           ${WINREG_INCLUDE_DIRS}
)

install(TARGETS ${WS_APP_IDENTIFIER}Service
    RUNTIME DESTINATION .
)
