xmake.lua 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package("dobby")
  2. set_homepage("https://github.com/jmpews/Dobby")
  3. set_description("a lightweight, multi-platform, multi-architecture hook framework.")
  4. set_license("Apache-2.0")
  5. add_urls("https://github.com/jmpews/Dobby.git")
  6. add_versions("2023.4.14", "0932d69c320e786672361ab53825ba8f4245e9d3")
  7. add_patches("2023.4.14", path.join(os.scriptdir(), "patches", "fix-compile-on-lower-version-of-gcc.patch"), "632aad7d79e2afd9587089a39c3eb2b64a3750ab3c8954f04672c13abcddbbae")
  8. add_configs("symbol_resolver", {description = "Enable symbol resolver plugin.", default = true, type = "boolean"})
  9. add_configs("import_table_replacer", {description = "Enable import table replacer plugin.", default = false, type = "boolean", readonly = not is_plat("macosx", "iphoneos")})
  10. add_configs("android_bionic_linker_utils", {description = "Enable android bionic linker utils.", default = false, type = "boolean", readonly = not is_plat("android")})
  11. add_configs("near_branch", {description = "Enable near branch trampoline.", default = true, type = "boolean"})
  12. add_configs("full_floating_point_register_pack", {description = "Enables saving and packing of all floating-point registers.", default = false, type = "boolean"})
  13. if is_plat("linux", "bsd") then
  14. add_syslinks("pthread")
  15. end
  16. add_deps("cmake")
  17. on_install("linux", "macosx", "android", "iphoneos", function (package)
  18. local configs = {"-DDOBBY_BUILD_EXAMPLE=OFF", "-DDOBBY_BUILD_TEST=OFF"}
  19. table.insert(configs, "-DDOBBY_DEBUG=" .. (package:is_debug() and "ON" or "OFF"))
  20. table.insert(configs, "-DPlugin.SymbolResolver=" .. (package:config("symbol_resolver") and "ON" or "OFF"))
  21. table.insert(configs, "-DPlugin.ImportTableReplace=" .. (package:config("import_table_replacer") and "ON" or "OFF"))
  22. table.insert(configs, "-DPlugin.Android.BionicLinkerUtil=" .. (package:config("android_bionic_linker_utils") and "ON" or "OFF"))
  23. table.insert(configs, "-DNearBranch=" .. (package:config("near_branch") and "ON" or "OFF"))
  24. table.insert(configs, "-DFullFloatingPointRegisterPack=" .. (package:config("full_floating_point_register_pack") and "ON" or "OFF"))
  25. if package:is_plat("android") then
  26. local ndk = package:toolchain("ndk")
  27. table.insert(configs, "-DCMAKE_ANDROID_NDK=" .. ndk:config("ndk"))
  28. table.insert(configs, "-DCMAKE_ANDROID_ARCH_ABI=" .. package:arch())
  29. local sdkver = "21"
  30. if package:is_arch("armeabi-v7a", "x86") then
  31. sdkver = "19"
  32. end
  33. table.insert(configs, "-DCMAKE_SYSTEM_VERSION=" .. sdkver)
  34. elseif package:is_plat("iphoneos") then
  35. table.insert(configs, "-DCMAKE_SYSTEM_PROCESSOR=" .. package:arch())
  36. table.insert(configs, "-DCMAKE_OSX_DEPLOYMENT_TARGET=9.3") -- from scripts/platform_builder.py:158
  37. end
  38. local cxflags = {}
  39. if not package:is_debug() then
  40. io.replace("CMakeLists.txt", "add_subdirectory(external/logging)", "", {plain = true})
  41. io.replace("CMakeLists.txt", "get_target_property(logging.SOURCE_FILE_LIST logging SOURCES)", "", {plain = true})
  42. io.replace("CMakeLists.txt", "${logging.SOURCE_FILE_LIST}", "", {plain = true})
  43. table.insert(cxflags, "-DDOBBY_LOGGING_DISABLE")
  44. end
  45. import("package.tools.cmake").build(package, configs, {buildir = "build", cxflags = cxflags})
  46. os.cp("include/dobby.h", package:installdir("include"))
  47. if package:config("android_bionic_linker_utils") then
  48. os.cp("builtin-plugin/BionicLinkerUtil/bionic_linker_util.h", package:installdir("include"))
  49. end
  50. local so_extname = "so"
  51. if package:is_plat("macosx", "iphoneos") then
  52. so_extname = "dylib"
  53. end
  54. os.cp(package:config("shared") and "build/libdobby." .. so_extname or "build/libdobby.a", package:installdir("lib"))
  55. end)
  56. on_test(function (package)
  57. local check_funcs = {"DobbyGetVersion"}
  58. if package:config("symbol_resolver") then
  59. table.insert(check_funcs, "DobbySymbolResolver")
  60. end
  61. if package:config("import_table_replacer") then
  62. table.insert(check_funcs, "DobbyImportTableReplace")
  63. end
  64. if package:config("android_bionic_linker_utils") then
  65. table.insert(check_funcs, "linker_dlopen")
  66. end
  67. for _, func in ipairs(check_funcs) do
  68. assert(package:has_cxxfuncs(func, {configs = {languages = "c++11"}, includes = "dobby.h"}))
  69. end
  70. end)