271 lines
8.5 KiB
CMake
271 lines
8.5 KiB
CMake
# Copyright 2017-2020 The Khronos Group Inc.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
#if(WIN32)
|
|
# cmake_print_variables(
|
|
# CMAKE_SYSTEM_VERSION
|
|
# CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
|
|
# )
|
|
#endif()
|
|
|
|
# N.B. Do not set CMAKE_XCODE_GENERATE_SCHEME. If set, CMake will
|
|
# destroy the scheme, losing any user-made settings, when generating
|
|
# the project after the cache has been deleted. Cache deletion is
|
|
# needed whenever Xcode is updated with new SDK versions due to CMake
|
|
# hard-wiring the version in many of its variables.
|
|
#
|
|
# XCODE_SCHEME settings can be found at
|
|
# https://cmake.org/cmake/help/latest/prop_tgt/XCODE_GENERATE_SCHEME.html
|
|
# These settings are recommended by MoltenVK Runtime User Guide.
|
|
set( CMAKE_XCODE_SCHEME_ENABLE_GPU_API_VALIDATION FALSE )
|
|
set( CMAKE_XCODE_SCHEME_ENABLE_GPU_FRAME_CAPTURE_MODE DISABLED )
|
|
|
|
#set(CMAKE_FIND_DEBUG_MODE TRUE)
|
|
find_package(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3)
|
|
#set(CMAKE_FIND_DEBUG_MODE FALSE)
|
|
if(NOT EMSCRIPTEN)
|
|
# There is no official assimp port for Emscripten, and we've had
|
|
# no time to experiment, so tests that use assimp are omitted from
|
|
# loadtests when building for the web.
|
|
find_package(assimp REQUIRED CONFIG REQUIRED)
|
|
endif()
|
|
|
|
# We use our own local copy of GL headers to ensure we have glcorearb.h.
|
|
set( OPENGL_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/other_include )
|
|
|
|
if(APPLE AND IOS)
|
|
if( CMAKE_OSX_ARCHITECTURES )
|
|
list(LENGTH CMAKE_OSX_ARCHITECTURES archs_len)
|
|
list(GET CMAKE_OSX_ARCHITECTURES 0 arch0)
|
|
if( ${archs_len} GREATER 1 OR (NOT ${arch0} STREQUAL "arm64") )
|
|
message(FATAL_ERROR "iOS loadtests only supported on arm64."
|
|
" Please disable KTX_FEATURE_LOADTEST_APPS"
|
|
" or change CMAKE_OSX_ARCHITECTURES.")
|
|
endif()
|
|
endif()
|
|
# Find Frameworks
|
|
find_library(AudioToolbox_LIBRARY AudioToolbox)
|
|
find_library(AVFoundation_LIBRARY AVFoundation)
|
|
find_library(CoreAudio_LIBRARY CoreAudio)
|
|
find_library(CoreBluetooth_LIBRARY CoreBluetooth)
|
|
find_library(CoreGraphics_LIBRARY CoreGraphics)
|
|
find_library(CoreHaptics_LIBRARY CoreHaptics)
|
|
find_library(CoreMotion_LIBRARY CoreMotion)
|
|
find_library(Foundation_LIBRARY Foundation)
|
|
find_library(GameController_LIBRARY GameController)
|
|
find_library(IOSurface_LIBRARY IOSurface)
|
|
if(${KTX_FEATURE_LOADTEST_APPS} MATCHES "Vulkan")
|
|
find_library(Metal_LIBRARY Metal)
|
|
endif()
|
|
if(${KTX_FEATURE_LOADTEST_APPS} MATCHES "OpenGL")
|
|
find_library(OpenGLES_LIBRARY OpenGLES)
|
|
endif()
|
|
find_library(QuartzCore_LIBRARY QuartzCore)
|
|
find_library(UIKit_LIBRARY UIKit)
|
|
endif()
|
|
|
|
function( ensure_runtime_dependencies_windows target )
|
|
# Custom copy commands to ensure all dependencies (testimages,
|
|
# shaders, models) are in correct location relative to executable.
|
|
|
|
if(${target} MATCHES "vkloadtests")
|
|
add_custom_command( TARGET ${target} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_BINARY_DIR}/shaders" "$<TARGET_FILE_DIR:${target}>/resources"
|
|
COMMENT "Copy shaders to build destination"
|
|
)
|
|
endif()
|
|
add_custom_command( TARGET ${target} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory "${PROJECT_SOURCE_DIR}/tests/testimages" "$<TARGET_FILE_DIR:${target}>/resources"
|
|
COMMENT "Copy testimages to build destination"
|
|
)
|
|
add_custom_command( TARGET ${target} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory "${PROJECT_SOURCE_DIR}/tests/loadtests/common/models" "$<TARGET_FILE_DIR:${target}>/resources"
|
|
COMMENT "Copy models to build destination"
|
|
)
|
|
endfunction()
|
|
|
|
add_library( appfwSDL STATIC
|
|
appfwSDL/AppBaseSDL.cpp
|
|
appfwSDL/AppBaseSDL.h
|
|
appfwSDL/main.cpp
|
|
common/LoadTestSample.cpp
|
|
common/LoadTestSample.h
|
|
common/ltexceptions.h
|
|
common/SwipeDetector.cpp
|
|
common/SwipeDetector.h
|
|
common/disable_glm_warnings.h
|
|
common/reenable_warnings.h
|
|
common/vecmath.hpp
|
|
geom/cube_data.h
|
|
geom/cube.h
|
|
geom/frame.h
|
|
geom/quad.h
|
|
${PROJECT_SOURCE_DIR}/external/SDL_gesture/SDL_gesture.h
|
|
)
|
|
|
|
target_compile_features(appfwSDL PUBLIC c_std_99 cxx_std_17)
|
|
if(EMSCRIPTEN)
|
|
target_compile_options( appfwSDL PUBLIC
|
|
"SHELL:--use-port=sdl3"
|
|
)
|
|
endif()
|
|
|
|
set_target_properties(appfwSDL PROPERTIES
|
|
CXX_VISIBILITY_PRESET ${STATIC_APP_LIB_SYMBOL_VISIBILITY}
|
|
)
|
|
|
|
target_include_directories(
|
|
appfwSDL
|
|
PUBLIC
|
|
appfwSDL
|
|
$<TARGET_PROPERTY:ktx,INTERFACE_INCLUDE_DIRECTORIES>
|
|
${PROJECT_SOURCE_DIR}/utils
|
|
${PROJECT_SOURCE_DIR}/external/SDL_gesture
|
|
common
|
|
geom
|
|
)
|
|
|
|
target_include_directories(
|
|
appfwSDL
|
|
SYSTEM AFTER PUBLIC
|
|
SDL3::Headers
|
|
${PROJECT_SOURCE_DIR}/other_include # For glm
|
|
)
|
|
|
|
target_link_libraries(
|
|
appfwSDL
|
|
PUBLIC
|
|
SDL3::SDL3
|
|
)
|
|
|
|
if(${KTX_FEATURE_LOADTEST_APPS} MATCHES "OpenGL")
|
|
add_library( GLAppSDL STATIC
|
|
appfwSDL/GLAppSDL.cpp
|
|
appfwSDL/GLAppSDL.h
|
|
glloadtests/GLLoadTests.cpp
|
|
glloadtests/GLLoadTests.h
|
|
)
|
|
|
|
if(EMSCRIPTEN)
|
|
target_compile_options( GLAppSDL PUBLIC
|
|
"SHELL:-s DISABLE_EXCEPTION_CATCHING=0"
|
|
"SHELL:--use-port=sdl3"
|
|
)
|
|
endif()
|
|
|
|
target_link_libraries(GLAppSDL appfwSDL)
|
|
|
|
target_include_directories(
|
|
GLAppSDL
|
|
PUBLIC
|
|
$<TARGET_PROPERTY:appfwSDL,INCLUDE_DIRECTORIES>
|
|
glloadtests
|
|
glloadtests/utils
|
|
)
|
|
|
|
# The above appfwSDL include brings with it the
|
|
# INTERFACE_SYSTEM_INCLUDE_DIRECTORIES.
|
|
target_include_directories(
|
|
GLAppSDL
|
|
SYSTEM BEFORE PUBLIC
|
|
$<IF:$<BOOL:${WIN32}>,${GLEW_INCLUDE_DIR},${OPENGL_INCLUDE_DIR}>
|
|
#$<TARGET_PROPERTY:appfwSDL,INTERFACE_SYSTEM_INCLUDE_DIRECTORIES>
|
|
)
|
|
|
|
set_target_properties(GLAppSDL PROPERTIES
|
|
CXX_VISIBILITY_PRESET ${STATIC_APP_LIB_SYMBOL_VISIBILITY}
|
|
)
|
|
endif()
|
|
|
|
set( LOAD_TEST_COMMON_LIBS )
|
|
|
|
if(APPLE)
|
|
set( EXE_FLAG MACOSX_BUNDLE )
|
|
set( KTX_APP_ICON_BASENAME ktx_app)
|
|
set( KTX_DOC_ICON_BASENAME ktx_document)
|
|
set( KTX_APP_ICON ${KTX_APP_ICON_BASENAME}.icns)
|
|
set( KTX_DOC_ICON ${KTX_DOC_ICON_BASENAME}.icns)
|
|
# On iOS an icon is a directory of images not a single file.
|
|
# BASENAME is the name of the directory in the common .xcassets directory.
|
|
# Assets are copied to the bundle in the build target setup.
|
|
set( KTX_APP_ICON_PATH ${PROJECT_SOURCE_DIR}/icons/mac/${KTX_APP_ICON} )
|
|
set( KTX_DOC_ICON_PATH ${PROJECT_SOURCE_DIR}/icons/mac/${KTX_DOC_ICON} )
|
|
cmake_print_variables(assimp_LIBRARIES)
|
|
if(IOS)
|
|
set( LOAD_TEST_COMMON_LIBS
|
|
assimp::assimp
|
|
)
|
|
else()
|
|
set( LOAD_TEST_COMMON_LIBS
|
|
assimp::assimp
|
|
)
|
|
endif()
|
|
elseif(LINUX)
|
|
set( KTX_APP_ICON_PATH ${PROJECT_SOURCE_DIR}/icons/linux/ktx_app.svg )
|
|
set( LOAD_TEST_COMMON_LIBS
|
|
assimp::assimp
|
|
#${SDL3_LIBRARIES}
|
|
SDL3::SDL3
|
|
)
|
|
elseif(WIN32)
|
|
set( EXE_FLAG WIN32 )
|
|
set( KTX_APP_ICON_PATH ${PROJECT_SOURCE_DIR}/icons/win/ktx_app.ico )
|
|
set( LOAD_TEST_COMMON_LIBS
|
|
assimp::assimp
|
|
)
|
|
endif()
|
|
|
|
set( LOAD_TEST_COLLADA_MODELS
|
|
"teapot.dae"
|
|
)
|
|
list(TRANSFORM LOAD_TEST_COLLADA_MODELS PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/common/models/")
|
|
# An Xcode (or possibly CMake) update in late 2024 or early 2025 started
|
|
# compressing .dae files when copying them to bundle resources. This piece
|
|
# of undocumented magic makes it just copy. The Xcode GUI presents an option
|
|
# menu on the file with "Copy" and "Compress" in the project settings browser.
|
|
# This attribute sets it to "Copy."
|
|
set_source_files_properties( ${LOAD_TEST_COLLADA_MODELS}
|
|
PROPERTIES
|
|
XCODE_FILE_ATTRIBUTES "--decompress"
|
|
)
|
|
|
|
set( LOAD_TEST_OBJ_MODELS
|
|
"cube.obj"
|
|
"sphere.obj"
|
|
"torusknot.obj"
|
|
)
|
|
list(TRANSFORM LOAD_TEST_OBJ_MODELS PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/common/models/")
|
|
# Hack to prevent *.obj 3D files being mistaken as linkable obj files
|
|
set_source_files_properties( ${LOAD_TEST_OBJ_MODELS}
|
|
PROPERTIES HEADER_FILE_ONLY TRUE
|
|
)
|
|
set( LOAD_TEST_COMMON_MODELS
|
|
${LOAD_TEST_COLLADA_MODELS}
|
|
${LOAD_TEST_OBJ_MODELS}
|
|
)
|
|
|
|
# A custom loadtest_models target does not work as configure fails at
|
|
# an install_target that uses this with an error "the target is not
|
|
# an executable, library or module."
|
|
#add_custom_target( loadtest_models
|
|
# SOURCES ${LOAD_TEST_COMMON_MODELS}
|
|
#)
|
|
|
|
set( LOAD_TEST_COMMON_RESOURCE_FILES
|
|
${KTX_APP_ICON_PATH}
|
|
${KTX_DOC_ICON_PATH}
|
|
${LOAD_TEST_COMMON_MODELS}
|
|
)
|
|
|
|
if(LINUX)
|
|
set( LOAD_TEST_DESTROOT "/opt" )
|
|
endif()
|
|
|
|
if(${KTX_FEATURE_LOADTEST_APPS} MATCHES "OpenGL")
|
|
include(glloadtests.cmake)
|
|
endif()
|
|
|
|
if(${KTX_FEATURE_LOADTEST_APPS} MATCHES "Vulkan")
|
|
include(vkloadtests.cmake)
|
|
endif()
|