# 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) elseif(DEPENDENCY_RESOLUTION STREQUAL "DOWNLOAD") FetchContent_Declare( lz4 GIT_REPOSITORY https://android.googlesource.com/platform/external/lz4 GIT_REMOTE_NAME aosp GIT_TAG aosp/master GIT_REMOTE_UPDATE_STRATEGY CHECKOUT GIT_PROGRESS TRUE SOURCE_SUBDIR build/cmake ) FetchContent_MakeAvailable(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) elseif(DEPENDENCY_RESOLUTION STREQUAL "DOWNLOAD") FetchContent_Declare( googletest GIT_REPOSITORY https://android.googlesource.com/platform/external/googletest GIT_REMOTE_NAME aosp GIT_TAG aosp/master GIT_REMOTE_UPDATE_STRATEGY CHECKOUT GIT_PROGRESS TRUE ) FetchContent_MakeAvailable(googletest) 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 logging_base aemu_host_common aemu_base_testing_support aemu_host_common_testing_support gfxstream_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 ${gfxstream_snapshot_INCLUDE_DIRS}) add_library(gfxstream-snapshot ALIAS PkgConfig::gfxstream_snapshot) add_library(logging-base INTERFACE) target_link_libraries(logging-base INTERFACE PkgConfig::logging_base) 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::logging_base 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) elseif(DEPENDENCY_RESOLUTION STREQUAL "DOWNLOAD") FetchContent_Declare( aemu_common GIT_REPOSITORY https://android.googlesource.com/platform/hardware/google/aemu GIT_REMOTE_NAME aosp GIT_TAG aosp/master GIT_REMOTE_UPDATE_STRATEGY CHECKOUT GIT_PROGRESS TRUE ) FetchContent_MakeAvailable(aemu_common) 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) elseif(DEPENDENCY_RESOLUTION STREQUAL "DOWNLOAD") FetchContent_Declare( gfxstream_protocols GIT_REPOSITORY https://android.googlesource.com/platform/external/gfxstream-protocols GIT_REMOTE_NAME aosp GIT_TAG aosp/master GIT_REMOTE_UPDATE_STRATEGY CHECKOUT GIT_PROGRESS TRUE ) FetchContent_MakeAvailable(gfxstream_protocols) 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}) elseif(DEPENDENCY_RESOLUTION STREQUAL "DOWNLOAD") FetchContent_Declare( flatbuffers GIT_REPOSITORY https://android.googlesource.com/platform/external/flatbuffers GIT_REMOTE_NAME aosp GIT_TAG aosp/master GIT_REMOTE_UPDATE_STRATEGY CHECKOUT GIT_PROGRESS TRUE ) FetchContent_MakeAvailable(flatbuffers) endif() 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) elseif(DEPENDENCY_RESOLUTION STREQUAL "DOWNLOAD") FetchContent_Declare( egl GIT_REPOSITORY https://github.com/KhronosGroup/EGL-Registry.git GIT_TAG main GIT_REMOTE_UPDATE_STRATEGY CHECKOUT GIT_PROGRESS TRUE ) FetchContent_MakeAvailable(egl) add_library(gfxstream_egl_headers INTERFACE) target_include_directories(gfxstream_egl_headers INTERFACE ${egl_SOURCE_DIR}/api) 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") elseif(DEPENDENCY_RESOLUTION STREQUAL "DOWNLOAD") FetchContent_Declare( google_benchmark GIT_REPOSITORY https://github.com/google/benchmark.git GIT_TAG v1.7.0 GIT_PROGRESS TRUE ) FetchContent_MakeAvailable(google_benchmark) 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()