217 lines
6.9 KiB
CMake
217 lines
6.9 KiB
CMake
cmake_minimum_required(VERSION 3.18.1)
|
|
|
|
# Project configuration
|
|
project(VavCoreTextureBindingTest)
|
|
|
|
# Set C++ standard
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
# Android configuration (must be Android)
|
|
if(NOT ANDROID)
|
|
message(FATAL_ERROR "This CMakeLists.txt is for Android builds only")
|
|
endif()
|
|
|
|
# Minimum API level for comprehensive graphics support
|
|
set(ANDROID_NATIVE_API_LEVEL 29)
|
|
|
|
# Configure Android-specific settings
|
|
set(CMAKE_ANDROID_API_MIN ${ANDROID_NATIVE_API_LEVEL})
|
|
set(CMAKE_ANDROID_GUI FALSE)
|
|
|
|
message(STATUS "Building VavCore Texture Binding Test for Android API ${ANDROID_NATIVE_API_LEVEL}")
|
|
|
|
# Android-specific compiler flags
|
|
add_compile_definitions(ANDROID)
|
|
|
|
# Test app source directory (relative to this CMakeLists.txt)
|
|
set(TEST_ROOT ${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
# Include directories
|
|
include_directories(
|
|
${TEST_ROOT}/src
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../vavcore/include
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../vavcore/src
|
|
)
|
|
|
|
# Add project-wide include directories if provided
|
|
if(DEFINED PROJECT_INCLUDE_DIR)
|
|
include_directories(${PROJECT_INCLUDE_DIR})
|
|
message(STATUS "Added project include directory: ${PROJECT_INCLUDE_DIR}")
|
|
else()
|
|
# Default fallback to parent directory include
|
|
get_filename_component(PARENT_DIR ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY)
|
|
get_filename_component(PARENT_DIR ${PARENT_DIR} DIRECTORY)
|
|
get_filename_component(PARENT_DIR ${PARENT_DIR} DIRECTORY)
|
|
get_filename_component(PARENT_DIR ${PARENT_DIR} DIRECTORY)
|
|
get_filename_component(PROJECT_ROOT ${PARENT_DIR} DIRECTORY)
|
|
set(FALLBACK_INCLUDE_DIR "${PROJECT_ROOT}/include")
|
|
if(EXISTS ${FALLBACK_INCLUDE_DIR})
|
|
include_directories(${FALLBACK_INCLUDE_DIR})
|
|
message(STATUS "Using fallback include directory: ${FALLBACK_INCLUDE_DIR}")
|
|
endif()
|
|
endif()
|
|
|
|
# Test app source files
|
|
set(TEST_SOURCES
|
|
${TEST_ROOT}/src/main.cpp
|
|
${TEST_ROOT}/src/OpenGLESTextureTest.cpp
|
|
${TEST_ROOT}/src/VulkanImageTest.cpp
|
|
${TEST_ROOT}/src/TestFramework.cpp
|
|
)
|
|
|
|
# Find required Android libraries
|
|
find_library(log-lib log)
|
|
find_library(android-lib android)
|
|
find_library(egl-lib EGL)
|
|
find_library(gles3-lib GLESv3)
|
|
|
|
if(NOT log-lib)
|
|
message(FATAL_ERROR "Android log library not found")
|
|
endif()
|
|
|
|
if(NOT android-lib)
|
|
message(FATAL_ERROR "Android library not found")
|
|
endif()
|
|
|
|
if(NOT egl-lib)
|
|
message(FATAL_ERROR "EGL library not found")
|
|
endif()
|
|
|
|
if(NOT gles3-lib)
|
|
message(FATAL_ERROR "OpenGL ES 3.0 library not found")
|
|
endif()
|
|
|
|
# Android system libraries
|
|
set(TEST_ANDROID_LIBS
|
|
${log-lib} # Android logging
|
|
${android-lib} # Android framework
|
|
${egl-lib} # EGL for OpenGL ES context
|
|
${gles3-lib} # OpenGL ES 3.0
|
|
)
|
|
|
|
# Import VavCore library
|
|
set(VAVCORE_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../vavcore/lib/android-${ANDROID_ABI}/libVavCore.so")
|
|
if(NOT EXISTS ${VAVCORE_LIB_PATH})
|
|
message(FATAL_ERROR "VavCore library not found: ${VAVCORE_LIB_PATH}")
|
|
endif()
|
|
|
|
add_library(VavCore SHARED IMPORTED)
|
|
set_target_properties(VavCore PROPERTIES
|
|
IMPORTED_LOCATION ${VAVCORE_LIB_PATH}
|
|
)
|
|
|
|
message(STATUS "VavCore library path: ${VAVCORE_LIB_PATH}")
|
|
|
|
# Import dav1d library
|
|
if(DEFINED DAV1D_LIBRARY_DIR)
|
|
set(DAV1D_LIB_PATH "${DAV1D_LIBRARY_DIR}/libdav1d.so")
|
|
else()
|
|
# Use project lib directory
|
|
if(DEFINED FALLBACK_INCLUDE_DIR)
|
|
get_filename_component(PROJECT_ROOT ${FALLBACK_INCLUDE_DIR} DIRECTORY)
|
|
set(DAV1D_LIB_PATH "${PROJECT_ROOT}/lib/android-${ANDROID_ABI}/dav1d/libdav1d.so")
|
|
else()
|
|
set(DAV1D_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../../lib/android-${ANDROID_ABI}/dav1d/libdav1d.so")
|
|
endif()
|
|
endif()
|
|
|
|
if(EXISTS ${DAV1D_LIB_PATH})
|
|
add_library(dav1d SHARED IMPORTED)
|
|
set_target_properties(dav1d PROPERTIES
|
|
IMPORTED_LOCATION ${DAV1D_LIB_PATH}
|
|
)
|
|
message(STATUS "dav1d library path: ${DAV1D_LIB_PATH}")
|
|
set(DAV1D_AVAILABLE TRUE)
|
|
else()
|
|
message(WARNING "dav1d library not found at: ${DAV1D_LIB_PATH}")
|
|
set(DAV1D_AVAILABLE FALSE)
|
|
endif()
|
|
|
|
# Import libwebm library
|
|
if(DEFINED LIBWEBM_LIBRARY_DIR)
|
|
set(LIBWEBM_LIB_PATH "${LIBWEBM_LIBRARY_DIR}/libwebm.a")
|
|
else()
|
|
# Use project lib directory
|
|
if(DEFINED FALLBACK_INCLUDE_DIR)
|
|
get_filename_component(PROJECT_ROOT ${FALLBACK_INCLUDE_DIR} DIRECTORY)
|
|
set(LIBWEBM_LIB_PATH "${PROJECT_ROOT}/lib/android-${ANDROID_ABI}/libwebm/libwebm.a")
|
|
else()
|
|
set(LIBWEBM_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../../lib/android-${ANDROID_ABI}/libwebm/libwebm.a")
|
|
endif()
|
|
endif()
|
|
|
|
if(EXISTS ${LIBWEBM_LIB_PATH})
|
|
add_library(webm STATIC IMPORTED)
|
|
set_target_properties(webm PROPERTIES
|
|
IMPORTED_LOCATION ${LIBWEBM_LIB_PATH}
|
|
)
|
|
message(STATUS "libwebm library path: ${LIBWEBM_LIB_PATH}")
|
|
set(LIBWEBM_AVAILABLE TRUE)
|
|
else()
|
|
message(WARNING "libwebm library not found at: ${LIBWEBM_LIB_PATH}")
|
|
set(LIBWEBM_AVAILABLE FALSE)
|
|
endif()
|
|
|
|
# Create the test executable
|
|
add_executable(VavCoreTextureBindingTest ${TEST_SOURCES})
|
|
|
|
# Link libraries
|
|
set(TEST_LINK_LIBS ${TEST_ANDROID_LIBS} VavCore)
|
|
|
|
if(DAV1D_AVAILABLE)
|
|
list(APPEND TEST_LINK_LIBS dav1d)
|
|
message(STATUS "Linking with dav1d")
|
|
endif()
|
|
|
|
if(LIBWEBM_AVAILABLE)
|
|
list(APPEND TEST_LINK_LIBS webm)
|
|
message(STATUS "Linking with libwebm")
|
|
endif()
|
|
|
|
target_link_libraries(VavCoreTextureBindingTest ${TEST_LINK_LIBS})
|
|
|
|
# Set Android-specific properties
|
|
set_target_properties(VavCoreTextureBindingTest PROPERTIES
|
|
ANDROID_API_MIN ${ANDROID_NATIVE_API_LEVEL}
|
|
ANDROID_GUI FALSE
|
|
)
|
|
|
|
# Compiler-specific flags
|
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
target_compile_options(VavCoreTextureBindingTest PRIVATE
|
|
-Wall
|
|
-Wextra
|
|
-Wno-unused-parameter
|
|
-Wno-missing-field-initializers
|
|
)
|
|
endif()
|
|
|
|
# Debug/Release specific flags
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
target_compile_definitions(VavCoreTextureBindingTest PRIVATE DEBUG=1)
|
|
message(STATUS "Building VavCore Texture Binding Test in Debug mode")
|
|
else()
|
|
target_compile_definitions(VavCoreTextureBindingTest PRIVATE NDEBUG=1)
|
|
target_compile_options(VavCoreTextureBindingTest PRIVATE -O3)
|
|
message(STATUS "Building VavCore Texture Binding Test in Release mode")
|
|
endif()
|
|
|
|
# Install the test executable
|
|
install(TARGETS VavCoreTextureBindingTest
|
|
RUNTIME DESTINATION bin
|
|
)
|
|
|
|
# Display configuration summary
|
|
message(STATUS "=== VavCore Texture Binding Test Configuration ===")
|
|
message(STATUS "Platform: ${CMAKE_SYSTEM_NAME}")
|
|
message(STATUS "Architecture: ${CMAKE_SYSTEM_PROCESSOR}")
|
|
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
|
message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
|
|
message(STATUS "Android API Level: ${ANDROID_NATIVE_API_LEVEL}")
|
|
message(STATUS "Android NDK: ${ANDROID_NDK}")
|
|
message(STATUS "Test Root: ${TEST_ROOT}")
|
|
message(STATUS "VavCore Available: YES")
|
|
message(STATUS "dav1d Available: ${DAV1D_AVAILABLE}")
|
|
message(STATUS "libwebm Available: ${LIBWEBM_AVAILABLE}")
|
|
message(STATUS "================================================") |