2024-03-24 01:15:57 +00:00
|
|
|
# SPDX-FileCopyrightText: 2016 Citra Emulator Project
|
chore: make yuzu REUSE compliant
[REUSE] is a specification that aims at making file copyright
information consistent, so that it can be both human and machine
readable. It basically requires that all files have a header containing
copyright and licensing information. When this isn't possible, like
when dealing with binary assets, generated files or embedded third-party
dependencies, it is permitted to insert copyright information in the
`.reuse/dep5` file.
Oh, and it also requires that all the licenses used in the project are
present in the `LICENSES` folder, that's why the diff is so huge.
This can be done automatically with `reuse download --all`.
The `reuse` tool also contains a handy subcommand that analyzes the
project and tells whether or not the project is (still) compliant,
`reuse lint`.
Following REUSE has a few advantages over the current approach:
- Copyright information is easy to access for users / downstream
- Files like `dist/license.md` do not need to exist anymore, as
`.reuse/dep5` is used instead
- `reuse lint` makes it easy to ensure that copyright information of
files like binary assets / images is always accurate and up to date
To add copyright information of files that didn't have it I looked up
who committed what and when, for each file. As yuzu contributors do not
have to sign a CLA or similar I couldn't assume that copyright ownership
was of the "yuzu Emulator Project", so I used the name and/or email of
the commit author instead.
[REUSE]: https://reuse.software
Follow-up to 01cf05bc75b1e47beb08937439f3ed9339e7b254
2022-05-15 00:06:02 +00:00
|
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
2017-05-28 06:33:14 +00:00
|
|
|
|
2022-12-31 13:31:17 +00:00
|
|
|
# Dynarmic has cmake_minimum_required(3.12) and we may want to override
|
|
|
|
# some of its variables, which is only possible in 3.13+
|
|
|
|
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
|
|
|
|
|
2023-01-05 04:00:44 +00:00
|
|
|
# Disable tests in all externals supporting the standard option name
|
|
|
|
set(BUILD_TESTING OFF)
|
|
|
|
|
2023-03-01 20:31:27 +00:00
|
|
|
# Build only static externals
|
|
|
|
set(BUILD_SHARED_LIBS OFF)
|
|
|
|
|
|
|
|
# Skip install rules for all externals
|
|
|
|
set_directory_properties(PROPERTIES EXCLUDE_FROM_ALL ON)
|
|
|
|
|
2024-01-29 21:17:00 +00:00
|
|
|
# Xbyak (also used by Dynarmic, so needs to be added first)
|
2022-11-25 18:35:46 +00:00
|
|
|
if ((ARCHITECTURE_x86 OR ARCHITECTURE_x86_64) AND NOT TARGET xbyak::xbyak)
|
2023-03-01 20:31:27 +00:00
|
|
|
add_subdirectory(xbyak)
|
2020-06-15 19:10:39 +00:00
|
|
|
endif()
|
|
|
|
|
2024-01-29 21:17:00 +00:00
|
|
|
# Oaknut (also used by Dynarmic, so needs to be added first)
|
2023-11-17 21:44:53 +00:00
|
|
|
if (ARCHITECTURE_arm64 AND NOT TARGET merry::oaknut)
|
|
|
|
add_subdirectory(oaknut)
|
|
|
|
endif()
|
|
|
|
|
2024-01-29 21:17:00 +00:00
|
|
|
# Dynarmic
|
2022-11-25 18:35:46 +00:00
|
|
|
if ((ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) AND NOT TARGET dynarmic::dynarmic)
|
2022-12-31 13:31:17 +00:00
|
|
|
set(DYNARMIC_IGNORE_ASSERTS ON)
|
2023-03-01 20:31:27 +00:00
|
|
|
add_subdirectory(dynarmic)
|
2022-11-25 18:35:46 +00:00
|
|
|
add_library(dynarmic::dynarmic ALIAS dynarmic)
|
2018-01-09 21:33:46 +00:00
|
|
|
endif()
|
|
|
|
|
2017-05-28 06:33:14 +00:00
|
|
|
# getopt
|
|
|
|
if (MSVC)
|
|
|
|
add_subdirectory(getopt)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# Glad
|
|
|
|
add_subdirectory(glad)
|
|
|
|
|
2018-07-28 03:55:23 +00:00
|
|
|
# mbedtls
|
2023-03-01 20:31:27 +00:00
|
|
|
add_subdirectory(mbedtls)
|
2018-07-28 03:55:23 +00:00
|
|
|
target_include_directories(mbedtls PUBLIC ./mbedtls/include)
|
2023-08-25 23:23:34 +00:00
|
|
|
if (NOT MSVC)
|
|
|
|
target_compile_options(mbedcrypto PRIVATE
|
|
|
|
-Wno-unused-but-set-variable
|
|
|
|
-Wno-string-concatenation)
|
|
|
|
endif()
|
2018-07-28 03:55:23 +00:00
|
|
|
|
2017-05-28 06:33:14 +00:00
|
|
|
# MicroProfile
|
|
|
|
add_library(microprofile INTERFACE)
|
|
|
|
target_include_directories(microprofile INTERFACE ./microprofile)
|
|
|
|
|
2022-06-12 21:14:27 +00:00
|
|
|
# GCC bugs
|
|
|
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND MINGW)
|
|
|
|
target_compile_options(microprofile INTERFACE "-Wno-array-bounds")
|
|
|
|
endif()
|
|
|
|
|
2021-06-03 07:49:35 +00:00
|
|
|
# libusb
|
2022-12-28 22:26:46 +00:00
|
|
|
if (ENABLE_LIBUSB AND NOT TARGET libusb::usb)
|
2023-03-01 20:31:27 +00:00
|
|
|
add_subdirectory(libusb)
|
2021-06-03 07:49:35 +00:00
|
|
|
endif()
|
|
|
|
|
2021-04-16 23:12:47 +00:00
|
|
|
# SDL2
|
2024-03-08 09:06:48 +00:00
|
|
|
if (SUYU_USE_EXTERNAL_SDL2)
|
2021-05-31 19:24:17 +00:00
|
|
|
if (NOT WIN32)
|
2024-03-08 09:06:48 +00:00
|
|
|
# Suyu itself needs: Atomic Audio Events Joystick Haptic Sensor Threads Timers
|
2021-12-17 02:49:26 +00:00
|
|
|
# Since 2.0.18 Atomic+Threads required for HIDAPI/libusb (see https://github.com/libsdl-org/SDL/issues/5095)
|
2024-03-08 09:06:48 +00:00
|
|
|
# Suyu-cmd also needs: Video (depends on Loadso/Dlopen)
|
2023-06-12 14:06:49 +00:00
|
|
|
# CPUinfo also required for SDL Audio, at least until 2.28.0 (see https://github.com/libsdl-org/SDL/issues/7809)
|
2021-05-31 19:24:17 +00:00
|
|
|
set(SDL_UNUSED_SUBSYSTEMS
|
2023-06-12 14:06:49 +00:00
|
|
|
File Filesystem
|
2021-12-17 02:49:26 +00:00
|
|
|
Locale Power Render)
|
2021-05-31 19:24:17 +00:00
|
|
|
foreach(_SUB ${SDL_UNUSED_SUBSYSTEMS})
|
|
|
|
string(TOUPPER ${_SUB} _OPT)
|
2022-12-31 13:31:17 +00:00
|
|
|
set(SDL_${_OPT} OFF)
|
2021-05-31 19:24:17 +00:00
|
|
|
endforeach()
|
|
|
|
|
2022-12-31 13:31:17 +00:00
|
|
|
set(HIDAPI ON)
|
2021-05-31 19:24:17 +00:00
|
|
|
endif()
|
2022-11-21 16:31:18 +00:00
|
|
|
if (APPLE)
|
|
|
|
set(SDL_FILE ON)
|
|
|
|
endif()
|
2021-05-09 15:58:16 +00:00
|
|
|
|
2023-03-01 20:31:27 +00:00
|
|
|
add_subdirectory(SDL)
|
2021-04-16 23:12:47 +00:00
|
|
|
endif()
|
|
|
|
|
2022-07-06 00:20:39 +00:00
|
|
|
# ENet
|
2022-11-25 18:35:46 +00:00
|
|
|
if (NOT TARGET enet::enet)
|
2023-03-01 20:31:27 +00:00
|
|
|
add_subdirectory(enet)
|
2022-11-25 18:35:46 +00:00
|
|
|
target_include_directories(enet INTERFACE ./enet/include)
|
|
|
|
add_library(enet::enet ALIAS enet)
|
|
|
|
endif()
|
2022-07-06 00:20:39 +00:00
|
|
|
|
2018-07-28 17:44:50 +00:00
|
|
|
# Cubeb
|
2022-11-25 18:35:46 +00:00
|
|
|
if (ENABLE_CUBEB AND NOT TARGET cubeb::cubeb)
|
2022-12-31 13:31:17 +00:00
|
|
|
set(BUILD_TESTS OFF)
|
2023-03-01 20:31:27 +00:00
|
|
|
set(BUILD_TOOLS OFF)
|
|
|
|
add_subdirectory(cubeb)
|
2022-11-25 18:35:46 +00:00
|
|
|
add_library(cubeb::cubeb ALIAS cubeb)
|
Warnings cleanup for GCC 13 and Clang 16
Note: For GCC there are still a huge number of `-Warray-bounds` warnings
coming from `externals/dynarmic`. I could have added a workaround in
`externals/CMakeLists.txt` similar to what this PR does for other
externals, but given Dynarmic's close affiliation with Yuzu, it would be
better to fix it upstream.
Besides that, on my machine, this makes the build warning-free except
for some warnings from glslangValidator and AutoMoc.
Details:
- Disable some warnings in externals.
- Disable `-Wnullability-completeness`, which is a Clang warning triggered
by the Vulkan SDK where if any pointers in the header are marked
_Nullable, it wants all pointers to be marked _Nullable or _Nonnull.
Most of them are, but some aren't. Who knows why.
- `src/web_service/verify_user_jwt.cpp`: Disable another warning when
including `jwt.hpp`.
- `src/input_common/input_poller.cpp`: Add missing `override` specifiers.
- src/common/swap.h: Remove redundant `operator&`. In general, this
file declares three overloads of each operator. Using `+` as an
example, the overloads are:
- a member function for `swapped_t + integer`
- a member function for `swapped_t + swapped_t`
- a free function for `integer + swapped_t`
But for `operator&`, there was an additional free function for
`swapped_t + integer`, which was redundant with the member function.
This caused a GCC warning saying "ISO C++ says that these are
ambiguous".
2023-08-20 20:05:49 +00:00
|
|
|
if (NOT MSVC)
|
2023-08-20 21:52:58 +00:00
|
|
|
if (TARGET speex)
|
|
|
|
target_compile_options(speex PRIVATE -Wno-sign-compare)
|
|
|
|
endif()
|
Warnings cleanup for GCC 13 and Clang 16
Note: For GCC there are still a huge number of `-Warray-bounds` warnings
coming from `externals/dynarmic`. I could have added a workaround in
`externals/CMakeLists.txt` similar to what this PR does for other
externals, but given Dynarmic's close affiliation with Yuzu, it would be
better to fix it upstream.
Besides that, on my machine, this makes the build warning-free except
for some warnings from glslangValidator and AutoMoc.
Details:
- Disable some warnings in externals.
- Disable `-Wnullability-completeness`, which is a Clang warning triggered
by the Vulkan SDK where if any pointers in the header are marked
_Nullable, it wants all pointers to be marked _Nullable or _Nonnull.
Most of them are, but some aren't. Who knows why.
- `src/web_service/verify_user_jwt.cpp`: Disable another warning when
including `jwt.hpp`.
- `src/input_common/input_poller.cpp`: Add missing `override` specifiers.
- src/common/swap.h: Remove redundant `operator&`. In general, this
file declares three overloads of each operator. Using `+` as an
example, the overloads are:
- a member function for `swapped_t + integer`
- a member function for `swapped_t + swapped_t`
- a free function for `integer + swapped_t`
But for `operator&`, there was an additional free function for
`swapped_t + integer`, which was redundant with the member function.
This caused a GCC warning saying "ISO C++ says that these are
ambiguous".
2023-08-20 20:05:49 +00:00
|
|
|
target_compile_options(cubeb PRIVATE -Wno-implicit-const-int-float-conversion)
|
|
|
|
endif()
|
2018-07-28 17:44:50 +00:00
|
|
|
endif()
|
2018-09-16 18:05:19 +00:00
|
|
|
|
|
|
|
# DiscordRPC
|
2022-11-25 18:35:46 +00:00
|
|
|
if (USE_DISCORD_PRESENCE AND NOT TARGET DiscordRPC::discord-rpc)
|
2023-03-01 20:31:27 +00:00
|
|
|
set(BUILD_EXAMPLES OFF)
|
|
|
|
add_subdirectory(discord-rpc)
|
2018-09-16 18:05:19 +00:00
|
|
|
target_include_directories(discord-rpc INTERFACE ./discord-rpc/include)
|
2022-11-25 18:35:46 +00:00
|
|
|
add_library(DiscordRPC::discord-rpc ALIAS discord-rpc)
|
2018-09-16 18:05:19 +00:00
|
|
|
endif()
|
|
|
|
|
2019-03-14 05:17:19 +00:00
|
|
|
# Sirit
|
2023-03-01 20:31:27 +00:00
|
|
|
add_subdirectory(sirit)
|
2019-03-14 05:17:19 +00:00
|
|
|
|
2023-02-21 20:55:04 +00:00
|
|
|
# httplib
|
2024-03-08 07:49:32 +00:00
|
|
|
if (ENABLE_WEB_SERVICE OR USE_DISCORD_PRESENCE AND NOT TARGET httplib::httplib)
|
2023-02-22 19:27:05 +00:00
|
|
|
set(HTTPLIB_REQUIRE_OPENSSL ON)
|
2023-03-01 20:31:27 +00:00
|
|
|
add_subdirectory(cpp-httplib)
|
2022-11-25 18:35:46 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
# cpp-jwt
|
|
|
|
if (ENABLE_WEB_SERVICE AND NOT TARGET cpp-jwt::cpp-jwt)
|
2023-02-22 19:27:05 +00:00
|
|
|
set(CPP_JWT_BUILD_EXAMPLES OFF)
|
|
|
|
set(CPP_JWT_BUILD_TESTS OFF)
|
|
|
|
set(CPP_JWT_USE_VENDORED_NLOHMANN_JSON OFF)
|
2023-03-01 20:31:27 +00:00
|
|
|
add_subdirectory(cpp-jwt)
|
2018-09-17 18:58:24 +00:00
|
|
|
endif()
|
2020-07-01 05:09:33 +00:00
|
|
|
|
|
|
|
# Opus
|
2022-11-25 18:35:46 +00:00
|
|
|
if (NOT TARGET Opus::opus)
|
2023-10-22 20:16:08 +00:00
|
|
|
set(OPUS_BUILD_TESTING OFF)
|
|
|
|
set(OPUS_BUILD_PROGRAMS OFF)
|
|
|
|
set(OPUS_INSTALL_PKG_CONFIG_MODULE OFF)
|
|
|
|
set(OPUS_INSTALL_CMAKE_CONFIG_MODULE OFF)
|
2023-03-01 20:31:27 +00:00
|
|
|
add_subdirectory(opus)
|
2021-04-08 21:49:32 +00:00
|
|
|
endif()
|
2021-12-15 08:10:07 +00:00
|
|
|
|
|
|
|
# FFMpeg
|
2024-03-08 09:06:48 +00:00
|
|
|
if (SUYU_USE_BUNDLED_FFMPEG)
|
2021-12-15 08:10:07 +00:00
|
|
|
add_subdirectory(ffmpeg)
|
2021-12-15 07:27:12 +00:00
|
|
|
set(FFmpeg_PATH "${FFmpeg_PATH}" PARENT_SCOPE)
|
2021-12-15 07:53:22 +00:00
|
|
|
set(FFmpeg_LDFLAGS "${FFmpeg_LDFLAGS}" PARENT_SCOPE)
|
|
|
|
set(FFmpeg_LIBRARIES "${FFmpeg_LIBRARIES}" PARENT_SCOPE)
|
|
|
|
set(FFmpeg_INCLUDE_DIR "${FFmpeg_INCLUDE_DIR}" PARENT_SCOPE)
|
2021-12-15 08:10:07 +00:00
|
|
|
endif()
|
2022-11-25 18:35:46 +00:00
|
|
|
|
|
|
|
# Vulkan-Headers
|
2024-03-08 09:06:48 +00:00
|
|
|
if (SUYU_USE_EXTERNAL_VULKAN_HEADERS)
|
2023-03-01 20:31:27 +00:00
|
|
|
add_subdirectory(Vulkan-Headers)
|
2022-11-25 18:35:46 +00:00
|
|
|
endif()
|
2023-01-13 21:06:13 +00:00
|
|
|
|
2023-12-28 11:35:28 +00:00
|
|
|
# Vulkan-Utility-Libraries
|
2024-03-08 09:06:48 +00:00
|
|
|
if (SUYU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES)
|
2023-12-28 11:35:28 +00:00
|
|
|
add_subdirectory(Vulkan-Utility-Libraries)
|
|
|
|
endif()
|
|
|
|
|
2023-06-03 17:18:51 +00:00
|
|
|
# TZDB (Time Zone Database)
|
|
|
|
add_subdirectory(nx_tzdb)
|
|
|
|
|
2023-06-18 08:59:12 +00:00
|
|
|
# VMA
|
2023-06-27 20:54:33 +00:00
|
|
|
if (NOT TARGET GPUOpen::VulkanMemoryAllocator)
|
|
|
|
add_subdirectory(VulkanMemoryAllocator)
|
|
|
|
endif()
|
2023-06-18 08:59:12 +00:00
|
|
|
|
2023-01-23 00:51:12 +00:00
|
|
|
if (NOT TARGET LLVM::Demangle)
|
2023-03-01 20:31:27 +00:00
|
|
|
add_library(demangle demangle/ItaniumDemangle.cpp)
|
2023-01-23 00:51:12 +00:00
|
|
|
target_include_directories(demangle PUBLIC ./demangle)
|
Warnings cleanup for GCC 13 and Clang 16
Note: For GCC there are still a huge number of `-Warray-bounds` warnings
coming from `externals/dynarmic`. I could have added a workaround in
`externals/CMakeLists.txt` similar to what this PR does for other
externals, but given Dynarmic's close affiliation with Yuzu, it would be
better to fix it upstream.
Besides that, on my machine, this makes the build warning-free except
for some warnings from glslangValidator and AutoMoc.
Details:
- Disable some warnings in externals.
- Disable `-Wnullability-completeness`, which is a Clang warning triggered
by the Vulkan SDK where if any pointers in the header are marked
_Nullable, it wants all pointers to be marked _Nullable or _Nonnull.
Most of them are, but some aren't. Who knows why.
- `src/web_service/verify_user_jwt.cpp`: Disable another warning when
including `jwt.hpp`.
- `src/input_common/input_poller.cpp`: Add missing `override` specifiers.
- src/common/swap.h: Remove redundant `operator&`. In general, this
file declares three overloads of each operator. Using `+` as an
example, the overloads are:
- a member function for `swapped_t + integer`
- a member function for `swapped_t + swapped_t`
- a free function for `integer + swapped_t`
But for `operator&`, there was an additional free function for
`swapped_t + integer`, which was redundant with the member function.
This caused a GCC warning saying "ISO C++ says that these are
ambiguous".
2023-08-20 20:05:49 +00:00
|
|
|
if (NOT MSVC)
|
|
|
|
target_compile_options(demangle PRIVATE -Wno-deprecated-declarations) # std::is_pod
|
|
|
|
endif()
|
2023-01-23 00:51:12 +00:00
|
|
|
add_library(LLVM::Demangle ALIAS demangle)
|
|
|
|
endif()
|
2023-05-20 21:15:36 +00:00
|
|
|
|
2023-10-12 14:36:26 +00:00
|
|
|
add_library(stb stb/stb_dxt.cpp)
|
2023-05-20 21:15:36 +00:00
|
|
|
target_include_directories(stb PUBLIC ./stb)
|
2023-01-01 23:34:38 +00:00
|
|
|
|
2023-10-12 14:36:26 +00:00
|
|
|
if (NOT TARGET stb::headers)
|
|
|
|
add_library(stb::headers ALIAS stb)
|
|
|
|
endif()
|
|
|
|
|
2023-10-29 13:50:55 +00:00
|
|
|
add_library(tz tz/tz/tz.cpp)
|
|
|
|
target_include_directories(tz PUBLIC ./tz)
|
|
|
|
|
2023-06-06 20:10:06 +00:00
|
|
|
add_library(bc_decoder bc_decoder/bc_decoder.cpp)
|
|
|
|
target_include_directories(bc_decoder PUBLIC ./bc_decoder)
|
|
|
|
|
2023-09-16 16:59:53 +00:00
|
|
|
if (NOT TARGET RenderDoc::API)
|
|
|
|
add_library(renderdoc INTERFACE)
|
|
|
|
target_include_directories(renderdoc SYSTEM INTERFACE ./renderdoc)
|
|
|
|
add_library(RenderDoc::API ALIAS renderdoc)
|
|
|
|
endif()
|
2023-09-10 20:26:09 +00:00
|
|
|
|
2023-01-01 23:34:38 +00:00
|
|
|
if (ANDROID)
|
2023-03-16 15:56:51 +00:00
|
|
|
if (ARCHITECTURE_arm64)
|
|
|
|
add_subdirectory(libadrenotools)
|
|
|
|
endif()
|
2023-01-01 23:34:38 +00:00
|
|
|
endif()
|
2023-10-04 17:11:05 +00:00
|
|
|
|
2023-11-03 18:27:08 +00:00
|
|
|
if (UNIX AND NOT APPLE AND NOT TARGET gamemode::headers)
|
|
|
|
add_library(gamemode INTERFACE)
|
|
|
|
target_include_directories(gamemode INTERFACE gamemode)
|
|
|
|
add_library(gamemode::headers ALIAS gamemode)
|
2023-07-16 22:45:33 +00:00
|
|
|
endif()
|
|
|
|
|
2023-10-04 17:11:05 +00:00
|
|
|
# Breakpad
|
|
|
|
# https://github.com/microsoft/vcpkg/blob/master/ports/breakpad/CMakeLists.txt
|
2024-03-08 09:06:48 +00:00
|
|
|
if (SUYU_CRASH_DUMPS AND NOT TARGET libbreakpad_client)
|
2023-10-04 17:11:05 +00:00
|
|
|
set(BREAKPAD_WIN32_DEFINES
|
|
|
|
NOMINMAX
|
|
|
|
UNICODE
|
|
|
|
WIN32_LEAN_AND_MEAN
|
|
|
|
_CRT_SECURE_NO_WARNINGS
|
|
|
|
_CRT_SECURE_NO_DEPRECATE
|
|
|
|
_CRT_NONSTDC_NO_DEPRECATE
|
|
|
|
)
|
|
|
|
|
|
|
|
# libbreakpad
|
|
|
|
add_library(libbreakpad STATIC)
|
|
|
|
file(GLOB_RECURSE LIBBREAKPAD_SOURCES breakpad/src/processor/*.cc)
|
|
|
|
file(GLOB_RECURSE LIBDISASM_SOURCES breakpad/src/third_party/libdisasm/*.c)
|
|
|
|
list(FILTER LIBBREAKPAD_SOURCES EXCLUDE REGEX "_unittest|_selftest|synth_minidump|/tests|/testdata|/solaris|microdump_stackwalk|minidump_dump|minidump_stackwalk")
|
|
|
|
if (WIN32)
|
|
|
|
list(FILTER LIBBREAKPAD_SOURCES EXCLUDE REGEX "/linux|/mac|/android")
|
|
|
|
target_compile_definitions(libbreakpad PRIVATE ${BREAKPAD_WIN32_DEFINES})
|
|
|
|
target_include_directories(libbreakpad PRIVATE "${CMAKE_GENERATOR_INSTANCE}/DIA SDK/include")
|
|
|
|
elseif (APPLE)
|
|
|
|
list(FILTER LIBBREAKPAD_SOURCES EXCLUDE REGEX "/linux|/windows|/android")
|
|
|
|
else()
|
|
|
|
list(FILTER LIBBREAKPAD_SOURCES EXCLUDE REGEX "/mac|/windows|/android")
|
|
|
|
endif()
|
|
|
|
target_sources(libbreakpad PRIVATE ${LIBBREAKPAD_SOURCES} ${LIBDISASM_SOURCES})
|
|
|
|
target_include_directories(libbreakpad
|
|
|
|
PUBLIC
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/breakpad/src
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/breakpad/src/third_party/libdisasm
|
|
|
|
)
|
|
|
|
|
|
|
|
# libbreakpad_client
|
|
|
|
add_library(libbreakpad_client STATIC)
|
|
|
|
file(GLOB LIBBREAKPAD_COMMON_SOURCES breakpad/src/common/*.cc breakpad/src/common/*.c breakpad/src/client/*.cc)
|
|
|
|
|
|
|
|
if (WIN32)
|
|
|
|
file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES breakpad/src/client/windows/*.cc breakpad/src/common/windows/*.cc)
|
|
|
|
list(FILTER LIBBREAKPAD_COMMON_SOURCES EXCLUDE REGEX "language.cc|path_helper.cc|stabs_to_module.cc|stabs_reader.cc|minidump_file_writer.cc")
|
|
|
|
target_include_directories(libbreakpad_client PRIVATE "${CMAKE_GENERATOR_INSTANCE}/DIA SDK/include")
|
|
|
|
target_compile_definitions(libbreakpad_client PRIVATE ${BREAKPAD_WIN32_DEFINES})
|
|
|
|
elseif (APPLE)
|
|
|
|
target_compile_definitions(libbreakpad_client PRIVATE HAVE_MACH_O_NLIST_H)
|
|
|
|
file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES breakpad/src/client/mac/*.cc breakpad/src/common/mac/*.cc)
|
|
|
|
list(APPEND LIBBREAKPAD_CLIENT_SOURCES breakpad/src/common/mac/MachIPC.mm)
|
|
|
|
else()
|
|
|
|
target_compile_definitions(libbreakpad_client PUBLIC -DHAVE_A_OUT_H)
|
|
|
|
file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES breakpad/src/client/linux/*.cc breakpad/src/common/linux/*.cc)
|
|
|
|
endif()
|
|
|
|
list(APPEND LIBBREAKPAD_CLIENT_SOURCES ${LIBBREAKPAD_COMMON_SOURCES})
|
|
|
|
list(FILTER LIBBREAKPAD_CLIENT_SOURCES EXCLUDE REGEX "/sender|/tests|/unittests|/testcases|_unittest|_test")
|
|
|
|
target_sources(libbreakpad_client PRIVATE ${LIBBREAKPAD_CLIENT_SOURCES})
|
|
|
|
target_include_directories(libbreakpad_client PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/breakpad/src)
|
|
|
|
|
|
|
|
if (WIN32)
|
|
|
|
target_link_libraries(libbreakpad_client PRIVATE wininet.lib)
|
|
|
|
elseif (APPLE)
|
|
|
|
find_library(CoreFoundation_FRAMEWORK CoreFoundation)
|
|
|
|
target_link_libraries(libbreakpad_client PRIVATE ${CoreFoundation_FRAMEWORK})
|
|
|
|
else()
|
|
|
|
find_library(PTHREAD_LIBRARIES pthread)
|
|
|
|
target_compile_definitions(libbreakpad_client PRIVATE HAVE_GETCONTEXT=1)
|
|
|
|
if (PTHREAD_LIBRARIES)
|
|
|
|
target_link_libraries(libbreakpad_client PRIVATE ${PTHREAD_LIBRARIES})
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# Host tools for symbol processing
|
|
|
|
if (LINUX)
|
|
|
|
find_package(ZLIB REQUIRED)
|
|
|
|
|
|
|
|
add_executable(minidump_stackwalk breakpad/src/processor/minidump_stackwalk.cc)
|
|
|
|
target_link_libraries(minidump_stackwalk PRIVATE libbreakpad libbreakpad_client)
|
|
|
|
|
|
|
|
add_executable(dump_syms
|
|
|
|
breakpad/src/common/dwarf_cfi_to_module.cc
|
|
|
|
breakpad/src/common/dwarf_cu_to_module.cc
|
|
|
|
breakpad/src/common/dwarf_line_to_module.cc
|
|
|
|
breakpad/src/common/dwarf_range_list_handler.cc
|
|
|
|
breakpad/src/common/language.cc
|
|
|
|
breakpad/src/common/module.cc
|
|
|
|
breakpad/src/common/path_helper.cc
|
|
|
|
breakpad/src/common/stabs_reader.cc
|
|
|
|
breakpad/src/common/stabs_to_module.cc
|
|
|
|
breakpad/src/common/dwarf/bytereader.cc
|
|
|
|
breakpad/src/common/dwarf/dwarf2diehandler.cc
|
|
|
|
breakpad/src/common/dwarf/dwarf2reader.cc
|
|
|
|
breakpad/src/common/dwarf/elf_reader.cc
|
|
|
|
breakpad/src/common/linux/crc32.cc
|
|
|
|
breakpad/src/common/linux/dump_symbols.cc
|
|
|
|
breakpad/src/common/linux/elf_symbols_to_module.cc
|
|
|
|
breakpad/src/common/linux/elfutils.cc
|
|
|
|
breakpad/src/common/linux/file_id.cc
|
|
|
|
breakpad/src/common/linux/linux_libc_support.cc
|
|
|
|
breakpad/src/common/linux/memory_mapped_file.cc
|
|
|
|
breakpad/src/common/linux/safe_readlink.cc
|
|
|
|
breakpad/src/tools/linux/dump_syms/dump_syms.cc)
|
|
|
|
target_link_libraries(dump_syms PRIVATE libbreakpad_client ZLIB::ZLIB)
|
|
|
|
endif()
|
|
|
|
endif()
|
2023-11-12 07:03:01 +00:00
|
|
|
|
|
|
|
# SimpleIni
|
2023-11-02 17:53:40 +00:00
|
|
|
if (NOT TARGET SimpleIni::SimpleIni)
|
|
|
|
add_subdirectory(simpleini)
|
|
|
|
endif()
|
2024-03-08 22:44:03 +00:00
|
|
|
|
|
|
|
# sse2neon
|
|
|
|
if (ARCHITECTURE_arm64 AND NOT TARGET sse2neon)
|
|
|
|
add_library(sse2neon INTERFACE)
|
|
|
|
target_include_directories(sse2neon INTERFACE sse2neon)
|
|
|
|
endif()
|
2024-04-07 01:13:26 +00:00
|
|
|
|
|
|
|
# metal-cpp
|
|
|
|
if (APPLE)
|
|
|
|
add_library(metal-cpp INTERFACE)
|
|
|
|
target_include_directories(metal-cpp INTERFACE metal-cpp)
|
|
|
|
endif()
|