xmake.lua 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. option("bitswidth", {default = "64", type = "string", values = {"64", "32"}})
  2. set_version("1.0.0")
  3. includes("@builtin/check")
  4. configvar_check_cfuncs("BACKTRACE_SUPPORTED", "backtrace", {includes = "execinfo.h"})
  5. configvar_check_cfuncs("BACKTRACE_SUPPORTS_THREADS", "backtrace_create_state", {includes = "execinfo.h"})
  6. configvar_check_cfuncs("BACKTRACE_SUPPORTS_DATA", "backtrace_syminfo", {includes = "execinfo.h"})
  7. configvar_check_cincludes("HAVE_DLFCN_H", "dlfcn.h")
  8. configvar_check_cincludes("HAVE_INTTYPES_H", "inttypes.h")
  9. configvar_check_cincludes("HAVE_LINK_H", "link.h")
  10. configvar_check_cincludes("HAVE_MEMORY_H", "memory.h")
  11. configvar_check_cincludes("HAVE_STDINT_H", "stdint.h")
  12. configvar_check_cincludes("HAVE_STDLIB_H", "stdlib.h")
  13. configvar_check_cincludes("HAVE_STRINGS_H", "strings.h")
  14. configvar_check_cincludes("HAVE_STRING_H", "string.h")
  15. configvar_check_cincludes("HAVE_SYS_LDR_H", "sys/ldr.h")
  16. configvar_check_cincludes("HAVE_SYS_LINK_H", "sys/link.h")
  17. configvar_check_cincludes("HAVE_SYS_STAT_H", "sys/stat.h")
  18. configvar_check_cincludes("HAVE_SYS_TYPES_H", "sys/types.h")
  19. configvar_check_cincludes("HAVE_TLHELP32_H", "tlhelp32.h")
  20. configvar_check_cincludes("HAVE_UNISTD_H", "unistd.h")
  21. configvar_check_cfuncs("HAVE_CLOCK_GETTIME", "clock_gettime", {includes = "time.h"})
  22. configvar_check_cfuncs("HAVE_FCNTL", "fcntl", {includes = "fcntl.h"})
  23. configvar_check_cfuncs("HAVE_LSTAT", "lstat", {includes = "sys/stat.h"})
  24. configvar_check_cfuncs("HAVE_READLINK", "readlink", {includes = "unistd.h"})
  25. configvar_check_cfuncs("HAVE_DECL_GETPAGESIZE", "getpagesize", {includes = "unistd.h"})
  26. configvar_check_cfuncs("HAVE_DECL_STRNLEN", "strnlen", {includes = "string.h"})
  27. configvar_check_cfuncs("HAVE_DECL__PGMPTR", "_pgmptr", {includes = {"stdlib.h", "stdio.h"}})
  28. configvar_check_csnippets("HAVE_ATOMIC_FUNCTIONS", [[#include <stdio.h>
  29. #include <stdatomic.h>
  30. #include <stdint.h>
  31. void test() { uint64_t *v;
  32. __atomic_store_n(&v, 0, __ATOMIC_ACQUIRE); }]])
  33. option("HAVE_GETIPINFO")
  34. add_cincludes("unwind.h")
  35. add_cfuncs("_Unwind_GetIPInfo")
  36. set_configvar("HAVE_GETIPINFO", 1)
  37. set_showmenu(false)
  38. option_end()
  39. if is_plat("wasm") then
  40. set_configvar("HAVE_DL_ITERATE_PHDR", 0)
  41. else
  42. option("HAVE_DL_ITERATE_PHDR")
  43. add_cincludes("link.h")
  44. add_cfuncs("dl_iterate_phdr")
  45. add_defines("_GNU_SOURCE")
  46. set_configvar("HAVE_DL_ITERATE_PHDR", 1)
  47. set_showmenu(false)
  48. option_end()
  49. end
  50. option("HAVE_MACH_O_DYLD_H")
  51. add_cincludes("mach-o/dyld.h")
  52. set_configvar("HAVE_MACH_O_DYLD_H", 1)
  53. set_showmenu(false)
  54. option_end()
  55. option("HAVE_WINDOWS_H")
  56. add_cincludes("windows.h")
  57. set_configvar("HAVE_WINDOWS_H", 1)
  58. set_showmenu(false)
  59. option_end()
  60. option("HAVE_LOADQUERY")
  61. add_cincludes("sys/ldr.h")
  62. add_defines("_GNU_SOURCE")
  63. set_configvar("HAVE_LOADQUERY", 1)
  64. set_showmenu(false)
  65. option_end()
  66. option("HAVE_SYS_MMAN_H")
  67. add_cincludes("sys/mman.h")
  68. set_configvar("HAVE_SYS_MMAN_H", 1)
  69. set_showmenu(false)
  70. option_end()
  71. if has_config("HAVE_SYS_MMAN_H") then
  72. set_configvar("BACKTRACE_USES_MALLOC", 0)
  73. else
  74. set_configvar("BACKTRACE_USES_MALLOC", 1)
  75. end
  76. configvar_check_cfuncs("HAVE_GETEXECNAME", "getexecname", {includes = "stdlib.h"})
  77. configvar_check_cfuncs("HAVE_KERN_PROC", "KERN_PROC", {includes = "sys/sysctl.h"})
  78. configvar_check_cfuncs("HAVE_KERN_PROC_ARGS", "KERN_PROC_ARGS", {includes = "sys/sysctl.h"})
  79. configvar_check_csnippets("HAVE_SYNC_FUNCTIONS", [[#include <stdio.h>
  80. #include <pthread.h>
  81. void test() { __sync_synchronize(); }]])
  82. if has_config("bitswidth") then
  83. if get_config("bitswidth") == "64" then
  84. set_configvar("BACKTRACE_ELF_SIZE", 64)
  85. set_configvar("BACKTRACE_XCOFF_SIZE", 64)
  86. else
  87. set_configvar("BACKTRACE_ELF_SIZE", 32)
  88. set_configvar("BACKTRACE_XCOFF_SIZE", 32)
  89. end
  90. end
  91. set_configvar("HAVE_LIBLZMA", 1)
  92. set_configvar("HAVE_ZLIB", 1)
  93. set_configvar("HAVE_ZSTD", 1)
  94. add_requires("xz", "zlib", "zstd")
  95. if is_plat("windows") then
  96. add_requires("unistd_h")
  97. end
  98. set_languages("c11")
  99. add_rules("utils.install.cmake_importfiles")
  100. add_rules("mode.debug", "mode.release")
  101. target("libbacktrace")
  102. set_kind("$(kind)")
  103. add_options("HAVE_GETIPINFO", "HAVE_MACH_O_DYLD_H", "HAVE_WINDOWS_H", "HAVE_LOADQUERY", "HAVE_SYS_MMAN_H")
  104. if not is_plat("wasm") then
  105. add_options("HAVE_DL_ITERATE_PHDR")
  106. else
  107. add_defines("_POSIX_C_SOURCE=200809L", "_DEFAULT_SOURCE")
  108. end
  109. add_includedirs(".")
  110. add_headerfiles("backtrace.h")
  111. set_configdir(".")
  112. add_configfiles("(config.h.in)", {filename = "config.h"})
  113. add_configfiles("(backtrace-supported.h.in)", {filename = "backtrace-supported.h"})
  114. add_files("atomic.c", "dwarf.c", "fileline.c", "posix.c", "print.c", "sort.c", "state.c")
  115. add_packages("xz", "zlib", "zstd")
  116. if is_plat("windows") then
  117. add_packages("unistd_h")
  118. end
  119. if is_plat("linux", "bsd") then
  120. add_syslinks("dl", "m", "pthread", "rt")
  121. elseif is_plat("macosx", "iphoneos") then
  122. add_defines("_DARWIN_USE_64_BIT_INODE=1")
  123. end
  124. if has_config("HAVE_GETIPINFO") and has_config("HAVE_DL_ITERATE_PHDR") then
  125. add_files("backtrace.c")
  126. elseif has_config("HAVE_DL_ITERATE_PHDR") then
  127. add_files("simple.c")
  128. else
  129. add_files("nounwind.c")
  130. end
  131. if has_config("HAVE_DL_ITERATE_PHDR") then
  132. add_files("elf.c")
  133. elseif has_config("HAVE_MACH_O_DYLD_H") then
  134. add_files("macho.c")
  135. elseif has_config("HAVE_WINDOWS_H") then
  136. add_files("pecoff.c")
  137. elseif has_config("HAVE_LOADQUERY") then
  138. add_files("xcoff.c")
  139. else
  140. add_files("unknown.c")
  141. end
  142. if has_config("HAVE_SYS_MMAN_H") then
  143. add_files("mmapio.c", "mmap.c")
  144. else
  145. add_files("read.c", "alloc.c")
  146. end
  147. if is_plat("windows") and is_kind("shared") then
  148. add_rules("utils.symbols.export_all")
  149. end