CMakeLists.txt 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. # Definitions for all external bundled libraries
  2. set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules)
  3. include(DownloadExternals)
  4. # pkgconfig -- it is used to find shared libraries without cmake modules on linux systems
  5. find_package(PkgConfig)
  6. if (NOT PkgConfig_FOUND)
  7. function(pkg_check_modules)
  8. # STUB
  9. endfunction()
  10. endif()
  11. # Catch
  12. add_library(catch-single-include INTERFACE)
  13. target_include_directories(catch-single-include INTERFACE catch/single_include)
  14. # libfmt
  15. pkg_check_modules(FMT IMPORTED_TARGET GLOBAL fmt>=6.1.0)
  16. if (FMT_FOUND)
  17. add_library(fmt::fmt ALIAS PkgConfig::FMT)
  18. else()
  19. message(STATUS "fmt 6.1.0 or newer not found, falling back to externals")
  20. add_subdirectory(fmt)
  21. add_library(fmt::fmt ALIAS fmt)
  22. endif()
  23. # Dynarmic
  24. if (ARCHITECTURE_x86_64)
  25. set(DYNARMIC_TESTS OFF)
  26. set(DYNARMIC_NO_BUNDLED_FMT ON)
  27. add_subdirectory(dynarmic)
  28. endif()
  29. # getopt
  30. if (MSVC)
  31. add_subdirectory(getopt)
  32. endif()
  33. # Glad
  34. add_subdirectory(glad)
  35. # inih
  36. add_subdirectory(inih)
  37. # lz4
  38. pkg_check_modules(LIBLZ4 IMPORTED_TARGET GLOBAL liblz4>=1.8.0)
  39. if (LIBLZ4_FOUND)
  40. add_library(lz4_static ALIAS PkgConfig::LIBLZ4)
  41. else()
  42. message(STATUS "liblz4 1.8.0 or newer not found, falling back to externals")
  43. set(LZ4_BUNDLED_MODE ON)
  44. add_subdirectory(lz4/contrib/cmake_unofficial EXCLUDE_FROM_ALL)
  45. target_include_directories(lz4_static INTERFACE ./lz4/lib)
  46. endif()
  47. # mbedtls
  48. add_subdirectory(mbedtls EXCLUDE_FROM_ALL)
  49. target_include_directories(mbedtls PUBLIC ./mbedtls/include)
  50. # MicroProfile
  51. add_library(microprofile INTERFACE)
  52. target_include_directories(microprofile INTERFACE ./microprofile)
  53. # Unicorn
  54. add_library(unicorn-headers INTERFACE)
  55. target_include_directories(unicorn-headers INTERFACE ./unicorn/include)
  56. # Zstandard
  57. pkg_check_modules(LIBZSTD IMPORTED_TARGET GLOBAL libzstd>=1.3.8)
  58. if (LIBZSTD_FOUND)
  59. add_library(libzstd_static ALIAS PkgConfig::LIBZSTD)
  60. else()
  61. message(STATUS "libzstd 1.3.8 or newer not found, falling back to externals")
  62. add_subdirectory(zstd/build/cmake EXCLUDE_FROM_ALL)
  63. target_include_directories(libzstd_static INTERFACE ./zstd/lib)
  64. endif()
  65. # SoundTouch
  66. add_subdirectory(soundtouch)
  67. # Opus
  68. pkg_check_modules(OPUS IMPORTED_TARGET GLOBAL opus>=1.3.1)
  69. if (OPUS_FOUND)
  70. add_library(opus ALIAS PkgConfig::OPUS)
  71. else()
  72. message(STATUS "opus 1.3.1 or newer not found, falling back to externals")
  73. add_subdirectory(opus)
  74. target_include_directories(opus INTERFACE ./opus/include)
  75. endif()
  76. # Cubeb
  77. if(ENABLE_CUBEB)
  78. set(BUILD_TESTS OFF CACHE BOOL "")
  79. add_subdirectory(cubeb EXCLUDE_FROM_ALL)
  80. endif()
  81. # DiscordRPC
  82. if (USE_DISCORD_PRESENCE)
  83. add_subdirectory(discord-rpc EXCLUDE_FROM_ALL)
  84. target_include_directories(discord-rpc INTERFACE ./discord-rpc/include)
  85. endif()
  86. # Sirit
  87. if (ENABLE_VULKAN)
  88. add_subdirectory(sirit)
  89. endif()
  90. # zlib
  91. find_package(ZLIB 1.2.11)
  92. if (NOT ZLIB_FOUND)
  93. message(STATUS "zlib 1.2.11 or newer not found, falling back to externals")
  94. add_subdirectory(zlib EXCLUDE_FROM_ALL)
  95. set(ZLIB_LIBRARIES z)
  96. endif()
  97. # libzip
  98. pkg_check_modules(LIBZIP IMPORTED_TARGET GLOBAL libzip>=1.5.3)
  99. if (LIBZIP_FOUND)
  100. add_library(zip ALIAS PkgConfig::LIBZIP)
  101. else()
  102. message(STATUS "libzip 1.5.3 or newer not found, falling back to externals")
  103. add_subdirectory(libzip EXCLUDE_FROM_ALL)
  104. endif()
  105. if (ENABLE_WEB_SERVICE)
  106. # LibreSSL
  107. find_package(OpenSSL COMPONENTS Crypto SSL)
  108. if (NOT OpenSSL_FOUND)
  109. message(STATUS "OpenSSL not found, falling back to externals")
  110. set(LIBRESSL_SKIP_INSTALL ON CACHE BOOL "")
  111. add_subdirectory(libressl EXCLUDE_FROM_ALL)
  112. target_include_directories(ssl INTERFACE ./libressl/include)
  113. target_compile_definitions(ssl PRIVATE -DHAVE_INET_NTOP)
  114. get_directory_property(OPENSSL_LIBRARIES
  115. DIRECTORY libressl
  116. DEFINITION OPENSSL_LIBS)
  117. endif()
  118. # lurlparser
  119. add_subdirectory(lurlparser EXCLUDE_FROM_ALL)
  120. # httplib
  121. add_library(httplib INTERFACE)
  122. target_include_directories(httplib INTERFACE ./httplib)
  123. target_compile_definitions(httplib INTERFACE -DCPPHTTPLIB_OPENSSL_SUPPORT)
  124. target_link_libraries(httplib INTERFACE ${OPENSSL_LIBRARIES})
  125. # JSON
  126. add_library(json-headers INTERFACE)
  127. target_include_directories(json-headers INTERFACE ./json)
  128. endif()