From 95c83fd26424c26d4fc4454cef601529616683aa Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Thu, 14 Mar 2024 08:35:55 +0400 Subject: [PATCH 01/18] Update cppgir --- external/glib/cppgir | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/glib/cppgir b/external/glib/cppgir index 83d9474..9c4f582 160000 --- a/external/glib/cppgir +++ b/external/glib/cppgir @@ -1 +1 @@ -Subproject commit 83d94749d94fdb9b9e97a3e942f73a587a6ef253 +Subproject commit 9c4f5820d94d62ab451501f016bfea97156518f4 From 161b986c32e0da76aa2d3ae16d316ab55cad9bcc Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 25 Mar 2024 13:24:50 +0400 Subject: [PATCH 02/18] Upgrade OpenSSL to 3.2.1. --- external/openssl/CMakeLists.txt | 6 +++--- external/openssl/openssl_common/CMakeLists.txt | 10 ++++++++-- options_win.cmake | 1 + 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/external/openssl/CMakeLists.txt b/external/openssl/CMakeLists.txt index 0e0b9d9..c41e56e 100644 --- a/external/openssl/CMakeLists.txt +++ b/external/openssl/CMakeLists.txt @@ -9,13 +9,13 @@ add_library(desktop-app::external_openssl ALIAS external_openssl) if (WIN32) set(openssl_lib_ext lib) - set(openssl_lib_loc ${libs_loc}/openssl/out) + set(openssl_lib_loc ${libs_loc}/openssl3/out) else() set(openssl_lib_ext a) if (APPLE) - set(openssl_lib_loc ${libs_loc}/openssl) + set(openssl_lib_loc ${libs_loc}/openssl3) else() - set(openssl_lib_loc /usr/local/desktop-app/openssl-1.1.1/lib) + set(openssl_lib_loc /usr/local/desktop-app/openssl-3.2.1/lib64) endif() endif() diff --git a/external/openssl/openssl_common/CMakeLists.txt b/external/openssl/openssl_common/CMakeLists.txt index 07548fa..8524222 100644 --- a/external/openssl/openssl_common/CMakeLists.txt +++ b/external/openssl/openssl_common/CMakeLists.txt @@ -11,12 +11,18 @@ if (NOT DESKTOP_APP_USE_PACKAGED) if (LINUX) target_include_directories(external_openssl_common SYSTEM INTERFACE - /usr/local/desktop-app/openssl-1.1.1/include + /usr/local/desktop-app/openssl-3.2.1/include ) else() target_include_directories(external_openssl_common SYSTEM INTERFACE - ${libs_loc}/openssl/include + ${libs_loc}/openssl3/include ) endif() + + # OpenSSL 3 deprecated AES_set_encrypt_key/decrypt_key/ige_encrypt/cbc_encrypt + target_compile_options_if_exists(external_openssl_common + INTERFACE + -Wno-deprecated-declarations + ) endif() diff --git a/options_win.cmake b/options_win.cmake index 9abba03..814d534 100644 --- a/options_win.cmake +++ b/options_win.cmake @@ -145,6 +145,7 @@ INTERFACE Wtsapi32 Crypt32 Propsys + Bcrypt ) if (build_winstore) From 3bd66f2c07f0e23ce58fa19561492994dc738aa5 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Mon, 25 Mar 2024 21:14:51 +0400 Subject: [PATCH 03/18] Don't add /usr/local/include to include directories It's searched by default --- external/openal/CMakeLists.txt | 1 - external/rnnoise/CMakeLists.txt | 4 ---- external/vpx/CMakeLists.txt | 4 ---- 3 files changed, 9 deletions(-) diff --git a/external/openal/CMakeLists.txt b/external/openal/CMakeLists.txt index 6a0450e..398f189 100644 --- a/external/openal/CMakeLists.txt +++ b/external/openal/CMakeLists.txt @@ -41,7 +41,6 @@ elseif (APPLE) else() target_include_directories(external_openal SYSTEM INTERFACE - /usr/local/include /usr/local/include/AL ) target_link_static_libraries(external_openal diff --git a/external/rnnoise/CMakeLists.txt b/external/rnnoise/CMakeLists.txt index 31f2d3a..b77fedd 100644 --- a/external/rnnoise/CMakeLists.txt +++ b/external/rnnoise/CMakeLists.txt @@ -38,10 +38,6 @@ elseif (APPLE) IMPORTED_LOCATION_DEBUG "${rnnoise_lib_loc}/Debug/librnnoise.a" ) else() - target_include_directories(external_rnnoise SYSTEM - INTERFACE - /usr/local/include - ) find_library(DESKTOP_APP_RNNOISE_LIBRARIES librnnoise.a REQUIRED) set_target_properties(external_rnnoise PROPERTIES IMPORTED_LOCATION "${DESKTOP_APP_RNNOISE_LIBRARIES}" diff --git a/external/vpx/CMakeLists.txt b/external/vpx/CMakeLists.txt index 39c58b0..8840ef7 100644 --- a/external/vpx/CMakeLists.txt +++ b/external/vpx/CMakeLists.txt @@ -42,10 +42,6 @@ elseif (APPLE) IMPORTED_LOCATION ${libs_loc}/local/lib/libvpx.a ) else() - target_include_directories(external_vpx SYSTEM - INTERFACE - /usr/local/include - ) find_library(DESKTOP_APP_VPX_LIBRARIES libvpx.a REQUIRED) set_target_properties(external_vpx PROPERTIES IMPORTED_LOCATION "${DESKTOP_APP_VPX_LIBRARIES}" From 7b8ac67b0fde804964bc591afab4b0395d485e5d Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Mon, 25 Mar 2024 21:16:03 +0400 Subject: [PATCH 04/18] Move OpenSSL to system directories on Linux Just like done with all other libraries --- external/openssl/CMakeLists.txt | 10 ++-------- external/openssl/openssl_common/CMakeLists.txt | 7 +------ external/openssl/openssl_crypto/CMakeLists.txt | 16 +++++++++++----- external/openssl/openssl_ssl/CMakeLists.txt | 16 +++++++++++----- 4 files changed, 25 insertions(+), 24 deletions(-) diff --git a/external/openssl/CMakeLists.txt b/external/openssl/CMakeLists.txt index c41e56e..31ea2b3 100644 --- a/external/openssl/CMakeLists.txt +++ b/external/openssl/CMakeLists.txt @@ -8,15 +8,9 @@ add_library(external_openssl INTERFACE IMPORTED GLOBAL) add_library(desktop-app::external_openssl ALIAS external_openssl) if (WIN32) - set(openssl_lib_ext lib) set(openssl_lib_loc ${libs_loc}/openssl3/out) -else() - set(openssl_lib_ext a) - if (APPLE) - set(openssl_lib_loc ${libs_loc}/openssl3) - else() - set(openssl_lib_loc /usr/local/desktop-app/openssl-3.2.1/lib64) - endif() +elseif (APPLE) + set(openssl_lib_loc ${libs_loc}/openssl3) endif() add_subdirectory(openssl_common) diff --git a/external/openssl/openssl_common/CMakeLists.txt b/external/openssl/openssl_common/CMakeLists.txt index 8524222..48e7e1c 100644 --- a/external/openssl/openssl_common/CMakeLists.txt +++ b/external/openssl/openssl_common/CMakeLists.txt @@ -8,12 +8,7 @@ add_library(external_openssl_common INTERFACE IMPORTED GLOBAL) add_library(desktop-app::external_openssl_common ALIAS external_openssl_common) if (NOT DESKTOP_APP_USE_PACKAGED) - if (LINUX) - target_include_directories(external_openssl_common SYSTEM - INTERFACE - /usr/local/desktop-app/openssl-3.2.1/include - ) - else() + if (NOT LINUX) target_include_directories(external_openssl_common SYSTEM INTERFACE ${libs_loc}/openssl3/include diff --git a/external/openssl/openssl_crypto/CMakeLists.txt b/external/openssl/openssl_crypto/CMakeLists.txt index 8ffc591..8c1a035 100644 --- a/external/openssl/openssl_crypto/CMakeLists.txt +++ b/external/openssl/openssl_crypto/CMakeLists.txt @@ -16,13 +16,19 @@ endif() add_library(external_openssl_crypto STATIC IMPORTED GLOBAL) add_library(desktop-app::external_openssl_crypto ALIAS external_openssl_crypto) -set_target_properties(external_openssl_crypto PROPERTIES - IMPORTED_LOCATION "${openssl_lib_loc}/libcrypto.${openssl_lib_ext}" -) - if (WIN32) set_target_properties(external_openssl_crypto PROPERTIES - IMPORTED_LOCATION_DEBUG "${openssl_lib_loc}.dbg/libcrypto.${openssl_lib_ext}" + IMPORTED_LOCATION "${openssl_lib_loc}/libcrypto.${CMAKE_STATIC_LIBRARY_SUFFIX}" + IMPORTED_LOCATION_DEBUG "${openssl_lib_loc}.dbg/libcrypto.${CMAKE_STATIC_LIBRARY_SUFFIX}" + ) +elseif (APPLE) + set_target_properties(external_openssl_crypto PROPERTIES + IMPORTED_LOCATION "${openssl_lib_loc}/libcrypto.${CMAKE_STATIC_LIBRARY_SUFFIX}" + ) +else() + find_library(DESKTOP_APP_CRYPTO_LIBRARIES libcrypto.a REQUIRED) + set_target_properties(external_openssl_crypto PROPERTIES + IMPORTED_LOCATION "${DESKTOP_APP_CRYPTO_LIBRARIES}" ) endif() diff --git a/external/openssl/openssl_ssl/CMakeLists.txt b/external/openssl/openssl_ssl/CMakeLists.txt index 4200869..60d0bc2 100644 --- a/external/openssl/openssl_ssl/CMakeLists.txt +++ b/external/openssl/openssl_ssl/CMakeLists.txt @@ -16,13 +16,19 @@ endif() add_library(external_openssl_ssl STATIC IMPORTED GLOBAL) add_library(desktop-app::external_openssl_ssl ALIAS external_openssl_ssl) -set_target_properties(external_openssl_ssl PROPERTIES - IMPORTED_LOCATION "${openssl_lib_loc}/libssl.${openssl_lib_ext}" -) - if (WIN32) set_target_properties(external_openssl_ssl PROPERTIES - IMPORTED_LOCATION_DEBUG "${openssl_lib_loc}.dbg/libssl.${openssl_lib_ext}" + IMPORTED_LOCATION "${openssl_lib_loc}/libssl.${CMAKE_STATIC_LIBRARY_SUFFIX}" + IMPORTED_LOCATION_DEBUG "${openssl_lib_loc}.dbg/libssl.${CMAKE_STATIC_LIBRARY_SUFFIX}" + ) +elseif (APPLE) + set_target_properties(external_openssl_ssl PROPERTIES + IMPORTED_LOCATION "${openssl_lib_loc}/libssl.${CMAKE_STATIC_LIBRARY_SUFFIX}" + ) +else() + find_library(DESKTOP_APP_SSL_LIBRARIES libssl.a REQUIRED) + set_target_properties(external_openssl_ssl PROPERTIES + IMPORTED_LOCATION "${DESKTOP_APP_SSL_LIBRARIES}" ) endif() From e4d3cc2c969a5a285c2f2e89ff759b9e32ca0db9 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Mon, 25 Mar 2024 21:18:31 +0400 Subject: [PATCH 05/18] Use default Qt prefix on Linux --- external/qt/package.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/qt/package.cmake b/external/qt/package.cmake index a4283f4..03f5732 100644 --- a/external/qt/package.cmake +++ b/external/qt/package.cmake @@ -18,7 +18,7 @@ if (NOT DESKTOP_APP_USE_PACKAGED) elseif (APPLE) set(qt_loc ${libs_loc}/local/Qt-${qt_version}) else() - set(qt_loc /usr/local/desktop-app/Qt-${qt_version}) + set(qt_loc /usr/local/Qt-${qt_version}) endif() set(CMAKE_PREFIX_PATH ${qt_loc} ${libs_loc}/local) From 199ce0e7c8b6e6ce939491ac7ee5973129e6e2eb Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Mon, 25 Mar 2024 23:28:18 +0400 Subject: [PATCH 06/18] CMAKE_STATIC_LIBRARY_SUFFIX already has the dot --- external/openssl/openssl_crypto/CMakeLists.txt | 6 +++--- external/openssl/openssl_ssl/CMakeLists.txt | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/external/openssl/openssl_crypto/CMakeLists.txt b/external/openssl/openssl_crypto/CMakeLists.txt index 8c1a035..b82c8e7 100644 --- a/external/openssl/openssl_crypto/CMakeLists.txt +++ b/external/openssl/openssl_crypto/CMakeLists.txt @@ -18,12 +18,12 @@ add_library(desktop-app::external_openssl_crypto ALIAS external_openssl_crypto) if (WIN32) set_target_properties(external_openssl_crypto PROPERTIES - IMPORTED_LOCATION "${openssl_lib_loc}/libcrypto.${CMAKE_STATIC_LIBRARY_SUFFIX}" - IMPORTED_LOCATION_DEBUG "${openssl_lib_loc}.dbg/libcrypto.${CMAKE_STATIC_LIBRARY_SUFFIX}" + IMPORTED_LOCATION "${openssl_lib_loc}/libcrypto${CMAKE_STATIC_LIBRARY_SUFFIX}" + IMPORTED_LOCATION_DEBUG "${openssl_lib_loc}.dbg/libcrypto${CMAKE_STATIC_LIBRARY_SUFFIX}" ) elseif (APPLE) set_target_properties(external_openssl_crypto PROPERTIES - IMPORTED_LOCATION "${openssl_lib_loc}/libcrypto.${CMAKE_STATIC_LIBRARY_SUFFIX}" + IMPORTED_LOCATION "${openssl_lib_loc}/libcrypto${CMAKE_STATIC_LIBRARY_SUFFIX}" ) else() find_library(DESKTOP_APP_CRYPTO_LIBRARIES libcrypto.a REQUIRED) diff --git a/external/openssl/openssl_ssl/CMakeLists.txt b/external/openssl/openssl_ssl/CMakeLists.txt index 60d0bc2..9111f92 100644 --- a/external/openssl/openssl_ssl/CMakeLists.txt +++ b/external/openssl/openssl_ssl/CMakeLists.txt @@ -18,12 +18,12 @@ add_library(desktop-app::external_openssl_ssl ALIAS external_openssl_ssl) if (WIN32) set_target_properties(external_openssl_ssl PROPERTIES - IMPORTED_LOCATION "${openssl_lib_loc}/libssl.${CMAKE_STATIC_LIBRARY_SUFFIX}" - IMPORTED_LOCATION_DEBUG "${openssl_lib_loc}.dbg/libssl.${CMAKE_STATIC_LIBRARY_SUFFIX}" + IMPORTED_LOCATION "${openssl_lib_loc}/libssl${CMAKE_STATIC_LIBRARY_SUFFIX}" + IMPORTED_LOCATION_DEBUG "${openssl_lib_loc}.dbg/libssl${CMAKE_STATIC_LIBRARY_SUFFIX}" ) elseif (APPLE) set_target_properties(external_openssl_ssl PROPERTIES - IMPORTED_LOCATION "${openssl_lib_loc}/libssl.${CMAKE_STATIC_LIBRARY_SUFFIX}" + IMPORTED_LOCATION "${openssl_lib_loc}/libssl${CMAKE_STATIC_LIBRARY_SUFFIX}" ) else() find_library(DESKTOP_APP_SSL_LIBRARIES libssl.a REQUIRED) From b875d0ae2bf457ec94aaddd08431753e14ec71ac Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 1 Apr 2024 16:03:21 +0400 Subject: [PATCH 07/18] Revert "Remove -static-libgcc to fix the system proxy." This reverts commit c82faf706fd10618ad5f97a7972fb09c56843271. I hope this fixes huge amount of crashes in recent versions. --- options_linux.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/options_linux.cmake b/options_linux.cmake index b037f67..5496622 100644 --- a/options_linux.cmake +++ b/options_linux.cmake @@ -52,6 +52,7 @@ if (NOT DESKTOP_APP_USE_PACKAGED) target_link_options(common_options INTERFACE -static-libstdc++ + -static-libgcc ) elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") target_link_static_libraries(common_options From 9f1b85aa9d51025ccefe63992d05c878bc267774 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Thu, 4 Apr 2024 16:06:38 +0400 Subject: [PATCH 08/18] Actually enable QOI support --- external/kimageformats/CMakeLists.txt | 1 + external/kimageformats/init.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/external/kimageformats/CMakeLists.txt b/external/kimageformats/CMakeLists.txt index f930d62..91aa00b 100644 --- a/external/kimageformats/CMakeLists.txt +++ b/external/kimageformats/CMakeLists.txt @@ -25,6 +25,7 @@ PRIVATE heif.cpp jxl.cpp qoi.cpp + scanlineconverter.cpp ) target_compile_definitions(external_kimageformats diff --git a/external/kimageformats/init.cpp b/external/kimageformats/init.cpp index 9713d57..b6a1859 100644 --- a/external/kimageformats/init.cpp +++ b/external/kimageformats/init.cpp @@ -10,3 +10,4 @@ https://github.com/desktop-app/legal/blob/master/LEGAL Q_IMPORT_PLUGIN(QAVIFPlugin) Q_IMPORT_PLUGIN(HEIFPlugin) Q_IMPORT_PLUGIN(QJpegXLPlugin) +Q_IMPORT_PLUGIN(QOIPlugin) From ad70bff65138ead1f34b10636f45114eecd76bf0 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Fri, 5 Apr 2024 01:49:57 +0400 Subject: [PATCH 09/18] Implement DESKTOP_APP_ASAN on Linux --- external/glib/generate_gir.cmake | 2 ++ options_linux.cmake | 13 +++++++++++++ variables.cmake | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/external/glib/generate_gir.cmake b/external/glib/generate_gir.cmake index 643d049..87f6aee 100644 --- a/external/glib/generate_gir.cmake +++ b/external/glib/generate_gir.cmake @@ -19,6 +19,8 @@ function(generate_gir target_name namespace deps src_target_name) BYPRODUCTS ${gen_file} COMMAND + env + $<$:LDFLAGS=-fsanitize=address> ${DESKTOP_APP_GIRSCANNER} --quiet -n diff --git a/options_linux.cmake b/options_linux.cmake index 5496622..cd49f8c 100644 --- a/options_linux.cmake +++ b/options_linux.cmake @@ -122,6 +122,19 @@ if (DESKTOP_APP_USE_ALLOCATION_TRACER) ) endif() +if (DESKTOP_APP_ASAN) + target_compile_options(common_options INTERFACE -fsanitize=address) + target_link_options(common_options INTERFACE -fsanitize=address) + + if (NOT DESKTOP_APP_USE_PACKAGED) + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_link_options(common_options INTERFACE -static-libasan) + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + target_link_options(common_options INTERFACE -static-libsan) + endif() + endif() +endif() + target_link_libraries(common_options INTERFACE ${CMAKE_DL_LIBS} diff --git a/variables.cmake b/variables.cmake index 42614fb..595f1d8 100644 --- a/variables.cmake +++ b/variables.cmake @@ -32,7 +32,7 @@ option(DESKTOP_APP_ASAN "Enable address sanitizer" OFF) cmake_dependent_option(DESKTOP_APP_USE_ENCHANT "Use Enchant instead of bundled Hunspell." OFF LINUX OFF) cmake_dependent_option(DESKTOP_APP_USE_CLD3 "Disable system text language recognition and use bundled cld3 only." OFF APPLE ON) cmake_dependent_option(DESKTOP_APP_NO_PDB "Disable PDB file generation." OFF WIN32 OFF) -cmake_dependent_option(DESKTOP_APP_DISABLE_SCUDO "Disable scudo, use system malloc." OFF LINUX OFF) +cmake_dependent_option(DESKTOP_APP_DISABLE_SCUDO "Disable scudo, use system malloc." OFF "LINUX; NOT DESKTOP_APP_ASAN" ON) if (APPLE AND NOT DEFINED DESKTOP_APP_MAC_ARCH) if (DEFINED CMAKE_OSX_ARCHITECTURES) From 022c15d437aba149b1495532b1560de2a71b13df Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 5 Apr 2024 21:20:05 +0400 Subject: [PATCH 10/18] Revert "Remove Xcode 15 workaround, was fixed in 15.1." This reverts commit e48df0b2ce235cbaa6037c4d76e845543781e79b. New linker emits a lot of 'No platform load command found in' warnings for assembler modules in dav1d and ffmpeg. It defaults to 'macOS', so I think it's fine. --- options_mac.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/options_mac.cmake b/options_mac.cmake index 8279e4a..09dea75 100644 --- a/options_mac.cmake +++ b/options_mac.cmake @@ -47,6 +47,11 @@ if (DESKTOP_APP_SPECIAL_TARGET) ) endif() +target_link_options_if_exists(common_options +INTERFACE + -Wl,-ld_classic +) + target_link_frameworks(common_options INTERFACE Cocoa From 5a19eddd4554486547d6d5dac3002a93bc105867 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Mon, 8 Apr 2024 16:50:10 +0400 Subject: [PATCH 11/18] Revert "Replace jemalloc with scudo" This reverts commit c2ef75186a82ab89c6f742f6493def1a0d65ffdf. --- CMakeLists.txt | 3 + external/CMakeLists.txt | 6 +- external/jemalloc/CMakeLists.txt | 65 +++++++++++++++++++ external/scudo/CMakeLists.txt | 35 ---------- init_target.cmake | 8 --- linux_jemalloc_helper/CMakeLists.txt | 19 ++++++ .../linux_jemalloc_helper.cpp | 25 +++++++ options_linux.cmake | 8 +++ variables.cmake | 2 +- 9 files changed, 124 insertions(+), 47 deletions(-) create mode 100644 external/jemalloc/CMakeLists.txt delete mode 100644 external/scudo/CMakeLists.txt create mode 100644 linux_jemalloc_helper/CMakeLists.txt create mode 100644 linux_jemalloc_helper/linux_jemalloc_helper.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 44954c1..bb8789c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,9 @@ # https://github.com/desktop-app/legal/blob/master/LEGAL add_subdirectory(external) +if (LINUX AND NOT DESKTOP_APP_DISABLE_JEMALLOC) + add_subdirectory(linux_jemalloc_helper) +endif() if (DESKTOP_APP_USE_ALLOCATION_TRACER) add_subdirectory(linux_allocation_tracer) endif() diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 34181cc..d9af92a 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -38,6 +38,9 @@ if (add_hunspell_library) add_checked_subdirectory(hunspell) endif() add_checked_subdirectory(iconv) +if (LINUX AND NOT DESKTOP_APP_DISABLE_JEMALLOC) + add_checked_subdirectory(jemalloc) +endif() add_checked_subdirectory(jpeg) add_checked_subdirectory(kcoreaddons) add_checked_subdirectory(kimageformats) @@ -54,9 +57,6 @@ add_checked_subdirectory(qr_code_generator) add_checked_subdirectory(ranges) add_checked_subdirectory(rlottie) add_checked_subdirectory(rnnoise) -if (LINUX AND NOT DESKTOP_APP_DISABLE_SCUDO) - add_checked_subdirectory(scudo) -endif() add_checked_subdirectory(ton) add_checked_subdirectory(variant) add_checked_subdirectory(vpx) diff --git a/external/jemalloc/CMakeLists.txt b/external/jemalloc/CMakeLists.txt new file mode 100644 index 0000000..9b87c00 --- /dev/null +++ b/external/jemalloc/CMakeLists.txt @@ -0,0 +1,65 @@ +# This file is part of Desktop App Toolkit, +# a set of libraries for developing nice desktop applications. +# +# For license and copyright information please follow this link: +# https://github.com/desktop-app/legal/blob/master/LEGAL + +add_library(external_jemalloc INTERFACE IMPORTED GLOBAL) +add_library(desktop-app::external_jemalloc ALIAS external_jemalloc) + +if (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + return() +endif() + +if (DESKTOP_APP_USE_PACKAGED) + find_package(PkgConfig REQUIRED) + pkg_check_modules(JEMALLOC jemalloc) + + if (JEMALLOC_FOUND) + target_include_directories(external_jemalloc SYSTEM + INTERFACE + ${JEMALLOC_INCLUDE_DIRS} + ) + + target_link_libraries(external_jemalloc + INTERFACE + -Wl,--push-state,--no-as-needed,${JEMALLOC_LINK_LIBRARIES},--pop-state + ) + + return() + endif() +endif() + +include(ProcessorCount) +ProcessorCount(N) + +include(ExternalProject) +ExternalProject_Add(jemalloc + URL ${third_party_loc}/jemalloc + CONFIGURE_COMMAND env + CC=clang + CXX=clang++ + "$>,$>,EXTRA_CFLAGS=-fno-omit-frame-pointer -fstack-protector-all -fstack-clash-protection -fcf-protection -DNDEBUG -D_FORTIFY_SOURCE=3 -D_GLIBCXX_ASSERTIONS,=>" + "$>,$>,EXTRA_CXXFLAGS=-fno-omit-frame-pointer -fstack-protector-all -fstack-clash-protection -fcf-protection -DNDEBUG -D_FORTIFY_SOURCE=3 -D_GLIBCXX_ASSERTIONS,=>" + ./autogen.sh --disable-shared + BUILD_COMMAND make $<$>:-j${N}> + BUILD_IN_SOURCE 1 + STEP_TARGETS build + EXCLUDE_FROM_ALL TRUE + BUILD_BYPRODUCTS /lib/libjemalloc_pic.a +) + +ExternalProject_Get_property(jemalloc SOURCE_DIR) +file(MAKE_DIRECTORY "${SOURCE_DIR}/include") + +target_include_directories(external_jemalloc SYSTEM +INTERFACE + ${SOURCE_DIR}/include +) + +target_link_libraries(external_jemalloc +INTERFACE + -Wl,--push-state,--whole-archive,${SOURCE_DIR}/lib/libjemalloc_pic.a,--pop-state +) + +add_dependencies(external_jemalloc jemalloc-build) diff --git a/external/scudo/CMakeLists.txt b/external/scudo/CMakeLists.txt deleted file mode 100644 index 3fc79fb..0000000 --- a/external/scudo/CMakeLists.txt +++ /dev/null @@ -1,35 +0,0 @@ -# This file is part of Desktop App Toolkit, -# a set of libraries for developing nice desktop applications. -# -# For license and copyright information please follow this link: -# https://github.com/desktop-app/legal/blob/master/LEGAL - -add_library(external_scudo STATIC) -add_library(desktop-app::external_scudo ALIAS external_scudo) -init_target(external_scudo "(external)") - -set(scudo_loc ${third_party_loc}/scudo) - -# https://llvm.org/docs/ScudoHardenedAllocator.html#library -file(GLOB scudo_srcs ${scudo_loc}/*.cpp) -target_sources(external_scudo -PRIVATE - ${scudo_srcs} -) - -target_include_directories(external_scudo SYSTEM -PRIVATE - ${scudo_loc}/include -) - -add_library(external_scudo_options INTERFACE) -target_compile_options(external_scudo_options -INTERFACE - -fno-lto - -Wno-unused-result -) - -target_link_libraries(external_scudo -PRIVATE - external_scudo_options -) diff --git a/init_target.cmake b/init_target.cmake index 549865e..f022292 100644 --- a/init_target.cmake +++ b/init_target.cmake @@ -27,14 +27,6 @@ function(init_target target_name) # init_target(my_target [cxx_std_..] folder_na set_property(TARGET ${target_name} APPEND_STRING PROPERTY STATIC_LIBRARY_OPTIONS "$,,/LTCG>") endif() - if (LINUX AND NOT DESKTOP_APP_DISABLE_SCUDO AND NOT target_name STREQUAL external_scudo) - add_dependencies(${target_name} desktop-app::external_scudo) - target_link_options(${target_name} - PRIVATE - -Wl,--push-state,--whole-archive,$,--pop-state - ) - endif() - target_link_libraries(${target_name} PRIVATE desktop-app::common_options) set_target_properties(${target_name} PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_WEAK YES diff --git a/linux_jemalloc_helper/CMakeLists.txt b/linux_jemalloc_helper/CMakeLists.txt new file mode 100644 index 0000000..0466d8a --- /dev/null +++ b/linux_jemalloc_helper/CMakeLists.txt @@ -0,0 +1,19 @@ +# This file is part of Desktop App Toolkit, +# a set of libraries for developing nice desktop applications. +# +# For license and copyright information please follow this link: +# https://github.com/desktop-app/legal/blob/master/LEGAL + +add_library(linux_jemalloc_helper OBJECT) +init_target(linux_jemalloc_helper "(external)") +add_library(desktop-app::linux_jemalloc_helper ALIAS linux_jemalloc_helper) + +nice_target_sources(linux_jemalloc_helper ${CMAKE_CURRENT_SOURCE_DIR} +PRIVATE + linux_jemalloc_helper.cpp +) + +target_link_libraries(linux_jemalloc_helper +PRIVATE + desktop-app::external_jemalloc +) diff --git a/linux_jemalloc_helper/linux_jemalloc_helper.cpp b/linux_jemalloc_helper/linux_jemalloc_helper.cpp new file mode 100644 index 0000000..76bc863 --- /dev/null +++ b/linux_jemalloc_helper/linux_jemalloc_helper.cpp @@ -0,0 +1,25 @@ +// This file is part of Desktop App Toolkit, +// a set of libraries for developing nice desktop applications. +// +// For license and copyright information please follow this link: +// https://github.com/desktop-app/legal/blob/master/LEGAL +// +#ifdef __FreeBSD__ +#include +#else // __FreeBSD__ +#include +#endif // !__FreeBSD__ + +namespace { + +class JemallocInitializer { +public: + JemallocInitializer() { + auto backgroundThread = true; + mallctl("background_thread", nullptr, nullptr, &backgroundThread, sizeof(bool)); + } +}; + +static const JemallocInitializer initializer; + +} // namespace diff --git a/options_linux.cmake b/options_linux.cmake index cd49f8c..b74b493 100644 --- a/options_linux.cmake +++ b/options_linux.cmake @@ -99,6 +99,14 @@ if (NOT DESKTOP_APP_USE_PACKAGED OR DESKTOP_APP_SPECIAL_TARGET) ) endif() +if (NOT DESKTOP_APP_DISABLE_JEMALLOC) + target_link_libraries(common_options + INTERFACE + $ + $ + ) +endif() + if (DESKTOP_APP_USE_ALLOCATION_TRACER) target_link_options(common_options INTERFACE diff --git a/variables.cmake b/variables.cmake index 595f1d8..65b1e4e 100644 --- a/variables.cmake +++ b/variables.cmake @@ -32,7 +32,7 @@ option(DESKTOP_APP_ASAN "Enable address sanitizer" OFF) cmake_dependent_option(DESKTOP_APP_USE_ENCHANT "Use Enchant instead of bundled Hunspell." OFF LINUX OFF) cmake_dependent_option(DESKTOP_APP_USE_CLD3 "Disable system text language recognition and use bundled cld3 only." OFF APPLE ON) cmake_dependent_option(DESKTOP_APP_NO_PDB "Disable PDB file generation." OFF WIN32 OFF) -cmake_dependent_option(DESKTOP_APP_DISABLE_SCUDO "Disable scudo, use system malloc." OFF "LINUX; NOT DESKTOP_APP_ASAN" ON) +cmake_dependent_option(DESKTOP_APP_DISABLE_JEMALLOC "Disable jemalloc, use system malloc." OFF "LINUX; NOT DESKTOP_APP_ASAN" ON) if (APPLE AND NOT DEFINED DESKTOP_APP_MAC_ARCH) if (DEFINED CMAKE_OSX_ARCHITECTURES) From f921cb6aba9ada6099b3f9c8c237986ecda238f5 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Mon, 8 Apr 2024 17:13:02 +0400 Subject: [PATCH 12/18] Revert "Use clang to build jemalloc (it crashes with gcc)" This reverts commit 03fad319f5911419e736c26f9458598a4d1e55f8. --- external/jemalloc/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/external/jemalloc/CMakeLists.txt b/external/jemalloc/CMakeLists.txt index 9b87c00..7567b35 100644 --- a/external/jemalloc/CMakeLists.txt +++ b/external/jemalloc/CMakeLists.txt @@ -37,8 +37,6 @@ include(ExternalProject) ExternalProject_Add(jemalloc URL ${third_party_loc}/jemalloc CONFIGURE_COMMAND env - CC=clang - CXX=clang++ "$>,$>,EXTRA_CFLAGS=-fno-omit-frame-pointer -fstack-protector-all -fstack-clash-protection -fcf-protection -DNDEBUG -D_FORTIFY_SOURCE=3 -D_GLIBCXX_ASSERTIONS,=>" "$>,$>,EXTRA_CXXFLAGS=-fno-omit-frame-pointer -fstack-protector-all -fstack-clash-protection -fcf-protection -DNDEBUG -D_FORTIFY_SOURCE=3 -D_GLIBCXX_ASSERTIONS,=>" ./autogen.sh --disable-shared From bf157ab03f3d07c3822dcdd3e3f90a8e4ccb7d66 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Wed, 10 Apr 2024 00:06:58 +0400 Subject: [PATCH 13/18] Use installed protobuf on Linux --- external/cld3/CMakeLists.txt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/external/cld3/CMakeLists.txt b/external/cld3/CMakeLists.txt index 1da1aef..deb2c08 100644 --- a/external/cld3/CMakeLists.txt +++ b/external/cld3/CMakeLists.txt @@ -16,7 +16,7 @@ set(cld3_src ${cld3_loc}/src) set(gen_loc ${cld3_loc}/build/gen) set(gen_dst ${gen_loc}/cld_3/protos) -if (DESKTOP_APP_USE_PACKAGED) +if (DESKTOP_APP_USE_PACKAGED OR LINUX) find_package(Protobuf) if (NOT Protobuf_FOUND) find_package(protobuf REQUIRED CONFIG) @@ -30,9 +30,6 @@ elseif (WIN32) else() set(protoc_executable ${libs_loc}/protobuf/build/protoc) set(protobuf_lib ${libs_loc}/protobuf/build/libprotobuf-lite.a) - if (LINUX) - target_compile_options(external_cld3_bundled PRIVATE -Wno-implicit-fallthrough) - endif() endif() if (PROTOBUF_PROTOC_EXECUTABLE) set(protoc_executable ${PROTOBUF_PROTOC_EXECUTABLE}) @@ -87,13 +84,18 @@ PRIVATE script_span/fixunicodevalue.cc ) +target_compile_options_if_exists(external_cld3_bundled +PRIVATE + -Wno-implicit-fallthrough +) + target_include_directories(external_cld3_bundled PUBLIC ${cld3_src} ${gen_loc} ) -if (NOT DESKTOP_APP_USE_PACKAGED) +if (NOT DESKTOP_APP_USE_PACKAGED AND NOT LINUX) target_include_directories(external_cld3_bundled PUBLIC ${libs_loc}/protobuf/src From 4ec493812d25de1eccfedccc49a23c15d032b118 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Wed, 10 Apr 2024 04:09:16 +0400 Subject: [PATCH 14/18] Update libjxl on Linux --- external/kimageformats/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/external/kimageformats/CMakeLists.txt b/external/kimageformats/CMakeLists.txt index 91aa00b..3a6be47 100644 --- a/external/kimageformats/CMakeLists.txt +++ b/external/kimageformats/CMakeLists.txt @@ -109,6 +109,7 @@ else() avif heif jxl + jxl_cms jxl_threads dav1d de265 From 621b01ec9bd7f953223147daf59ab4c850cb3c40 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Wed, 10 Apr 2024 04:10:02 +0400 Subject: [PATCH 15/18] Use jpegli on Linux --- external/jpeg/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/external/jpeg/CMakeLists.txt b/external/jpeg/CMakeLists.txt index cfa4c26..855e896 100644 --- a/external/jpeg/CMakeLists.txt +++ b/external/jpeg/CMakeLists.txt @@ -32,4 +32,5 @@ else() set_target_properties(external_jpeg PROPERTIES IMPORTED_LOCATION "${DESKTOP_APP_JPEG_LIBRARIES}" ) + target_link_static_libraries(external_jpeg INTERFACE hwy) endif() From a428df5440e76a726abc30924766ac7da0cb381c Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Sun, 21 Apr 2024 01:00:14 +0400 Subject: [PATCH 16/18] Remove direct Wayland usage --- external/CMakeLists.txt | 3 --- external/qt/package.cmake | 11 ----------- external/wayland_client/CMakeLists.txt | 16 ---------------- 3 files changed, 30 deletions(-) delete mode 100644 external/wayland_client/CMakeLists.txt diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index d9af92a..a8406e1 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -60,9 +60,6 @@ add_checked_subdirectory(rnnoise) add_checked_subdirectory(ton) add_checked_subdirectory(variant) add_checked_subdirectory(vpx) -if (LINUX AND NOT DESKTOP_APP_DISABLE_WAYLAND_INTEGRATION) - add_checked_subdirectory(wayland_client) -endif() add_checked_subdirectory(webrtc) if (LINUX AND NOT DESKTOP_APP_DISABLE_X11_INTEGRATION) add_checked_subdirectory(xcb) diff --git a/external/qt/package.cmake b/external/qt/package.cmake index 03f5732..2acdade 100644 --- a/external/qt/package.cmake +++ b/external/qt/package.cmake @@ -39,23 +39,12 @@ endif() find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Gui Widgets Network Svg REQUIRED) find_package(Qt${QT_VERSION_MAJOR} OPTIONAL_COMPONENTS Quick QuickWidgets QUIET) -set(qt_version_6_5_or_greater 0) if (QT_VERSION_MAJOR GREATER_EQUAL 6) - if (QT_VERSION_MAJOR GREATER 6 OR Qt6_VERSION_MINOR GREATER_EQUAL 5) - set(qt_version_6_5_or_greater 1) - endif() find_package(Qt${QT_VERSION_MAJOR} COMPONENTS OpenGL OpenGLWidgets REQUIRED) endif() -# QtWaylandScanner cmake integration from Qt 6 is used -cmake_dependent_option(DESKTOP_APP_DISABLE_WAYLAND_INTEGRATION "Disable all code for Wayland integration." OFF "LINUX; qt_version_6_5_or_greater" ON) - if (LINUX) find_package(Qt${QT_VERSION_MAJOR} OPTIONAL_COMPONENTS DBus WaylandClient WaylandCompositor QUIET) - - if (NOT DESKTOP_APP_DISABLE_WAYLAND_INTEGRATION) - find_package(Qt${QT_VERSION_MAJOR} COMPONENTS WaylandClient REQUIRED) - endif() endif() set_property(GLOBAL PROPERTY AUTOGEN_SOURCE_GROUP "(gen)") diff --git a/external/wayland_client/CMakeLists.txt b/external/wayland_client/CMakeLists.txt deleted file mode 100644 index e310fae..0000000 --- a/external/wayland_client/CMakeLists.txt +++ /dev/null @@ -1,16 +0,0 @@ -# This file is part of Desktop App Toolkit, -# a set of libraries for developing nice desktop applications. -# -# For license and copyright information please follow this link: -# https://github.com/desktop-app/legal/blob/master/LEGAL - -add_library(external_wayland_client INTERFACE IMPORTED GLOBAL) -add_library(desktop-app::external_wayland_client ALIAS external_wayland_client) - -if (DESKTOP_APP_USE_PACKAGED) - find_package(PkgConfig REQUIRED) - pkg_check_modules(WAYLAND_CLIENT REQUIRED IMPORTED_TARGET wayland-client) - target_link_libraries(external_wayland_client INTERFACE PkgConfig::WAYLAND_CLIENT) -else() - target_link_optional_libraries(external_wayland_client INTERFACE wayland-client) -endif() From d9f958e0ba4eef6359b0c968ca4fc75923134f78 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Mon, 22 Apr 2024 17:21:46 +0300 Subject: [PATCH 17/18] Added ICCv4 with Little CMS on macOS. --- external/kimageformats/CMakeLists.txt | 1 + external/qt/CMakeLists.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/external/kimageformats/CMakeLists.txt b/external/kimageformats/CMakeLists.txt index 3a6be47..bff9d1d 100644 --- a/external/kimageformats/CMakeLists.txt +++ b/external/kimageformats/CMakeLists.txt @@ -102,6 +102,7 @@ elseif (APPLE) ${libs_loc}/local/lib/libbrotlidec-static.a ${libs_loc}/local/lib/libbrotlienc-static.a ${libs_loc}/local/lib/libbrotlicommon-static.a + ${libs_loc}/local/lib/liblcms2.a ) else() target_link_static_libraries(external_kimageformats diff --git a/external/qt/CMakeLists.txt b/external/qt/CMakeLists.txt index 8a9df97..4a21c0d 100644 --- a/external/qt/CMakeLists.txt +++ b/external/qt/CMakeLists.txt @@ -311,6 +311,7 @@ if (WIN32) elseif (APPLE) target_link_libraries(external_qt INTERFACE + ${libs_loc}/local/lib/liblcms2.a ${libs_loc}/local/lib/libwebp.a ${libs_loc}/local/lib/libwebpdemux.a ${libs_loc}/local/lib/libwebpmux.a From a7527c0e6eba1c71cd0dfd7bd8de9c1e68cb529f Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Thu, 16 May 2024 10:59:53 +0400 Subject: [PATCH 18/18] Use the right path to build directory for cld3 code generation --- external/cld3/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/cld3/CMakeLists.txt b/external/cld3/CMakeLists.txt index deb2c08..69d4d37 100644 --- a/external/cld3/CMakeLists.txt +++ b/external/cld3/CMakeLists.txt @@ -13,7 +13,7 @@ init_target(external_cld3_bundled "(external)") set(cld3_loc ${third_party_loc}/cld3) set(cld3_src ${cld3_loc}/src) -set(gen_loc ${cld3_loc}/build/gen) +set(gen_loc ${CMAKE_CURRENT_BINARY_DIR}/gen) set(gen_dst ${gen_loc}/cld_3/protos) if (DESKTOP_APP_USE_PACKAGED OR LINUX)