options_linux.cmake 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. target_compile_options(common_options
  7. INTERFACE
  8. -fPIC
  9. $<$<NOT:$<CONFIG:Debug>>:-fno-strict-aliasing>
  10. -pipe
  11. )
  12. target_compile_options_if_exists(common_options
  13. INTERFACE
  14. -Wall
  15. -Wextra
  16. -Wno-unused-parameter
  17. -Wno-switch
  18. -Wno-maybe-uninitialized
  19. -Wno-missing-field-initializers
  20. -Wno-sign-compare
  21. -Wno-deprecated # implicit capture of 'this' via '[=]' is deprecated in C++20
  22. )
  23. target_link_options_if_exists(common_options
  24. INTERFACE
  25. -Wno-alloc-size-larger-than # Qt + LTO
  26. -Wno-stringop-overflow # Qt + LTO
  27. -Wno-odr # Qt + LTO
  28. -Wno-inline # OpenAL + LTO
  29. -pthread
  30. -Wl,--as-needed
  31. )
  32. if (DESKTOP_APP_SPECIAL_TARGET)
  33. target_compile_options(common_options
  34. INTERFACE
  35. -Werror
  36. )
  37. endif()
  38. if (NOT DESKTOP_APP_USE_PACKAGED)
  39. set(ipo_prop $<TARGET_PROPERTY:INTERPROCEDURAL_OPTIMIZATION>)
  40. set(ipo_config_prop $<TARGET_PROPERTY:INTERPROCEDURAL_OPTIMIZATION_$<UPPER_CASE:$<CONFIG>>>)
  41. set(ipo_compile_value_on)
  42. set(ipo_compile_value_off -fno-lto)
  43. set(ipo_compile_values ${ipo_compile_value_on},${ipo_compile_value_off})
  44. set(ipo_link_value_on -fwhole-program)
  45. set(ipo_link_value_off -fuse-ld=lld -fno-lto -fno-use-linker-plugin)
  46. set(ipo_link_values ${ipo_link_value_on},${ipo_link_value_off})
  47. target_compile_options(common_options
  48. INTERFACE
  49. $<IF:$<NOT:$<STREQUAL:${ipo_config_prop},>>,$<IF:$<BOOL:${ipo_config_prop}>,${ipo_compile_values}>,$<IF:$<BOOL:${ipo_prop}>,${ipo_compile_values}>>
  50. $<$<CONFIG:Debug>:-O0>
  51. $<$<CONFIG:Debug>:-U_FORTIFY_SOURCE>
  52. )
  53. target_link_options(common_options
  54. INTERFACE
  55. $<IF:$<NOT:$<STREQUAL:${ipo_config_prop},>>,$<IF:$<BOOL:${ipo_config_prop}>,${ipo_link_values}>,$<IF:$<BOOL:${ipo_prop}>,${ipo_link_values}>>
  56. -static-libstdc++
  57. -static-libgcc
  58. -rdynamic
  59. -Wl,-z,muldefs
  60. -Wl,-z,relro
  61. -Wl,-z,now
  62. -Wl,-z,noexecstack
  63. -pie
  64. )
  65. endif()
  66. if (NOT DESKTOP_APP_DISABLE_JEMALLOC)
  67. target_link_libraries(common_options
  68. INTERFACE
  69. $<TARGET_OBJECTS:desktop-app::linux_jemalloc_helper>
  70. $<LINK_ONLY:desktop-app::external_jemalloc>
  71. )
  72. endif()
  73. if (DESKTOP_APP_USE_ALLOCATION_TRACER)
  74. target_link_options(common_options
  75. INTERFACE
  76. # -Wl,-wrap,__malloc
  77. -Wl,-wrap,__libc_malloc
  78. -Wl,-wrap,malloc
  79. -Wl,-wrap,valloc
  80. -Wl,-wrap,pvalloc
  81. -Wl,-wrap,calloc
  82. -Wl,-wrap,realloc
  83. -Wl,-wrap,memalign
  84. -Wl,-wrap,aligned_alloc
  85. -Wl,-wrap,posix_memalign
  86. -Wl,-wrap,free
  87. -Wl,--push-state,--no-as-needed,-lrt,--pop-state
  88. )
  89. target_link_libraries(common_options
  90. INTERFACE
  91. desktop-app::linux_allocation_tracer
  92. $<TARGET_FILE:desktop-app::linux_allocation_tracer>
  93. )
  94. endif()
  95. if (DESKTOP_APP_ASAN)
  96. target_compile_options(common_options INTERFACE -fsanitize=address)
  97. target_link_options(common_options INTERFACE -fsanitize=address)
  98. if (NOT DESKTOP_APP_USE_PACKAGED)
  99. if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  100. target_link_options(common_options INTERFACE -static-libasan)
  101. elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  102. target_link_options(common_options INTERFACE -static-libsan)
  103. endif()
  104. endif()
  105. endif()
  106. target_link_libraries(common_options
  107. INTERFACE
  108. ${CMAKE_DL_LIBS}
  109. )