CMakeLists.txt 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. # This file is part of Desktop App Toolkit,
  2. # a set of libraries for developing nice desktop applications.
  3. #
  4. # For license and copyright information please follow this link:
  5. # https://github.com/desktop-app/legal/blob/master/LEGAL
  6. add_library(external_jemalloc INTERFACE IMPORTED GLOBAL)
  7. add_library(desktop-app::external_jemalloc ALIAS external_jemalloc)
  8. if (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
  9. return()
  10. endif()
  11. if (DESKTOP_APP_USE_PACKAGED)
  12. find_package(PkgConfig REQUIRED)
  13. pkg_check_modules(JEMALLOC jemalloc)
  14. if (JEMALLOC_FOUND)
  15. target_include_directories(external_jemalloc SYSTEM
  16. INTERFACE
  17. ${JEMALLOC_INCLUDE_DIRS}
  18. )
  19. target_link_libraries(external_jemalloc
  20. INTERFACE
  21. -Wl,--push-state,--no-as-needed,${JEMALLOC_LINK_LIBRARIES},--pop-state
  22. )
  23. return()
  24. endif()
  25. endif()
  26. include(ProcessorCount)
  27. ProcessorCount(N)
  28. include(ExternalProject)
  29. ExternalProject_Add(jemalloc
  30. URL ${third_party_loc}/jemalloc
  31. CONFIGURE_COMMAND env
  32. "EXTRA_CFLAGS=-fno-lto -fno-use-linker-plugin"
  33. "EXTRA_CXXFLAGS=-fno-lto -fno-use-linker-plugin"
  34. ./autogen.sh --disable-shared
  35. BUILD_COMMAND make $<$<NOT:$<EQUAL:${N},0>>:-j${N}>
  36. BUILD_IN_SOURCE 1
  37. STEP_TARGETS build
  38. EXCLUDE_FROM_ALL TRUE
  39. BUILD_BYPRODUCTS <SOURCE_DIR>/lib/libjemalloc_pic.a
  40. )
  41. ExternalProject_Get_property(jemalloc SOURCE_DIR)
  42. file(MAKE_DIRECTORY "${SOURCE_DIR}/include")
  43. target_include_directories(external_jemalloc SYSTEM
  44. INTERFACE
  45. ${SOURCE_DIR}/include
  46. )
  47. target_link_libraries(external_jemalloc
  48. INTERFACE
  49. -Wl,--push-state,--whole-archive,${SOURCE_DIR}/lib/libjemalloc_pic.a,--pop-state
  50. )
  51. add_dependencies(external_jemalloc jemalloc-build)