146 lines
5.8 KiB
CMake
146 lines
5.8 KiB
CMake
cmake_minimum_required(VERSION 3.18.1)
|
|
project(swappy C CXX)
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(IgnoreOldToolchainWarning "${ANDROID_UNIFIED_HEADERS}")
|
|
|
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall -Werror -Wthread-safety" )
|
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D _LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS -fPIC" )
|
|
set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3" )
|
|
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Og" )
|
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions" )
|
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti" )
|
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections" )
|
|
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g0")
|
|
if ( DEFINED GAMESDK_THREAD_CHECKS )
|
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGAMESDK_THREAD_CHECKS=${GAMESDK_THREAD_CHECKS}" )
|
|
endif()
|
|
|
|
set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections" )
|
|
set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--hash-style=both" )
|
|
set( CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} -Wl,-s" )
|
|
set( CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports.lds" )
|
|
|
|
set ( SOURCE_LOCATION .)
|
|
set ( SOURCE_LOCATION_COMMON "${SOURCE_LOCATION}/common" )
|
|
set ( SOURCE_LOCATION_OPENGL "${SOURCE_LOCATION}/opengl" )
|
|
set ( SOURCE_LOCATION_VULKAN "${SOURCE_LOCATION}/vulkan" )
|
|
set ( SOURCE_LOCATION_TEST "${SOURCE_LOCATION}/src/androidTest/cpp" )
|
|
|
|
include_directories( ../include )
|
|
include_directories( ../src/common )
|
|
include_directories( common )
|
|
include_directories( opengl )
|
|
include_directories( vulkan )
|
|
include_directories( ${ANDROID_NDK}/sources/third_party/vulkan/src/common )
|
|
|
|
message( STATUS "Building swappy_static to ${CMAKE_CURRENT_BINARY_DIR}/build" )
|
|
|
|
|
|
# In order to support ChoreographerCallbacks back on older android versions we have a hack here
|
|
# which adds the dex file from :games-frame-pacing:extras to our binary.
|
|
# Android studio seems to use two different linkers and only one of those linkers requires we pass
|
|
# in the emulation option "-m".
|
|
# This linker which will be found in a path similar to this:
|
|
# 21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android-ld
|
|
# does not require the "-m" option.
|
|
# The more general linker which can be found in a path similar to this:
|
|
# 21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64/bin/ld.lld
|
|
# does require the "-m" option
|
|
if(CMAKE_LINKER MATCHES ".*/ld.lld" AND ANDROID_NDK_MAJOR GREATER 17)
|
|
if ( ANDROID_NDK_ABI_NAME MATCHES "armeabi-v7a")
|
|
set (LINKER_TARGET_EMULATION_OPTION "-m" "armelf_linux_eabi")
|
|
elseif(ANDROID_NDK_ABI_NAME MATCHES "arm64-v8a")
|
|
set (LINKER_TARGET_EMULATION_OPTION "-m" "aarch64linux")
|
|
elseif(ANDROID_NDK_ABI_NAME MATCHES "x86_64")
|
|
set (LINKER_TARGET_EMULATION_OPTION "-m" "elf_x86_64")
|
|
elseif(ANDROID_NDK_ABI_NAME MATCHES "x86")
|
|
set (LINKER_TARGET_EMULATION_OPTION "-m" "elf_i386")
|
|
endif()
|
|
endif()
|
|
|
|
add_custom_command(OUTPUT classes_dex.o
|
|
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR}/extras/out/intermediates/dex/release/mergeDexRelease
|
|
&& ${CMAKE_LINKER} ${LINKER_TARGET_EMULATION_OPTION} -r -b binary -o ${CMAKE_CURRENT_BINARY_DIR}/classes_dex.o classes.dex
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
)
|
|
|
|
set_source_files_properties(
|
|
classes_dex.o
|
|
PROPERTIES
|
|
EXTERNAL_OBJECT true
|
|
GENERATED true
|
|
)
|
|
|
|
add_library( swappy_static
|
|
|
|
STATIC
|
|
|
|
${SOURCE_LOCATION_COMMON}/ChoreographerFilter.cpp
|
|
${SOURCE_LOCATION_COMMON}/ChoreographerThread.cpp
|
|
${SOURCE_LOCATION_COMMON}/CpuInfo.cpp
|
|
${SOURCE_LOCATION_COMMON}/Settings.cpp
|
|
${SOURCE_LOCATION_COMMON}/Thread.cpp
|
|
${SOURCE_LOCATION_COMMON}/SwappyCommon.cpp
|
|
${SOURCE_LOCATION_COMMON}/swappy_c.cpp
|
|
${SOURCE_LOCATION_COMMON}/SwappyDisplayManager.cpp
|
|
${SOURCE_LOCATION_COMMON}/CPUTracer.cpp
|
|
${SOURCE_LOCATION_COMMON}/FrameStatistics.cpp
|
|
${SOURCE_LOCATION_OPENGL}/EGL.cpp
|
|
${SOURCE_LOCATION_OPENGL}/swappyGL_c.cpp
|
|
${SOURCE_LOCATION_OPENGL}/SwappyGL.cpp
|
|
${SOURCE_LOCATION_OPENGL}/FrameStatisticsGL.cpp
|
|
${SOURCE_LOCATION_VULKAN}/swappyVk_c.cpp
|
|
${SOURCE_LOCATION_VULKAN}/SwappyVk.cpp
|
|
${SOURCE_LOCATION_VULKAN}/SwappyVkBase.cpp
|
|
${SOURCE_LOCATION_VULKAN}/SwappyVkFallback.cpp
|
|
${SOURCE_LOCATION_VULKAN}/SwappyVkGoogleDisplayTiming.cpp
|
|
${SOURCE_LOCATION}/../src/common/system_utils.cpp
|
|
${CMAKE_CURRENT_BINARY_DIR}/classes_dex.o
|
|
# Add new source files here
|
|
)
|
|
|
|
set_target_properties( swappy_static PROPERTIES
|
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/build )
|
|
|
|
add_library( swappy
|
|
|
|
SHARED
|
|
|
|
${SOURCE_LOCATION_COMMON}/swappy_c.cpp
|
|
${SOURCE_LOCATION_OPENGL}/swappyGL_c.cpp
|
|
${SOURCE_LOCATION_VULKAN}/swappyVk_c.cpp)
|
|
|
|
|
|
set_target_properties(swappy PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/exports.lds)
|
|
|
|
target_link_libraries( swappy
|
|
|
|
swappy_static
|
|
android
|
|
GLESv2
|
|
log
|
|
atomic)
|
|
|
|
# Enable support for non-4k virtual page sizes
|
|
target_link_options(swappy PRIVATE -z max-page-size=16384)
|
|
|
|
option(BUILD_TEST "Build native tests" OFF)
|
|
if(BUILD_TEST)
|
|
|
|
find_package(googletest REQUIRED CONFIG)
|
|
find_package(junit-gtest REQUIRED CONFIG)
|
|
|
|
add_library(swappy_test SHARED ${SOURCE_LOCATION_TEST}/swappy_test.cpp)
|
|
target_link_libraries(swappy_test
|
|
PRIVATE
|
|
swappy
|
|
android
|
|
atomic
|
|
log
|
|
googletest::gtest
|
|
googletest::gmock
|
|
junit-gtest::junit-gtest
|
|
)
|
|
endif()
|
|
unset(BUILD_TEST CACHE)
|