aboutsummaryrefslogtreecommitdiff
path: root/externals/CMakeLists.txt
blob: 653c64f476ff05847fa5afe5b650dd5411ed851d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# Definitions for all external bundled libraries

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules)
include(DownloadExternals)

# pkgconfig -- it is used to find shared libraries without cmake modules on linux systems
find_package(PkgConfig)
if (NOT PkgConfig_FOUND)
    function(pkg_check_modules)
        # STUB
    endfunction()
endif()

# Catch
add_library(catch-single-include INTERFACE)
target_include_directories(catch-single-include INTERFACE catch/single_include)

# libfmt
pkg_check_modules(FMT IMPORTED_TARGET GLOBAL fmt>=6.2.0)
if (FMT_FOUND)
    add_library(fmt::fmt ALIAS PkgConfig::FMT)
else()
    message(STATUS "fmt 6.2.0 or newer not found, falling back to externals")
    add_subdirectory(fmt)
    add_library(fmt::fmt ALIAS fmt)
endif()

# Dynarmic
if (ARCHITECTURE_x86_64)
    set(DYNARMIC_TESTS OFF)
    set(DYNARMIC_NO_BUNDLED_FMT ON)
    add_subdirectory(dynarmic)
endif()

# getopt
if (MSVC)
    add_subdirectory(getopt)
endif()

# Glad
add_subdirectory(glad)

# inih
add_subdirectory(inih)

# lz4
pkg_check_modules(LIBLZ4 IMPORTED_TARGET GLOBAL liblz4>=1.8.0)
if (LIBLZ4_FOUND)
    add_library(lz4_static ALIAS PkgConfig::LIBLZ4)
else()
    message(STATUS "liblz4 1.8.0 or newer not found, falling back to externals")
    set(LZ4_BUNDLED_MODE ON)
    add_subdirectory(lz4/contrib/cmake_unofficial EXCLUDE_FROM_ALL)
    target_include_directories(lz4_static INTERFACE ./lz4/lib)
endif()

# mbedtls
add_subdirectory(mbedtls EXCLUDE_FROM_ALL)
target_include_directories(mbedtls PUBLIC ./mbedtls/include)

# MicroProfile
add_library(microprofile INTERFACE)
target_include_directories(microprofile INTERFACE ./microprofile)

# Unicorn
add_library(unicorn-headers INTERFACE)
target_include_directories(unicorn-headers INTERFACE ./unicorn/include)

# Zstandard
pkg_check_modules(LIBZSTD IMPORTED_TARGET GLOBAL libzstd>=1.3.8)
if (LIBZSTD_FOUND)
    add_library(libzstd_static ALIAS PkgConfig::LIBZSTD)
else()
    message(STATUS "libzstd 1.3.8 or newer not found, falling back to externals")
    add_subdirectory(zstd/build/cmake EXCLUDE_FROM_ALL)
    target_include_directories(libzstd_static INTERFACE ./zstd/lib)
endif()

# SoundTouch
add_subdirectory(soundtouch)

# Opus
pkg_check_modules(OPUS IMPORTED_TARGET GLOBAL opus>=1.3.1)
if (OPUS_FOUND)
    add_library(opus ALIAS PkgConfig::OPUS)
else()
    message(STATUS "opus 1.3.1 or newer not found, falling back to externals")
    add_subdirectory(opus)
    target_include_directories(opus INTERFACE ./opus/include)
endif()

# Cubeb
if(ENABLE_CUBEB)
    set(BUILD_TESTS OFF CACHE BOOL "")
    add_subdirectory(cubeb EXCLUDE_FROM_ALL)
endif()

# DiscordRPC
if (USE_DISCORD_PRESENCE)
    add_subdirectory(discord-rpc EXCLUDE_FROM_ALL)
    target_include_directories(discord-rpc INTERFACE ./discord-rpc/include)
endif()

# Sirit
if (ENABLE_VULKAN)
    add_subdirectory(sirit)
endif()

# zlib
find_package(ZLIB 1.2.11)
if (NOT ZLIB_FOUND)
    message(STATUS "zlib 1.2.11 or newer not found, falling back to externals")
    add_subdirectory(zlib EXCLUDE_FROM_ALL)
    set(ZLIB_LIBRARIES z)
endif()

# libzip
pkg_check_modules(LIBZIP IMPORTED_TARGET GLOBAL libzip>=1.5.3)
if (LIBZIP_FOUND)
    add_library(zip ALIAS PkgConfig::LIBZIP)
else()
    message(STATUS "libzip 1.5.3 or newer not found, falling back to externals")
    add_subdirectory(libzip EXCLUDE_FROM_ALL)
endif()

if (ENABLE_WEB_SERVICE)
    # LibreSSL
    find_package(OpenSSL COMPONENTS Crypto SSL)
    if (NOT OpenSSL_FOUND)
        message(STATUS "OpenSSL not found, falling back to externals")
        set(LIBRESSL_SKIP_INSTALL ON CACHE BOOL "")
        add_subdirectory(libressl EXCLUDE_FROM_ALL)
        target_include_directories(ssl INTERFACE ./libressl/include)
        target_compile_definitions(ssl PRIVATE -DHAVE_INET_NTOP)
        get_directory_property(OPENSSL_LIBRARIES
            DIRECTORY libressl
            DEFINITION OPENSSL_LIBS)
    endif()

    # lurlparser
    add_subdirectory(lurlparser EXCLUDE_FROM_ALL)

    # httplib
    add_library(httplib INTERFACE)
    target_include_directories(httplib INTERFACE ./httplib)
    target_compile_definitions(httplib INTERFACE -DCPPHTTPLIB_OPENSSL_SUPPORT)
    target_link_libraries(httplib INTERFACE ${OPENSSL_LIBRARIES})

    # JSON
    add_library(json-headers INTERFACE)
    target_include_directories(json-headers INTERFACE ./json)
endif()