cmake_minimum_required(VERSION 3.22.1)
project("mosis")

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

#set(ANDROID_SDK "/Users/omar/Library/Android/sdk")
set(BINDER_DIR "${ANDROID_SDK}/platforms/android-36/optional/libbinder_ndk_cpp")
set(AIDL_EXE "${ANDROID_SDK}/build-tools/36.1.0/aidl.exe")

# Find Lua from vcpkg
find_package(Lua REQUIRED)

# Fetch RmlUi from GitHub with Lua bindings enabled
include(FetchContent)
FetchContent_Declare(
    rmlui
    GIT_REPOSITORY https://github.com/mikke89/RmlUi.git
    GIT_TAG master
)
set(RMLUI_LUA_BINDINGS ON CACHE BOOL "" FORCE)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
set(RMLUI_SAMPLES OFF CACHE BOOL "" FORCE)
set(RMLUI_TESTS OFF CACHE BOOL "" FORCE)
set(RMLUI_FONT_ENGINE "freetype" CACHE STRING "" FORCE)
set(RMLUI_PRECOMPILED_HEADERS OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(rmlui)

#get_cmake_property(_variableNames VARIABLES)
#list(SORT _variableNames)
#foreach(_variableName ${_variableNames})
#    message(STATUS "${_variableName}=${${_variableName}}")
#endforeach()

add_custom_command(
    OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/com/omixlab/mosis/IMosisService.cpp"
    COMMAND ${AIDL_EXE} --lang=ndk --min_sdk_version=36 -o ${CMAKE_CURRENT_BINARY_DIR} -h ${CMAKE_CURRENT_BINARY_DIR} -I ..\\aidl ..\\aidl\\com\\omixlab\\mosis\\IMosisService.aidl
    DEPENDS ../aidl/com/omixlab/mosis/IMosisService.aidl
    WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
    VERBATIM
)

add_custom_command(
    OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/com/omixlab/mosis/IMosisListener.cpp"
    COMMAND ${AIDL_EXE} --lang=ndk --min_sdk_version=36 -o ${CMAKE_CURRENT_BINARY_DIR} -h ${CMAKE_CURRENT_BINARY_DIR} -I ..\\aidl ..\\aidl\\com\\omixlab\\mosis\\IMosisListener.aidl
    DEPENDS ../aidl/com/omixlab/mosis/IMosisListener.aidl
    WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
    VERBATIM
)

add_library(mosis-service SHARED
    mosis-service.cpp
    ${CMAKE_CURRENT_BINARY_DIR}/com/omixlab/mosis/IMosisService.cpp
    ${CMAKE_CURRENT_BINARY_DIR}/com/omixlab/mosis/IMosisListener.cpp
    assets_manager.cpp
    shader.cpp
    external_texture.cpp
    quad.cpp
    egl_context.cpp
    render_target.cpp
    logger.cpp
    kernel.cpp
    glad/src/egl.c
    glad/src/gles2.c
    RmlUi_Renderer_GL3.cpp
)
target_compile_definitions(mosis-service PUBLIC
    RMLUI_NUM_MSAA_SAMPLES=2
    RMLUI_GL3_CUSTOM_LOADER=<glad/gles2.h>
)
target_include_directories(mosis-service PUBLIC
    ${CMAKE_CURRENT_LIST_DIR}
    ${CMAKE_CURRENT_BINARY_DIR}
    ${BINDER_DIR}
    glad/include
)
target_link_libraries(mosis-service
    android log binder_ndk EGL GLESv2 nativewindow
    rmlui rmlui_lua
)

add_library(mosis-test SHARED
    ${CMAKE_CURRENT_BINARY_DIR}/com/omixlab/mosis/IMosisService.cpp
    ${CMAKE_CURRENT_BINARY_DIR}/com/omixlab/mosis/IMosisListener.cpp
    mosis-test.cpp
    assets_manager.cpp
    shader.cpp
    external_texture.cpp
    quad.cpp
    egl_context.cpp
    render_target.cpp
    logger.cpp
    glad/src/egl.c
    glad/src/gles2.c
)
target_include_directories(mosis-test PUBLIC
    ${CMAKE_CURRENT_LIST_DIR}
    ${CMAKE_CURRENT_BINARY_DIR}
    ${BINDER_DIR}
    glad/include
)
target_link_libraries(mosis-test
    android log binder_ndk EGL GLESv2 nativewindow
)
