cmake_minimum_required(VERSION 3.22.1)

project("mobilegluvk")

enable_language(CXX)

set(CMAKE_CXX_STANDARD 17)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w -fvisibility=hidden -funwind-tables -g -D_THREAD_SAFE -fPIC -stdlib=libc++")

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w -g -std=gnu99 -funwind-tables -O3 -fvisibility=hidden")

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++")

set(CMAKE_ANDROID_STL_TYPE c++_static)

set(CMAKE_BUILD_TYPE Release)

set(PROFILING OFF)

find_library(GLSLANG_LIB glslang PATHS ${CMAKE_SOURCE_DIR}/libraries/arm64-v8a/)

add_library(${CMAKE_PROJECT_NAME} SHARED 
        MG/Init.cpp

        # MG_GL/GL
        MG/MG_GL/GL/Getter/GL_Getter.cpp
        MG/MG_GL/GL/Getter/BackendInfo.cpp
        
        MG/MG_GL/GL/Framebuffer/GL_Framebuffer.cpp

        MG/MG_GL/GL/Common/GL_Common.cpp

        MG/MG_GL/GL/Buffer/GL_Buffer.cpp

        MG/MG_GL/GL/Command/GL_Command.cpp

        MG/MG_GL/GL/Program/GL_Program.cpp

        MG/MG_GL/GL/Shader/GL_Shader.cpp

        MG/MG_GL/GL/Texture/GL_Texture.cpp

        MG/MG_GL/GL/VertexArray/GL_VertexArray.cpp
        
        # MG_GL/State
        MG/MG_GL/State/Core/GLState.cpp
        
        MG/MG_GL/State/Texture/TextureState.cpp

        # MG_GL/GLX
        MG/MG_GL/GLX/LookUp/LookUp.cpp
        
        # MG_GL/GL_Def
        MG/MG_GL/GL_Def/GL_Def.cpp
        
        # MG_UTIL/Debug
        MG/MG_UTIL/Debug/Debug.cpp
        
        # MG_GL/EGL
        MG/MG_GL/EGL/VK/EGL_EMU.cpp
)

target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ./includes)

target_link_libraries(${CMAKE_PROJECT_NAME}
        ${CMAKE_SOURCE_DIR}/library/arm64-v8a/libglslang.a
        #${CMAKE_SOURCE_DIR}/library/arm64-v8a/libspirv-cross-c-shared.so
        #${CMAKE_SOURCE_DIR}/library/arm64-v8a/libshaderconv.so
        ${CMAKE_SOURCE_DIR}/library/arm64-v8a/libGenericCodeGen.a
        ${CMAKE_SOURCE_DIR}/library/arm64-v8a/libglslang-default-resource-limits.a
        ${CMAKE_SOURCE_DIR}/library/arm64-v8a/libMachineIndependent.a
        ${CMAKE_SOURCE_DIR}/library/arm64-v8a/libOSDependent.a
        ${CMAKE_SOURCE_DIR}/library/arm64-v8a/libSPIRV-Tools-diff.a
        ${CMAKE_SOURCE_DIR}/library/arm64-v8a/libSPIRV-Tools-link.a
        ${CMAKE_SOURCE_DIR}/library/arm64-v8a/libSPIRV-Tools-lint.a
        ${CMAKE_SOURCE_DIR}/library/arm64-v8a/libSPIRV-Tools-opt.a
        ${CMAKE_SOURCE_DIR}/library/arm64-v8a/libSPIRV-Tools-reduce.a
        ${CMAKE_SOURCE_DIR}/library/arm64-v8a/libSPIRV-Tools.a
        ${CMAKE_SOURCE_DIR}/library/arm64-v8a/libSPIRV.a
        ${CMAKE_SOURCE_DIR}/library/arm64-v8a/libSPVRemapper.a
        android
        log
        EGL
        vulkan
)

target_include_directories(mobilegluvk PUBLIC
        ${CMAKE_SOURCE_DIR}/include
        )


if (PROFILING)
        find_package(Threads)
        include_directories(${CMAKE_SOURCE_DIR}/3rdparty/perfetto/sdk)
        add_library(perfetto STATIC ${CMAKE_SOURCE_DIR}/3rdparty/perfetto/sdk/perfetto.cc)
        target_link_libraries(mobilegluvk perfetto ${CMAKE_THREAD_LIBS_INIT})
        target_compile_definitions(mobilegluvk PUBLIC PROFILING=1)
endif()