From: John Zimmermann --- a/cmake/external/crash_reports/CMakeLists.txt +++ b/cmake/external/crash_reports/CMakeLists.txt @@ -7,6 +7,7 @@ add_library(external_crash_reports INTERFACE IMPORTED GLOBAL) add_library(desktop-app::external_crash_reports ALIAS external_crash_reports) +if(NOT DESKTOP_APP_DISABLE_CRASH_REPORTS) if (WIN32 OR LINUX OR build_macstore) add_subdirectory(breakpad) target_link_libraries(external_crash_reports @@ -20,3 +21,4 @@ desktop-app::external_crashpad ) endif() +endif() --- a/cmake/external/ffmpeg/CMakeLists.txt +++ b/cmake/external/ffmpeg/CMakeLists.txt @@ -7,6 +7,18 @@ add_library(external_ffmpeg INTERFACE IMPORTED GLOBAL) add_library(desktop-app::external_ffmpeg ALIAS external_ffmpeg) +if(DESKTOP_APP_USE_SYSTEM_LIBS) + find_package(PkgConfig REQUIRED) + pkg_check_modules(FFMPEG REQUIRED libavcodec libavformat libavutil libswresample libswscale) + target_link_libraries(external_ffmpeg + INTERFACE + ${FFMPEG_LIBRARIES} + ) + target_include_directories(external_ffmpeg SYSTEM + INTERFACE + ${FFMPEG_INCLUDE_DIRS} + ) +else() target_include_directories(external_ffmpeg SYSTEM INTERFACE ${libs_loc}/ffmpeg @@ -36,3 +48,4 @@ Xrender ) endif() +endif() --- a/cmake/external/openal/CMakeLists.txt +++ b/cmake/external/openal/CMakeLists.txt @@ -7,6 +7,21 @@ add_library(external_openal INTERFACE IMPORTED GLOBAL) add_library(desktop-app::external_openal ALIAS external_openal) +if(DESKTOP_APP_USE_SYSTEM_LIBS) + find_package(OpenAL REQUIRED) + target_include_directories(external_openal SYSTEM + INTERFACE + ${OPENAL_INCLUDE_DIR} + ) + target_link_libraries(external_openal + INTERFACE + ${OPENAL_LIBRARY} + ) + target_compile_definitions(external_openal + INTERFACE + AL_ALEXT_PROTOTYPES + ) +else() if (WIN32) target_include_directories(external_openal SYSTEM INTERFACE @@ -41,3 +56,4 @@ AL_LIBTYPE_STATIC AL_ALEXT_PROTOTYPES ) +endif() --- a/cmake/external/openssl/CMakeLists.txt +++ b/cmake/external/openssl/CMakeLists.txt @@ -7,7 +7,13 @@ add_library(external_openssl INTERFACE IMPORTED GLOBAL) add_library(desktop-app::external_openssl ALIAS external_openssl) -if (LINUX) +if(DESKTOP_APP_USE_SYSTEM_LIBS) + find_package(OpenSSL REQUIRED) + target_include_directories(external_openssl SYSTEM + INTERFACE + ${OPENSSL_INCLUDE_DIR} + ) +elseif (LINUX) target_include_directories(external_openssl SYSTEM INTERFACE /usr/local/desktop-app/openssl-1.1.1/include @@ -24,6 +30,13 @@ ) endif() +if(DESKTOP_APP_USE_SYSTEM_LIBS) + target_link_libraries(external_openssl + INTERFACE + OpenSSL::Crypto + OpenSSL::SSL + ) +else() if (WIN32) set(openssl_lib_ext lib) set(openssl_lib_loc ${libs_loc}/openssl_1_1_1/out32$<$:.dbg>) @@ -45,6 +58,7 @@ ${openssl_lib_loc}/libssl.${openssl_lib_ext} ${openssl_lib_loc}/libcrypto.${openssl_lib_ext} ) +endif() if (LINUX) if (DESKTOP_APP_USE_GLIBC_WRAPS) --- a/cmake/external/opus/CMakeLists.txt +++ b/cmake/external/opus/CMakeLists.txt @@ -7,6 +7,18 @@ add_library(external_opus INTERFACE IMPORTED GLOBAL) add_library(desktop-app::external_opus ALIAS external_opus) +if(DESKTOP_APP_USE_SYSTEM_LIBS) + find_package(PkgConfig REQUIRED) + pkg_check_modules(OPUS REQUIRED opus) + target_include_directories(external_opus SYSTEM + INTERFACE + ${OPUS_INCLUDE_DIRS} + ) + target_link_libraries(external_opus + INTERFACE + ${OPUS_LIBRARIES} + ) +else() target_include_directories(external_opus SYSTEM INTERFACE ${libs_loc}/opus/include @@ -43,3 +55,4 @@ opus ) endif() +endif() --- a/cmake/external/qt/CMakeLists.txt +++ b/cmake/external/qt/CMakeLists.txt @@ -15,6 +15,36 @@ endif() endif() +if(DESKTOP_APP_USE_SYSTEM_LIBS) + get_target_property(QTCORE_INCLUDE_DIRS Qt5::Core INTERFACE_INCLUDE_DIRECTORIES) + list(GET QTCORE_INCLUDE_DIRS 0 QT_INCLUDE_DIR) + + foreach(__qt_module IN ITEMS QtCore QtGui) + list(APPEND QT_PRIVATE_INCLUDE_DIRS + ${QT_INCLUDE_DIR}/${__qt_module}/${Qt5_VERSION} + ${QT_INCLUDE_DIR}/${__qt_module}/${Qt5_VERSION}/${__qt_module} + ) + endforeach() + message(STATUS "Using Qt private include directories: ${QT_PRIVATE_INCLUDE_DIRS}") + target_include_directories(external_qt SYSTEM + INTERFACE + ${QT_PRIVATE_INCLUDE_DIRS} + ) + target_link_libraries(external_qt + INTERFACE + Qt5::DBus + Qt5::Network + Qt5::Widgets + desktop-app::external_zlib + xcb + X11 + X11-xcb + dbus-1 + dl + glib-2.0 + pthread + ) +else() target_include_directories(external_qt SYSTEM INTERFACE ${qt_loc}/include @@ -215,3 +245,4 @@ pthread ) endif() +endif() --- a/cmake/external/qt/package.cmake +++ b/cmake/external/qt/package.cmake @@ -4,6 +4,9 @@ # For license and copyright information please follow this link: # https://github.com/desktop-app/legal/blob/master/LEGAL +if(DESKTOP_APP_USE_SYSTEM_LIBS) + +else() if (NOT APPLE OR NOT build_osx) set(qt_version 5.12.5) else() @@ -17,6 +20,7 @@ endif() set(Qt5_DIR ${qt_loc}/lib/cmake/Qt5) +endif() find_package(Qt5 COMPONENTS Core Gui Widgets Network REQUIRED) --- a/cmake/external/zlib/CMakeLists.txt +++ b/cmake/external/zlib/CMakeLists.txt @@ -7,6 +7,18 @@ add_library(external_zlib INTERFACE IMPORTED GLOBAL) add_library(desktop-app::external_zlib ALIAS external_zlib) +if(DESKTOP_APP_USE_SYSTEM_LIBS) + find_package(ZLIB REQUIRED) + find_package(PkgConfig REQUIRED) + pkg_check_modules(MINIZIP REQUIRED minizip) + find_library(minizip_LIBRARY minizip) + target_link_libraries(external_zlib INTERFACE ZLIB::ZLIB ${minizip_LIBRARY}) + target_include_directories(external_zlib SYSTEM + INTERFACE + ${ZLIB_INCLUDE_DIR} + ${MINIZIP_INCLUDE_DIRS} + ) +else() if (NOT WIN32) add_library(external_minizip STATIC) init_target(external_minizip "(external)") @@ -49,3 +61,4 @@ else() target_link_static_libraries(external_zlib INTERFACE z) endif() +endif() --- a/cmake/init_target.cmake +++ b/cmake/init_target.cmake @@ -27,7 +27,7 @@ endif() target_link_libraries(${target_name} PUBLIC desktop-app::common_options) set_target_properties(${target_name} PROPERTIES - LINK_SEARCH_START_STATIC 1 + LINK_SEARCH_START_STATIC 0 XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_WEAK YES XCODE_ATTRIBUTE_GCC_INLINES_ARE_PRIVATE_EXTERN YES XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN YES --- a/cmake/options_linux.cmake +++ b/cmake/options_linux.cmake @@ -25,6 +25,9 @@ -Wno-stringop-overflow -Wno-maybe-uninitialized -Wno-error=class-memaccess + -Wno-error=deprecated-copy + -Wno-error=deprecated-declarations + -Wno-error=redundant-move ) target_link_options(common_options INTERFACE @@ -33,8 +36,5 @@ if (build_linux32) target_compile_options(common_options INTERFACE -g0) target_link_options(common_options INTERFACE -g0) -else() - target_compile_options(common_options INTERFACE $,,-g -flto>) - target_link_options(common_options INTERFACE $,,-g -flto -fuse-linker-plugin>) endif() --- a/cmake/variables.cmake +++ b/cmake/variables.cmake @@ -10,6 +10,7 @@ option(DESKTOP_APP_LOTTIE_USE_CACHE "Use caching in lottie animations." ON) option(DESKTOP_APP_USE_GLIBC_WRAPS "Use wraps for new GLIBC features." OFF) option(DESKTOP_APP_USE_PACKAGED "Find libraries using CMake instead of exact paths." ON) +option(DESKTOP_APP_USE_SYSTEM_LIBS "Use system libs where possible." OFF) function(report_bad_special_target) message(FATAL_ERROR "Bad special target '${DESKTOP_APP_SPECIAL_TARGET}'") @@ -59,8 +60,7 @@ set(DESKTOP_APP_USE_GLIBC_WRAPS OFF) else() set(LINUX 1) - execute_process(COMMAND uname -m OUTPUT_VARIABLE machine_uname) - if (NOT ${machine_uname} MATCHES "x86_64" AND NOT ${machine_uname} MATCHES "aarch64") + if (CMAKE_SIZEOF_VOID_P EQUAL 4) set(build_linux32 1) endif() if (DESKTOP_APP_SPECIAL_TARGET STREQUAL "linux") --- a/cmake/external/lz4/CMakeLists.txt +++ b/cmake/external/lz4/CMakeLists.txt @@ -4,8 +4,18 @@ # For license and copyright information please follow this link: # https://github.com/desktop-app/legal/blob/master/LEGAL +if(DESKTOP_APP_USE_SYSTEM_LIBS) + add_library(external_lz4 INTERFACE IMPORTED GLOBAL) + add_library(desktop-app::external_lz4 ALIAS external_lz4) + + find_package(PkgConfig REQUIRED) + pkg_check_modules(LZ4 REQUIRED liblz4) + target_link_libraries(external_lz4 INTERFACE ${LZ4_LIBRARIES}) + target_include_directories(external_lz4 SYSTEM INTERFACE ${LZ4_INCLUDE_DIRS}) +else() add_library(external_lz4 OBJECT) add_library(desktop-app::external_lz4 ALIAS external_lz4) + init_target(external_lz4 "(external)") set(lz4_loc ${third_party_loc}/lz4/lib) @@ -27,3 +37,4 @@ PUBLIC ${lz4_loc} ) +endif() --- a/cmake/external/xxhash/CMakeLists.txt +++ b/cmake/external/xxhash/CMakeLists.txt @@ -7,6 +7,10 @@ add_library(external_xxhash INTERFACE IMPORTED GLOBAL) add_library(desktop-app::external_xxhash ALIAS external_xxhash) +if(DESKTOP_APP_USE_SYSTEM_LIBS) + find_library(xxhash_LIBRARIES xxhash) + target_link_libraries(external_xxhash INTERFACE ${xxhash_LIBRARIES}) +else() target_include_directories(external_xxhash SYSTEM INTERFACE ${third_party_loc}/xxHash @@ -16,3 +20,4 @@ INTERFACE XXH_INLINE_ALL ) +endif()