Files
video-v1/vav2/platforms/android/tests/texture-binding-test/CMakeLists.txt
2025-09-29 02:42:26 +09:00

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 "================================================")