| cmake_minimum_required(VERSION 3.18) |
| |
| include(CMake/Version.cmake) |
| |
| include(GoogleTest) |
| enable_testing() |
| # Disable test discovery after build. |
| # By default, `gtest_discover_tests()` add a post-build step to run test executables in order to |
| # discover the test targets. This is problematic in some build environments. (for example: if |
| # cross-compiling) |
| set(CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE "PRE_TEST") |
| |
| project(AEMUCommon |
| DESCRIPTION "Android emulation utilities library" |
| VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH} |
| LANGUAGES CXX C) |
| |
| set(AEMU_COMMON_REPO_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) |
| |
| if(NOT ANGLE_REPO_ROOT) |
| set(ANGLE_REPO_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../external/angle) |
| endif() |
| |
| option(AEMU_COMMON_GEN_PKGCONFIG |
| "Generate install files used by pkg-config." |
| OFF) |
| option(ENABLE_CLANG_THREAD_SAFETY_CHECKS |
| "Enable clang thread-safety checks (-Wthread-safety)." |
| OFF) |
| option(AEMU_COMMON_USE_PERFETTO "Use perfotto for tracing." OFF) |
| option(AEMU_BASE_USE_LZ4 "The lz4 dependency is provided, and compile the compressing stream." OFF) |
| |
| if (WIN32) |
| set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi") |
| else() |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3 -O3") |
| endif() |
| set(CMAKE_POSITION_INDEPENDENT_CODE ON) |
| set(CMAKE_CXX_STANDARD 17) |
| set(CMAKE_C_STANDARD 11) |
| |
| if (MSVC) |
| # ask msvc not to warn not secure C ISO functions |
| add_compile_definitions(_CRT_SECURE_NO_WARNINGS) |
| # ask msvc not to warn non C ISO POSIX functions |
| add_compile_definitions(_CRT_NONSTDC_NO_DEPRECATE) |
| endif() |
| |
| # Set AEMU_BUILD_CONFIG_NAME to use a custom cmake build script located in |
| # build-config/$AEMU_BUILD_CONFIG_NAME. If AEMU_BUILD_CONFIG_NAME is unset, |
| # it will default to building everything. See build-config/gfxstream/CMakeLists.txt |
| # for an example. |
| if (NOT ${AEMU_COMMON_BUILD_CONFIG} STREQUAL "") |
| if (NOT EXISTS "${AEMU_COMMON_REPO_ROOT}/build-config/${AEMU_COMMON_BUILD_CONFIG}") |
| message(FATAL_ERROR "build-config/${AEMU_COMMON_BUILD_CONFIG} does not exist") |
| endif() |
| message(STATUS "aemu-common: Using custom build script in \ |
| ${AEMU_COMMON_REPO_ROOT}/build-config/${AEMU_COMMON_BUILD_CONFIG}") |
| add_subdirectory(build-config/${AEMU_COMMON_BUILD_CONFIG}) |
| endif() |
| |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-extern-c-compat -Wno-return-type-c-linkage") |
| |
| add_subdirectory(base) |
| add_subdirectory(snapshot) |
| add_subdirectory(host-common) |
| add_subdirectory(third-party) |
| |
| add_library(aemu_common INTERFACE) |
| target_link_libraries( |
| aemu_common |
| INTERFACE |
| aemu-base |
| aemu-base.headers |
| aemu-host-common |
| aemu-host-common.headers) |
| |
| if(AEMU_COMMON_GEN_PKGCONFIG) |
| include(GNUInstallDirs) |
| set(INSTALL_PC_FILES |
| aemu_base |
| logging_base |
| aemu_host_common |
| gfxstream_snapshot) |
| if(ENABLE_VKCEREAL_TESTS) |
| list(APPEND INSTALL_PC_FILES aemu_base_testing_support aemu_host_common_testing_support) |
| endif() |
| foreach(PC_FILE IN LISTS INSTALL_PC_FILES) |
| configure_file(CMake/${PC_FILE}.pc.in ${PC_FILE}.pc @ONLY) |
| install( |
| FILES "${CMAKE_CURRENT_BINARY_DIR}/${PC_FILE}.pc" |
| DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) |
| endforeach() |
| |
| install(DIRECTORY base/include/aemu DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
| install(DIRECTORY host-common/include/host-common DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
| install(DIRECTORY host-common/testing |
| DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/host-common |
| FILES_MATCHING |
| PATTERN "*.h") |
| install(DIRECTORY snapshot/include/snapshot DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
| set(INSTALL_TARGETS |
| aemu-base |
| aemu-host-common |
| gfxstream-snapshot |
| logging-base) |
| if(ENABLE_VKCEREAL_TESTS) |
| list(APPEND INSTALL_TARGETS aemu-base-testing-support aemu-host-common-testing-support) |
| endif() |
| install(TARGETS ${INSTALL_TARGETS} |
| LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
| endif() |