xmake.lua 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package("flann")
  2. set_homepage("https://github.com/flann-lib/flann/")
  3. set_description("Fast Library for Approximate Nearest Neighbors")
  4. set_license("BSD-3-Clause")
  5. add_urls("https://github.com/flann-lib/flann/archive/refs/tags/$(version).tar.gz",
  6. "https://github.com/flann-lib/flann.git")
  7. add_versions("1.9.1", "b23b5f4e71139faa3bcb39e6bbcc76967fbaf308c4ee9d4f5bfbeceaa76cc5d3")
  8. add_versions("1.9.2", "e26829bb0017f317d9cc45ab83ddcb8b16d75ada1ae07157006c1e7d601c8824")
  9. add_patches("1.9.1", path.join(os.scriptdir(), "patches", "1.9.1", "cuda10.patch"), "087492b422362f42c83b320296d9af7b22023cf20d81ea7bd99efabd1535f7d6")
  10. add_configs("with_cuda", {description = "Enable cuda build.", default = false, type = "boolean"})
  11. add_deps("cmake", "lz4")
  12. on_load(function (package)
  13. if package:is_plat("windows", "mingw") and not package:config("shared") then
  14. package:add("defines", "FLANN_STATIC")
  15. end
  16. if package:config("with_cuda") then
  17. package:add("deps", "cuda", {system = true})
  18. package:add("defines", "FLANN_USE_CUDA")
  19. end
  20. local suffix = package:config("shared") and "" or "_s"
  21. local libs = package:config("with_cuda") and {"flann"} or {"flann", "flann_cuda"}
  22. for _, lib in ipairs(libs) do
  23. package:add("links", lib .. suffix)
  24. end
  25. end)
  26. on_install(function (package)
  27. os.cd("src/cpp")
  28. io.replace("flann/util/serialization.h", "flann/ext/lz4", "lz4", {plain = true})
  29. io.replace("flann/defines.h", "#ifdef WIN32", "#ifdef _WIN32", {plain = true})
  30. io.writefile("xmake.lua", format([[
  31. add_rules("mode.debug", "mode.release")
  32. add_requires("lz4")
  33. if is_plat("windows", "mingw") then
  34. if is_kind("static") then
  35. add_defines("FLANN_STATIC")
  36. elseif is_kind("shared") then
  37. add_defines("FLANN_EXPORTS")
  38. end
  39. add_cxxflags("/bigobj", {tools = {"clang_cl", "cl"}})
  40. end
  41. if is_kind("static") then
  42. set_suffixname("_s")
  43. end
  44. target("flann")
  45. set_kind("$(kind)")
  46. add_rules("utils.install.cmake_importfiles")
  47. add_files("flann/flann.cpp")
  48. add_includedirs(".")
  49. add_includedirs("flann")
  50. add_packages("lz4")
  51. add_languages("cxx14")
  52. add_headerfiles("(flann/config.h)", "(flann/defines.h)", "(flann/flann.h)")
  53. add_headerfiles("(flann/flann.hpp)", "(flann/general.h)", "(flann/algorithms/*.h)", "(flann/io/*.h)", "(flann/nn/*.h)", "(flann/util/*.h)")
  54. target("flann_cuda")
  55. set_enabled(%s)
  56. set_kind("$(kind)")
  57. add_rules("utils.install.cmake_importfiles")
  58. add_files("flann/algorithms/*.cu")
  59. add_defines("FLANN_USE_CUDA")
  60. add_includedirs(".")
  61. add_includedirs("flann")
  62. add_packages("lz4")
  63. add_languages("cxx14")
  64. ]], package:config("with_cuda") and "true" or "false"))
  65. import("package.tools.xmake").install(package)
  66. end)
  67. on_test(function (package)
  68. assert(package:has_cfuncs("flann_find_nearest_neighbors_index", {languages = "cxx14", includes = "flann/flann.h"}))
  69. end)