cmake_minimum_required(VERSION 3.20)
project(openprestige_imgui LANGUAGES CXX)

file(GLOB GENERATED CONFIGURE_DEPENDS "${CORE_JNI_DIR}/imgui_*.cpp")
add_library(imgui-java64 SHARED
    ${GENERATED}
    "${CORE_JNI_DIR}/imgui.cpp"
    "${CORE_JNI_DIR}/imgui_draw.cpp"
    "${CORE_JNI_DIR}/imgui_tables.cpp"
    "${CORE_JNI_DIR}/imgui_widgets.cpp"
    "${CORE_JNI_DIR}/imgui_demo.cpp"
    "${CORE_JNI_DIR}/jni_jvm.cpp"
    "${CORE_JNI_DIR}/jni_common.cpp"
    "${CORE_JNI_DIR}/jni_binding_struct.cpp"
    "${CORE_JNI_DIR}/jni_callbacks.cpp"
    "${CORE_JNI_DIR}/jni_assertion.cpp"
    "${CORE_JNI_DIR}/jni_internal.cpp"
)
target_compile_features(imgui-java64 PRIVATE cxx_std_17)
if(WIN32)
    set(JNI_OS win32)
elseif(APPLE)
    set(JNI_OS mac)
else()
    set(JNI_OS linux)
endif()
target_include_directories(imgui-java64 PRIVATE
    "${CORE_JNI_DIR}"
    "${CORE_JNI_DIR}/jni-headers"
    "${CORE_JNI_DIR}/jni-headers/${JNI_OS}"
)
target_compile_definitions(imgui-java64 PRIVATE IMGUI_DISABLE_DEMO_WINDOWS)
set_target_properties(imgui-java64 PROPERTIES
    CXX_VISIBILITY_PRESET hidden
    VISIBILITY_INLINES_HIDDEN YES
    MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
    LIBRARY_OUTPUT_DIRECTORY "${CORE_OUTPUT_DIR}"
    RUNTIME_OUTPUT_DIRECTORY "${CORE_OUTPUT_DIR}"
    RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CORE_OUTPUT_DIR}"
)
if(MSVC)
    target_compile_options(imgui-java64 PRIVATE /O1 /Gy /GL /utf-8)
    target_link_options(imgui-java64 PRIVATE /LTCG /OPT:REF /OPT:ICF)
else()
    target_compile_options(imgui-java64 PRIVATE -Os -ffunction-sections -fdata-sections)
    if(APPLE)
        target_link_options(imgui-java64 PRIVATE -Wl,-dead_strip)
    else()
        target_link_options(imgui-java64 PRIVATE -Wl,--gc-sections -s)
    endif()
    if(MINGW)
        target_link_options(imgui-java64 PRIVATE -static-libgcc -static-libstdc++)
    endif()
endif()
if(WIN32)
    set_target_properties(imgui-java64 PROPERTIES PREFIX "")
    target_link_libraries(imgui-java64 PRIVATE imm32 user32)
endif()
