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..a8406e1 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,15 +57,9 @@ 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) -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/cld3/CMakeLists.txt b/external/cld3/CMakeLists.txt index 1da1aef..69d4d37 100644 --- a/external/cld3/CMakeLists.txt +++ b/external/cld3/CMakeLists.txt @@ -13,10 +13,10 @@ 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) +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 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 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/external/jemalloc/CMakeLists.txt b/external/jemalloc/CMakeLists.txt new file mode 100644 index 0000000..7567b35 --- /dev/null +++ b/external/jemalloc/CMakeLists.txt @@ -0,0 +1,63 @@ +# 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 + "$>,$>,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/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() diff --git a/external/kimageformats/CMakeLists.txt b/external/kimageformats/CMakeLists.txt index f930d62..bff9d1d 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 @@ -101,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 @@ -108,6 +110,7 @@ else() avif heif jxl + jxl_cms jxl_threads dav1d de265 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) 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/openssl/CMakeLists.txt b/external/openssl/CMakeLists.txt index 0e0b9d9..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}/openssl/out) -else() - set(openssl_lib_ext a) - if (APPLE) - set(openssl_lib_loc ${libs_loc}/openssl) - else() - set(openssl_lib_loc /usr/local/desktop-app/openssl-1.1.1/lib) - endif() + set(openssl_lib_loc ${libs_loc}/openssl3/out) +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 07548fa..48e7e1c 100644 --- a/external/openssl/openssl_common/CMakeLists.txt +++ b/external/openssl/openssl_common/CMakeLists.txt @@ -8,15 +8,16 @@ 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) + if (NOT LINUX) target_include_directories(external_openssl_common SYSTEM INTERFACE - /usr/local/desktop-app/openssl-1.1.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/external/openssl/openssl_crypto/CMakeLists.txt b/external/openssl/openssl_crypto/CMakeLists.txt index 8ffc591..b82c8e7 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..9111f92 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() 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 diff --git a/external/qt/package.cmake b/external/qt/package.cmake index a4283f4..2acdade 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) @@ -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/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/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/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}" 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() 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 b037f67..b74b493 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 @@ -98,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 @@ -121,6 +130,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/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 diff --git a/options_win.cmake b/options_win.cmake index 2a56641..e2f160a 100644 --- a/options_win.cmake +++ b/options_win.cmake @@ -141,6 +141,7 @@ INTERFACE Wtsapi32 Crypt32 Propsys + Bcrypt ) if (build_winstore) diff --git a/variables.cmake b/variables.cmake index f0f2644..230a960 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_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)