# Configure and add `astc-encoder`, if needed if (ASTC_CPU_DECODING) set(DECOMPRESSOR ON) # Disable compression code set(CLI OFF) # Disable the command line interface # Compile with the AVX2 instruction set. This is the fastest option available on x86_64. # At run time, if the CPU doesn't support AVX2, the library will simply return an error status # during initialization and we will fall back on the compute shader to decompress ASTC textures. # # In the future, we should define `ASTCENC_DYNAMIC_LIBRARY` and build multiple versions of the # library for each SIMD architecture, and dynamically load the fastest one at run time. # See also: https://github.com/ARM-software/astc-encoder/issues/79 set(ISA_AVX2 ON) add_subdirectory(astc-encoder) endif () # Enable perfetto in CMake if needed # add_subdirectory(perfetto-tracing-only) add_subdirectory(renderdoc) add_subdirectory(stb) if(ENABLE_VKCEREAL_TESTS) set(AEMU_BASE_USE_LZ4 ON CACHE BOOL "" FORCE) endif() if(NOT TARGET lz4_static AND AEMU_BASE_USE_LZ4) set(BUILD_STATIC_LIBS ON CACHE BOOL "" FORCE) if(DEPENDENCY_RESOLUTION STREQUAL "AOSP") set(LZ4_PATH ${PROJECT_SOURCE_DIR}/../../../external/lz4/build/cmake) if(EXISTS ${LZ4_PATH}) add_subdirectory(${LZ4_PATH} lz4) endif() elseif(DEPENDENCY_RESOLUTION STREQUAL "SYSTEM") find_package(PkgConfig REQUIRED) pkg_search_module(lz4 REQUIRED IMPORTED_TARGET GLOBAL liblz4) add_library(lz4_static ALIAS PkgConfig::lz4) endif() endif() if(NOT TARGET gtest_main AND ENABLE_VKCEREAL_TESTS) # For Windows: Prevent overriding the parent project's compiler/linker settings set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) if(DEPENDENCY_RESOLUTION STREQUAL "AOSP") set(GOOGLETEST_PATH ${PROJECT_SOURCE_DIR}/../../../external/googletest) if(EXISTS ${GOOGLETEST_PATH}) add_subdirectory(${GOOGLETEST_PATH} googletest) endif() elseif(DEPENDENCY_RESOLUTION STREQUAL "SYSTEM") find_package(PkgConfig REQUIRED) pkg_search_module(gtest REQUIRED IMPORTED_TARGET GLOBAL gtest) pkg_search_module(gtest_main REQUIRED IMPORTED_TARGET GLOBAL gtest_main) pkg_search_module(gmock REQUIRED IMPORTED_TARGET GLOBAL gmock) pkg_search_module(gmock_main REQUIRED IMPORTED_TARGET GLOBAL gmock_main) add_library(gtest ALIAS PkgConfig::gtest) add_library(gtest_main ALIAS PkgConfig::gtest_main) add_library(gmock ALIAS PkgConfig::gmock) add_library(gmock_main ALIAS PkgConfig::gmock_main) endif() endif() if(NOT TARGET aemu_common) set(AEMU_COMMON_BUILD_CONFIG "gfxstream" CACHE STRING "") if(DEPENDENCY_RESOLUTION STREQUAL "AOSP") set(AEMU_COMMON_PATH ${PROJECT_SOURCE_DIR}/../../../hardware/google/aemu) if(EXISTS ${AEMU_COMMON_PATH}) add_subdirectory(${AEMU_COMMON_PATH} aemu_common) endif() elseif(DEPENDENCY_RESOLUTION STREQUAL "SYSTEM") find_package(PkgConfig REQUIRED) set(AEMU_PC_FILES aemu_base aemu_logging aemu_host_common aemu_base_testing_support aemu_host_common_testing_support aemu_snapshot) foreach(PC_FILE IN LISTS AEMU_PC_FILES) pkg_search_module(${PC_FILE} REQUIRED IMPORTED_TARGET GLOBAL ${PC_FILE}>=0.0.0) endforeach() add_library(aemu-base.headers INTERFACE) target_include_directories(aemu-base.headers INTERFACE ${aemu_base_INCLUDE_DIRS}) add_library(aemu-host-common.headers INTERFACE) target_include_directories(aemu-host-common.headers INTERFACE ${aemu_host_common_INCLUDE_DIRS}) target_link_libraries(aemu-host-common.headers INTERFACE renderdoc gfxstream_vulkan_headers) add_library(gfxstream-snapshot.headers INTERFACE) target_include_directories(gfxstream-snapshot.headers INTERFACE ${aemu_snapshot_INCLUDE_DIRS}) add_library(gfxstream-snapshot ALIAS PkgConfig::aemu_snapshot) add_library(logging-base INTERFACE) target_link_libraries(logging-base INTERFACE PkgConfig::aemu_logging) if (WIN32) set(aemu-base-platform-deps Shlwapi) else() set(aemu-base-platform-deps dl rt) endif() add_library(aemu-base INTERFACE) target_link_libraries( aemu-base INTERFACE PkgConfig::aemu_base logging-base ${aemu-base-platform-deps}) if(TARGET lz4_static) target_link_libraries(aemu-base INTERFACE lz4_static) endif() if(TARGET perfetto-tracing-only) target_link_libraries(aemu-base INTERFACE perfetto-tracing-only) endif() add_library(aemu-host-common INTERFACE) target_link_libraries(aemu-host-common INTERFACE PkgConfig::aemu_host_common aemu-base) add_library(aemu-base-testing-support INTERFACE) target_link_libraries( aemu-base-testing-support INTERFACE PkgConfig::aemu_base_testing_support aemu-base gmock gtest) add_library(aemu-host-common-testing-support INTERFACE) target_link_libraries( aemu-host-common-testing-support INTERFACE PkgConfig::aemu_host_common_testing_support PkgConfig::aemu_host_common PkgConfig::aemu_base PkgConfig::aemu_logging gmock gtest) if(TARGET lz4_static) target_link_libraries(aemu-host-common-testing-support INTERFACE lz4_static) endif() if(TARGET perfetto-tracing-only) target_link_libraries(aemu-host-common-testing-support INTERFACE perfetto-tracing-only) endif() add_library(aemu_common INTERFACE) target_link_libraries(aemu_common INTERFACE aemu-base aemu-host-common) target_include_directories(aemu_common INTERFACE aemu-base.headers aemu-host-common.headers) endif() endif() if(NOT TARGET gfxstream_vulkan_headers) if(DEPENDENCY_RESOLUTION STREQUAL "AOSP") set(GFXSTREAM_PROTOCOLS_PATH ${PROJECT_SOURCE_DIR}/../../../external/gfxstream-protocols) if(EXISTS ${GFXSTREAM_PROTOCOLS_PATH}) add_subdirectory(${GFXSTREAM_PROTOCOLS_PATH} gfxstream-protocols) endif() elseif(DEPENDENCY_RESOLUTION STREQUAL "SYSTEM") find_package(Vulkan 1.2.198 REQUIRED) add_library(gfxstream_vulkan_headers INTERFACE) target_include_directories(gfxstream_vulkan_headers INTERFACE ${Vulkan_INCLUDE_DIRS}) target_compile_definitions(gfxstream_vulkan_headers INTERFACE VK_GFXSTREAM_STRUCTURE_TYPE_EXT) endif() endif() if(NOT TARGET flatbuffers) set(FLATBUFFERS_BUILD_TESTS OFF) set(FLATBUFFERS_BUILD_CPP17 ON) if(DEPENDENCY_RESOLUTION STREQUAL "AOSP") set(FLATBUFFERS_PATH ${PROJECT_SOURCE_DIR}/../../../external/flatbuffers) if(EXISTS ${FLATBUFFERS_PATH}) add_subdirectory(${FLATBUFFERS_PATH} flatbuffers) endif() elseif(DEPENDENCY_RESOLUTION STREQUAL "SYSTEM") find_package(PkgConfig REQUIRED) pkg_search_module(flatbuffers REQUIRED IMPORTED_TARGET GLOBAL flatbuffers>=2.0.6) add_library(flatbuffers ALIAS PkgConfig::flatbuffers) find_program(FLATC flatc NO_CACHE REQUIRED) add_executable(flatc IMPORTED GLOBAL) set_property(TARGET flatc PROPERTY IMPORTED_LOCATION ${FLATC}) endif() endif() if (QNX) # QNX SDP provides EGL headers add_library(gfxstream_egl_headers INTERFACE) target_include_directories(gfxstream_egl_headers INTERFACE ${QNX_TARGET}/usr/include) endif() if(NOT TARGET gfxstream_egl_headers) if(DEPENDENCY_RESOLUTION STREQUAL "AOSP") # ANGLE provides the EGL headers for us. set(ANGLE_PATH ${PROJECT_SOURCE_DIR}/../../../external/angle) if(NOT EXISTS ${ANGLE_PATH}) message(FATAL_ERROR "ANGLE is not found.") endif() add_library(gfxstream_egl_headers INTERFACE) target_include_directories(gfxstream_egl_headers INTERFACE ${ANGLE_PATH}/include) elseif(DEPENDENCY_RESOLUTION STREQUAL "SYSTEM") find_package(PkgConfig REQUIRED) pkg_search_module(egl REQUIRED IMPORTED_TARGET GLOBAL egl>=1.5) add_library(gfxstream_egl_headers ALIAS PkgConfig::egl) endif() endif() if(WITH_BENCHMARK) # Add Google's benchmarking framework set(BENCHMARK_ENABLE_EXCEPTIONS OFF) # We disable exceptions in gfxstream set(BENCHMARK_ENABLE_TESTING OFF) # Don't build the unit tests for the library, to save time set(BENCHMARK_ENABLE_GTEST_TESTS OFF) if(DEPENDENCY_RESOLUTION STREQUAL "AOSP") set(GOOGLE_BENCHMARK_PATH ${PROJECT_SOURCE_DIR}/../../../external/google-benchmark) if(EXISTS ${GOOGLE_BENCHMARK_PATH}) add_subdirectory(${GOOGLE_BENCHMARK_PATH} google-benchmark) endif() elseif(DEPENDENCY_RESOLUTION STREQUAL "SYSTEM") message(FATAL_ERROR "Not implemented") endif() endif() if(NOT TARGET libdrm_headers) if(DEPENDENCY_RESOLUTION STREQUAL "AOSP") set(LIBDRM_PATH ${PROJECT_SOURCE_DIR}/../../../external/libdrm) if(NOT EXISTS ${LIBDRM_PATH}) message(FATAL_ERROR "LIBDRM is not found.") endif() add_library(libdrm_headers INTERFACE) target_include_directories(libdrm_headers INTERFACE ${LIBDRM_PATH}/include/drm) elseif(DEPENDENCY_RESOLUTION STREQUAL "SYSTEM") find_package(PkgConfig REQUIRED) pkg_search_module(drm REQUIRED IMPORTED_TARGET GLOBAL libdrm) add_library(libdrm_headers ALIAS PkgConfig::drm) endif() endif() if(NOT TARGET aemu_common) message(FATAL_ERROR "The dependency aemu_common not found") endif() if(NOT TARGET gfxstream_vulkan_headers) message(FATAL_ERROR "The dependency gfxstream_vulkan_headers not found") endif() if(NOT TARGET flatbuffers) message(FATAL_ERROR "The dependency flatbuffers not found.") endif() if(NOT TARGET libdrm_headers) message(FATAL_ERROR "The dependency libdrm_headers not found.") endif()