xmake.lua 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. -- Usage
  2. --[[
  3. add_requires("nanobind")
  4. set_languages("c++17")
  5. target("my_ext")
  6. add_rules("python.library")
  7. add_files("src/*.cpp")
  8. add_packages("nanobind")
  9. on_run(function (target)
  10. import("private.action.run.runenvs")
  11. import("lib.detect.find_tool")
  12. local rundir = target:rundir()
  13. local addenvs, setenvs = runenvs.make(target)
  14. local args = {"-c", "\"import my_ext; print(my_ext.add(1, 2))\""}
  15. local python = find_tool("python3", {envs = addenvs})
  16. os.execv(python.program, args, {curdir = rundir, addenvs = addenvs, setenvs = setenvs})
  17. end)
  18. --]]
  19. -- https://github.com/wjakob/nanobind/blob/master/cmake/nanobind-config.cmake
  20. -- https://github.com/mesonbuild/wrapdb/blob/master/subprojects/packagefiles/nanobind/meson.build
  21. add_rules("mode.debug", "mode.release")
  22. add_requires("robin-map", "python >=3.8")
  23. set_languages("c++17")
  24. target("nanobind")
  25. set_kind("$(kind)")
  26. add_files("src/*.cpp|nb_combined.cpp")
  27. add_includedirs("include", {public = true})
  28. add_packages("robin-map", "python")
  29. if is_mode("release") then
  30. add_defines("NB_COMPACT_ASSERTIONS")
  31. end
  32. if is_kind("shared") then
  33. add_defines("NB_BUILD")
  34. add_defines("NB_SHARED", {public = true})
  35. if is_plat("macosx") then
  36. add_shflags("-Wl,-dead_strip", "-Wl,x", "-Wl,-S", "-Wl,@cmake/darwin-ld-cpython.sym", {public = true})
  37. elseif not is_plat("windows") then
  38. add_shflags("-Wl,-s", {public = true})
  39. end
  40. end
  41. add_headerfiles("include/(nanobind/**.h)")
  42. add_installfiles("(cmake/*)")
  43. add_installfiles("*.py", {prefixdir = "python"})