blob: 4ef46aed83829a7367afe0f8a2a2c2c247c27c97 [file] [log] [blame]
# This file defines android-emu-base library
# This is a very generic library, and should have no knowledge of the emulator whatsoever.
# This library should be useable by any other project.
# Dependencies
prebuilt(UUID)
prebuilt(GLIB2) # Acts as windows stdio compatibility layer.
prebuilt(LIBUNWIND)
if (NOT DARWIN_AARCH64)
prebuilt(TCMALLOC)
endif()
prebuilt(Threads)
# Let's add in the library
android_add_library(
TARGET android-emu-base
LICENSE Apache-2.0
SRC # cmake-format: sortable
android/base/AlignedBuf.cpp
android/base/async/AsyncReader.cpp
android/base/async/AsyncSocketServer.cpp
android/base/async/AsyncWriter.cpp
android/base/async/DefaultLooper.cpp
android/base/async/Looper.cpp
android/base/async/ScopedSocketWatch.cpp
android/base/async/ThreadLooper.cpp
android/base/Backtrace.cpp
android/base/ContiguousRangeMapper.cpp
android/base/CpuTime.cpp
android/base/CpuUsage.cpp
android/base/Debug.cpp
android/base/files/CompressingStream.cpp
android/base/files/DecompressingStream.cpp
android/base/files/Fd.cpp
android/base/files/FileShareOpen.cpp
android/base/files/GzipStreambuf.cpp
android/base/files/IniFile.cpp
android/base/files/InplaceStream.cpp
android/base/files/MemStream.cpp
android/base/files/PathUtils.cpp
android/base/files/QueueStreambuf.cpp
android/base/files/StdioStream.cpp
android/base/files/Stream.cpp
android/base/files/StreamSerializing.cpp
android/base/files/TarStream.cpp
android/base/gl_object_counter.cpp
android/base/GLObjectCounter.cpp
android/base/IOVector.cpp
android/base/JsonWriter.cpp
android/base/Log.cpp
android/base/LogFormatter.cpp
android/base/memory/LazyInstance.cpp
android/base/memory/MemoryHints.cpp
android/base/memory/MemoryTracker.cpp
android/base/misc/FileUtils.cpp
android/base/misc/HttpUtils.cpp
android/base/misc/IpcPipe.cpp
android/base/misc/StringUtils.cpp
android/base/misc/Utf8Utils.cpp
android/base/network/Dns.cpp
android/base/network/IpAddress.cpp
android/base/network/NetworkUtils.cpp
android/base/perflogger/Benchmark.cpp
android/base/perflogger/BenchmarkLibrary.cpp
android/base/perflogger/Metric.cpp
android/base/perflogger/WindowDeviationAnalyzer.cpp
android/base/Pool.cpp
android/base/ProcessControl.cpp
android/base/ring_buffer.c
android/base/sockets/SocketDrainer.cpp
android/base/sockets/SocketUtils.cpp
android/base/sockets/SocketWaiter.cpp
android/base/Stopwatch.cpp
android/base/StringFormat.cpp
android/base/StringParse.cpp
android/base/StringView.cpp
android/base/SubAllocator.cpp
android/base/synchronization/MessageChannel.cpp
android/base/system/System.cpp
android/base/threads/Async.cpp
android/base/threads/FunctorThread.cpp
android/base/threads/internal/ParallelTaskBase.cpp
android/base/threads/ThreadStore.cpp
android/base/Tracing.cpp
android/base/Uri.cpp
android/base/Uuid.cpp
android/base/Version.cpp
android/utils/bufprint.c
android/utils/bufprint_system.cpp
android/utils/debug.c
android/utils/debug_wrapper.cpp
android/utils/dirscanner.cpp
android/utils/eintr_wrapper.c
android/utils/fd.cpp
android/utils/file_io.cpp
android/utils/looper.cpp
android/utils/misc.c
android/utils/panic.c
android/utils/path.cpp
android/utils/path_system.cpp
android/utils/socket_drainer.cpp
android/utils/sockets.c
android/utils/stralloc.c
android/utils/stream.cpp
android/utils/string.cpp
android/utils/system.c
android/utils/tempfile.c
android/utils/x86_cpuid.cpp
LINUX android/base/memory/SharedMemory_posix.cpp
android/base/threads/Thread_pthread.cpp
DARWIN android/base/memory/SharedMemory_posix.cpp
android/base/system/system-native-mac.mm
android/base/threads/Thread_pthread.cpp
WINDOWS android/base/files/preadwrite.cpp
android/base/memory/SharedMemory_win32.cpp
android/base/system/Win32UnicodeString.cpp
android/base/system/Win32Utils.cpp
android/base/threads/Thread_win32.cpp
android/utils/win32_cmdline_quote.cpp
android/utils/win32_unicode.cpp
stubs/win32-stubs.c)
# Windows-msvc specific dependencies. Need these for posix support.
android_target_link_libraries(android-emu-base windows_msvc-x86_64
PUBLIC dirent-win32)
# Anyone who takes a dependency gets to use our header files.
target_include_directories(android-emu-base
PUBLIC . ../android-emugl/host/include)
# Library dependencies, these are public so they will propagate, if you link
# against the base you will link against LZ4 & UUID
target_link_libraries(
android-emu-base PRIVATE lz4 UUID::UUID perfetto-tracing-only
PUBLIC libprotobuf Threads::Threads absl::str_format)
if(OPTION_TCMALLOC)
android_target_link_libraries(
android-emu-base linux-x86_64
PUBLIC TCMALLOC::TCMALLOC LIBUNWIND::LIBUNWIND -ldl Threads::Threads -lrt)
android_target_link_libraries(
android-emu-base linux-aarch64
PUBLIC TCMALLOC::TCMALLOC LIBUNWIND::LIBUNWIND -ldl Threads::Threads -lrt)
target_compile_definitions(android-emu-base
PRIVATE "-DAEMU_TCMALLOC_ENABLED=1")
else()
android_target_link_libraries(
android-emu-base linux-aarch64 PUBLIC LIBUNWIND::LIBUNWIND -ldl
Threads::Threads -lrt)
android_target_link_libraries(
android-emu-base linux-x86_64 PUBLIC LIBUNWIND::LIBUNWIND -ldl
Threads::Threads -lrt)
target_compile_definitions(android-emu-base
PUBLIC "-DAEMU_TCMALLOC_ENABLED=0")
endif()
if(OPTION_GFXSTREAM_BACKEND)
target_compile_definitions(android-emu-base
PUBLIC "-DAEMU_GFXSTREAM_BACKEND=1")
endif()
android_target_link_libraries(
android-emu-base windows PUBLIC psapi::psapi iphlpapi::iphlpapi
ws2_32::ws2_32 shlwapi::shlwapi)
android_target_link_libraries(
android-emu-base darwin-x86_64
PUBLIC "-framework Foundation" "-framework ApplicationServices"
"-framework AppKit" "-framework IOKit")
android_target_compile_definitions(
android-emu-base darwin-x86_64 PRIVATE "-D_DARWIN_C_SOURCE=1"
"-Dftello64=ftell" "-Dfseeko64=fseek")
android_target_link_libraries(
android-emu-base darwin-aarch64
PUBLIC "-framework Foundation" "-framework ApplicationServices"
"-framework AppKit" "-framework IOKit")
android_target_compile_definitions(
android-emu-base darwin-aarch64 PRIVATE "-D_DARWIN_C_SOURCE=1"
"-Dftello64=ftell" "-Dfseeko64=fseek")
# Compiler flags, note that these should never propagate (i.e. set to public) as
# we really want to limit the usage of these flags.
android_target_compile_options(
android-emu-base Clang PRIVATE "-Wno-parentheses" "-Wno-invalid-constexpr")
android_add_test(
TARGET android-emu-base_unittests
SRC # cmake-format: sortable
android/base/AlignedBuf_unittest.cpp
android/base/ArraySize_unittest.cpp
android/base/async/AsyncSocketServer_unittest.cpp
android/base/async/Looper_unittest.cpp
android/base/async/RecurrentTask_unittest.cpp
android/base/async/ScopedSocketWatch_unittest.cpp
android/base/async/SubscriberList_unittest.cpp
android/base/containers/BufferQueue_unittest.cpp
android/base/containers/CircularBuffer_unittest.cpp
android/base/containers/EntityManager_unittest.cpp
android/base/containers/Lookup_unittest.cpp
android/base/containers/SmallVector_unittest.cpp
android/base/containers/StaticMap_unittest.cpp
android/base/ContiguousRangeMapper_unittest.cpp
android/base/EintrWrapper_unittest.cpp
android/base/EventNotificationSupport_unittest.cpp
android/base/files/FileShareOpen_unittest.cpp
android/base/files/GzipStreambuf_unittest.cpp
android/base/files/IniFile_unittest.cpp
android/base/files/InplaceStream_unittest.cpp
android/base/files/MemStream_unittest.cpp
android/base/files/PathUtils_unittest.cpp
android/base/files/ScopedFd_unittest.cpp
android/base/files/ScopedStdioFile_unittest.cpp
android/base/files/Stream_unittest.cpp
android/base/files/StreamSerializing_unittest.cpp
android/base/files/TarStream_unittest.cpp
android/base/FunctionView_unittest.cpp
android/base/JsonWriter_unittest.cpp
android/base/Log_unittest.cpp
android/base/LogFormatter_unittest.cpp
android/base/memory/LazyInstance_unittest.cpp
android/base/memory/MallocUsableSize_unittest.cpp
android/base/memory/MemoryHints_unittest.cpp
android/base/memory/OnDemand_unittest.cpp
android/base/memory/ScopedPtr_unittest.cpp
android/base/memory/SharedMemory_unittest.cpp
android/base/misc/FileUtils_unittest.cpp
android/base/misc/HttpUtils_unittest.cpp
android/base/misc/IpcPipe_unittest.cpp
android/base/misc/StringUtils_unittest.cpp
android/base/misc/Utf8Utils_unittest.cpp
android/base/network/Dns_unittest.cpp
android/base/network/IpAddress_unittest.cpp
android/base/network/NetworkUtils_unittest.cpp
android/base/Optional_unittest.cpp
android/base/perflogger/Benchmark_unittest.cpp
android/base/Pool_unittest.cpp
android/base/ProcessControl_unittest.cpp
android/base/Result_unittest.cpp
android/base/ring_buffer_unittest.cpp
android/base/sockets/ScopedSocket_unittest.cpp
android/base/sockets/SocketDrainer_unittest.cpp
android/base/sockets/SocketUtils_unittest.cpp
android/base/sockets/SocketWaiter_unittest.cpp
android/base/StringFormat_unittest.cpp
android/base/StringParse_unittest.cpp
android/base/StringView_unittest.cpp
android/base/SubAllocator_unittest.cpp
android/base/synchronization/ConditionVariable_unittest.cpp
android/base/synchronization/Lock_unittest.cpp
android/base/synchronization/MessageChannel_unittest.cpp
android/base/synchronization/ReadWriteLock_unittest.cpp
android/base/system/System_unittest.cpp
android/base/testing/MockUtils_unittest.cpp
android/base/testing/TestEvent_unittest.cpp
android/base/threads/Async_unittest.cpp
android/base/threads/FunctorThread_unittest.cpp
android/base/threads/ParallelTask_unittest.cpp
android/base/threads/Thread_unittest.cpp
android/base/threads/ThreadStore_unittest.cpp
android/base/TypeTraits_unittest.cpp
android/base/Uri_unittest.cpp
android/base/Uuid_unittest.cpp
android/base/Version_unittest.cpp
android/utils/bufprint_unittest.cpp
android/utils/dirscanner_unittest.cpp
android/utils/eintr_wrapper_unittest.cpp
android/utils/string_unittest.cpp
android/utils/tempfile_unittest.cpp
android/utils/x86_cpuid_unittest.cpp
WINDOWS android/base/files/ScopedFileHandle_unittest.cpp
android/base/files/ScopedRegKey_unittest.cpp
android/base/system/Win32UnicodeString_unittest.cpp
android/base/system/Win32Utils_unittest.cpp
MSVC android/base/system/WinMsvcSystem_unittest.cpp)
android_target_compile_options(
android-emu-base_unittests Clang PRIVATE -O0 -Wno-invalid-constexpr
-Wno-string-plus-int)
# Setup the targets compile config etc..
target_link_libraries(android-emu-base_unittests PRIVATE android-emu-base
gmock_main)
# Add the benchmark
android_add_executable(
TARGET android-emu_benchmark
NODISTRIBUTE
SRC # cmake-format: sortable
android/base/Log_benchmark.cpp
android/base/synchronization/Lock_benchmark.cpp
android/base/TranslateBenchmark.cpp)
target_link_libraries(android-emu_benchmark PRIVATE android-emu-base absl::strings absl::str_format
emulator-gbench)