cmake_minimum_required(VERSION 3.24)
project(runner LANGUAGES CXX)

# Define the application target. To change its name, change BINARY_NAME in the
# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer
# work.
#
# Any new source files that you add to the application should be added here.

set(FLUTTER_SOURCES
        "flutter_window.cpp"
        "main.cpp"
        "utils.cpp"
        "win32_window.cpp"
        "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
        "Runner.rc"
        "runner.exe.manifest"
)

set(FLUTTER_DEFINITIONS
        # Add preprocessor definitions for the build version.
        "FLUTTER_VERSION=\"${FLUTTER_VERSION}\""
        "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}"
        "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}"
        "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}"
        # Disable Windows macros that collide with C++ standard library functions.
        "NOMINMAX"
)
set_source_files_properties(${FLUTTER_SOURCES}
    PROPERTIES
    COMPILE_DEFINITIONS
    ${FLUTTER_DEFINITIONS}
)

set(NATIVE_VPN_SOURCES
        pigeon/native_communication.cpp
        native_vpn_impl.cpp
)
add_executable(${BINARY_NAME} WIN32
    ${FLUTTER_SOURCES}
    ${NATIVE_VPN_SOURCES}
)

# Apply the standard set of build settings. This can be removed for applications
# that need different build settings.
apply_standard_settings(${BINARY_NAME})

# Add dependency libraries and include directories. Add any application-specific
# dependencies here.
target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app)
target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib")
target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")

# Run the Flutter tool portions of the build. This must not be removed.
add_dependencies(${BINARY_NAME} flutter_assemble)

# Link TrustTunnel adapter
add_subdirectory(../../../windows ${CMAKE_CURRENT_BINARY_DIR}/vpn_easy)
target_link_libraries(${BINARY_NAME} PRIVATE vpn_easy_a)