1cmake_policy(SET CMP0048 NEW) 2# Set this policy to allow gfxstream to modify the passed in targets like 3# ${GFXSTREAM_HOST_COMMON_LIB}. 4cmake_policy(SET CMP0079 NEW) 5get_directory_property(hasParent PARENT_DIRECTORY) 6if(NOT hasParent) 7 project(gfx-streaming-kit) 8endif() 9cmake_minimum_required(VERSION 3.18) 10 11option(ENABLE_VKCEREAL_TESTS "Enable building vulkan-cereal unittests" OFF) 12option(BUILD_ASAN_WIN32 "Build with ASAN on Windows platform" OFF) 13 14set(VALID_DEPENDENCY_RESOLUTION AOSP SYSTEM DOWNLOAD) 15set(DEPENDENCY_RESOLUTION "AOSP" CACHE STRING "\ 16How to resolve the dependencies. Currently there are 3 options: AOSP, SYSTEM and DOWNLOAD. AOSP \ 17will assume the repo is checked out in an Android tree, and find the dependencies through \ 18relative paths. SYSTEM will use the cmake find_package to identify the package. DOWNLOAD will use \ 19CMake FetchContent to download the dependencies from the AOSP tree.\ 20") 21set_property(CACHE DEPENDENCY_RESOLUTION PROPERTY STRINGS ${VALID_DEPENDENCY_RESOLUTION}) 22if(NOT DEPENDENCY_RESOLUTION IN_LIST VALID_DEPENDENCY_RESOLUTION) 23 message(FATAL_ERROR "DEPENDENCY_RESOLUTION must be one of ${VALID_DEPENDENCY_RESOLUTION}.") 24endif() 25 26option(BUILD_STANDALONE "Build with standalone implementations of base/host-common libraries" ON) 27if (BUILD_STANDALONE) 28 # These libraries may be changed in non-standalone builds to inject another implementation of 29 # these APIs. 30 set(GFXSTREAM_BASE_LIB aemu-base) 31 set(GFXSTREAM_HOST_COMMON_LIB aemu-host-common) 32endif() 33 34option(BUILD_GRAPHICS_DETECTOR "Build the graphics detector utility" OFF) 35 36if (WIN32) 37 add_definitions("-DUNICODE -D_UNICODE -DNOMINMAX -DEMUGL_BUILD -DVK_USE_PLATFORM_WIN32_KHR -DBUILDING_EMUGL_COMMON_SHARED") 38endif() 39 40option(VIRGL_RENDERER_UNSTABLE_APIS "Use unstable virglrenderer APIs" ON) 41if(VIRGL_RENDERER_UNSTABLE_APIS) 42 add_definitions(-DVIRGL_RENDERER_UNSTABLE_APIS) 43endif() 44 45add_definitions(-DGFXSTREAM_ENABLE_HOST_GLES=1) 46 47option(ASTC_CPU_DECODING "Enable decoding ASTC textures on the CPU" OFF) 48 49# For now the caller of the cmake script is responsible to create the angle_shader_translator 50# target. 51option(USE_ANGLE_SHADER_PARSER "Build with ANGLE shader parser." OFF) 52 53option(WITH_BENCHMARK "Builds benchmarking code" OFF) 54 55if(UNIX AND NOT APPLE AND NOT QNX) 56 set(LINUX TRUE) 57endif() 58 59find_package(Threads) 60include(ExternalProject) 61include(FetchContent) 62set(FETCHCONTENT_QUIET FALSE) 63 64include(GoogleTest) 65enable_testing() 66# Disable test discovery after build. 67# By default, `gtest_discover_tests()` adds a post-build step to run the test executables in order to discover the test 68# targets. This is problematic in some build environments. (for example: if cross-compiling) 69set(CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE "PRE_TEST") 70 71# set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) 72set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) 73set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) 74set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/distribution) 75if (WIN32) 76 SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi") 77else() 78 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3 -O3") 79endif() 80set(CMAKE_POSITION_INDEPENDENT_CODE ON) 81set(CMAKE_CXX_STANDARD 17) 82set(CMAKE_C_STANDARD 11) 83 84if (APPLE) 85 add_compile_definitions(VK_USE_PLATFORM_MACOS_MVK) 86elseif(QNX) 87 # TODO(jsimonot): fix build error 88 # add_compile_definitions(VK_USE_PLATFORM_SCREEN_QNX) 89elseif(UNIX) 90 # TODO(kaiyili, b/179477624): Add Linux specific Vulkan platform macro definitions 91 # Use X11 version of EGL platform specific definitions. 92 add_compile_definitions(USE_X11) 93elseif(WIN32) 94 add_compile_definitions(VK_USE_PLATFORM_WIN32_KHR) 95endif() 96 97add_compile_definitions(GLM_FORCE_RADIANS) 98add_compile_definitions(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES) 99add_compile_definitions(VK_GFXSTREAM_STRUCTURE_TYPE_EXT) 100 101if (MSVC) 102 # ask msvc not to warn not secure C ISO functions 103 add_compile_definitions(_CRT_SECURE_NO_WARNINGS) 104 # ask msvc not to warn non C ISO POSIX functions 105 add_compile_definitions(_CRT_NONSTDC_NO_DEPRECATE) 106endif() 107 108if(MSVC OR CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC") 109 # generate PDB files 110 add_link_options("/DEBUG") 111endif() 112 113# Uncomment for ASAN support 114# set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -fsanitize=address") 115# set (CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=address") 116 117if (WIN32) 118 if (BUILD_ASAN_WIN32) 119 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") 120 # ASAN does not work with flag /MDd, replace it with /MD 121 string(REPLACE "/MDd" "/MD" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") 122 set(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}) 123 124 # ASAN linker 125 # User needs to use -D ASAN_LIB_DIR:STRING=/path/to/asan_libs to add library directory 126 if (NOT DEFINED ASAN_LIB_DIR) 127 message(FATAL_ERROR "Please input ASAN library path with -D ASAN_LIB_DIR:STRING=/path/to/asan_lib_dir") 128 endif() 129 link_libraries(clang_rt.asan_dynamic-x86_64.lib clang_rt.asan_dynamic_runtime_thunk-x86_64.lib) 130 message("Linking ASAN libraries from: ${ASAN_LIB_DIR}") 131 link_directories(${ASAN_LIB_DIR}) 132 endif() 133endif() 134 135set(GFXSTREAM_REPO_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) 136 137if(USE_ANGLE_SHADER_PARSER) 138 add_compile_definitions(USE_ANGLE_SHADER_PARSER) 139endif() 140 141if(CONFIG_AEMU) 142 include(android.cmake) 143endif() 144 145set(EXTRA_SUBDIR_TEST_INCLUDE_FILES) 146 147add_subdirectory(common) 148 149# Third party dependencies 150add_subdirectory(third-party) 151 152# Backends###################################################################### 153 154add_subdirectory(utils) 155add_subdirectory(host) 156 157# Protocols and associated code generators###################################### 158 159add_subdirectory(codegen) 160 161if (ENABLE_VKCEREAL_TESTS) 162 list(APPEND EXTRA_SUBDIR_TEST_INCLUDE_FILES ${CMAKE_SOURCE_DIR}/cmake/test_properties.cmake) 163endif() 164 165include(cmake/SetSubdirectorProperties.cmake) 166