xmake.lua 5.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package("backward-cpp")
  2. set_kind("library", {headeronly = true})
  3. set_homepage("https://github.com/bombela/backward-cpp")
  4. set_description("Backward is a beautiful stack trace pretty printer for C++.")
  5. set_license("MIT")
  6. add_urls("https://github.com/bombela/backward-cpp/archive/refs/tags/$(version).zip",
  7. "https://github.com/bombela/backward-cpp.git")
  8. add_versions("v1.6", "9b07e12656ab9af8779a84e06865233b9e30fadbb063bf94dd81d318081db8c2")
  9. add_configs("stack_walking", {description = "Choose stack walking library to use.", default = nil, type = "string", values = {"unwind", "libunwind", "backtrace"}})
  10. add_configs("stack_details", {description = "Choose stack details library to use.", default = nil, type = "string", values = {"dw", "bfd", "dwarf", "backtrace_symbol"}})
  11. if is_plat("mingw") then
  12. add_patches("v1.6", "patches/v1.6/link_to_imagehlp.patch", "0a135b6d68970ff6609a3eb4deb2b10c317eee15ba980eb178b93402a97c957c")
  13. if is_arch("i386") then
  14. add_patches("v1.6", "patches/v1.6/fix_32bit_ssize_t_typedef.patch", "fb372fe5934984aecb00b3153f737f63a542ff9359d159a9bcb79c5d54963b42")
  15. end
  16. end
  17. if is_plat("windows", "mingw") then
  18. add_syslinks("psapi", "dbghelp")
  19. elseif is_plat("linux", "bsd", "android") then
  20. add_syslinks("dl", "m")
  21. end
  22. add_deps("cmake")
  23. on_load(function (package)
  24. local stack_walking = package:config("stack_walking")
  25. if stack_walking == "libunwind" then
  26. package:add("deps", "libunwind")
  27. end
  28. local stack_details = package:config("stack_details")
  29. if stack_details == "dwarf" then
  30. package:add("deps", "libdwarf", "libelf")
  31. elseif stack_details == "dw" then
  32. package:add("deps", "elfutils")
  33. elseif stack_details == "bfd" then
  34. package:add("deps", "binutils")
  35. package:add("syslinks", "bfd")
  36. end
  37. package:add("defines", "BACKWARD_HAS_UNWIND=" .. (stack_walking == "unwind" and "1" or "0"))
  38. package:add("defines", "BACKWARD_HAS_LIBUNWIND=" .. (stack_walking == "libunwind" and "1" or "0"))
  39. package:add("defines", "BACKWARD_HAS_BACKTRACE=" .. (stack_walking == "backtrace" and "1" or "0"))
  40. package:add("defines", "BACKWARD_HAS_BACKTRACE_SYMBOL=" .. (stack_details == "backtrace_symbol" and "1" or "0"))
  41. package:add("defines", "BACKWARD_HAS_DW=" .. (stack_details == "dw" and "1" or "0"))
  42. package:add("defines", "BACKWARD_HAS_BFD=" .. (stack_details == "bfd" and "1" or "0"))
  43. package:add("defines", "BACKWARD_HAS_DWARF=" .. (stack_details == "dwarf" and "1" or "0"))
  44. package:add("defines", "BACKWARD_HAS_PDB_SYMBOL=" .. (is_plat("windows") and "1" or "0"))
  45. end)
  46. on_install("(!windows or windows|!arm64) and !android and !bsd and !wasm and !cross", function (package)
  47. local configs = {"-DBACKWARD_TESTS=OFF", "-DSTACK_DETAILS_AUTO_DETECT=OFF"}
  48. table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release"))
  49. table.insert(configs, "-DBACKWARD_SHARED=" .. (package:config("shared") and "ON" or "OFF"))
  50. if package:is_plat("windows") then
  51. table.insert(configs, "-DCMAKE_COMPILE_PDB_OUTPUT_DIRECTORY=''")
  52. if package:config("shared") then
  53. table.insert(configs, "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON")
  54. end
  55. end
  56. local stack_walking = package:config("stack_walking")
  57. local stack_details = package:config("stack_details")
  58. table.insert(configs, "-DSTACK_WALKING_UNWIND=" .. ((stack_walking == "unwind") and "ON" or "OFF"))
  59. table.insert(configs, "-DSTACK_WALKING_LIBUNWIND=" .. ((stack_walking == "libunwind") and "ON" or "OFF"))
  60. table.insert(configs, "-DSTACK_WALKING_BACKTRACE=" .. ((stack_walking == "backtrace") and "ON" or "OFF"))
  61. table.insert(configs, "-DSTACK_DETAILS_BACKTRACE_SYMBOL=" .. ((stack_walking == "backtrace_symbol") and "ON" or "OFF"))
  62. table.insert(configs, "-DSTACK_DETAILS_DW=" .. ((stack_walking == "dw") and "ON" or "OFF"))
  63. table.insert(configs, "-DSTACK_DETAILS_BFD=" .. ((stack_walking == "bfd") and "ON" or "OFF"))
  64. table.insert(configs, "-DSTACK_DETAILS_DWARF=" .. ((stack_walking == "dwarf") and "ON" or "OFF"))
  65. import("package.tools.cmake").install(package, configs)
  66. io.replace("backward.hpp", [[#pragma comment(lib, "psapi.lib")]], "", {plain = true})
  67. io.replace("backward.hpp", [[#pragma comment(lib, "dbghelp.lib")]], "", {plain = true})
  68. os.cp(package:installdir("include/*.hpp"), package:installdir("include/backward"))
  69. os.cp(package:installdir("include/*.hpp"), package:installdir("lib/backward"))
  70. end)
  71. on_test(function (package)
  72. assert(package:check_cxxsnippets({test = [[
  73. void test() {
  74. backward::Printer printer;
  75. backward::StackTrace st;
  76. }
  77. ]]}, {configs = {languages = "c++11"}, includes = "backward.hpp"}))
  78. end)