fetch.lua 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import("lib.detect.find_path")
  2. import("lib.detect.find_library")
  3. import("detect.sdks.find_cuda")
  4. function _find_package(package, opt)
  5. if package:is_plat("windows") then
  6. local rdir = (package:is_arch("x64") and "x64" or "Win32")
  7. local libname = (package:is_arch("x64") and "nvToolsExt64_1" or "nvToolsExt32_1")
  8. -- init search paths
  9. local paths = {
  10. "$(env NVTOOLSEXT_PATH)",
  11. "$(env PROGRAMFILES)/NVIDIA Corporation/NvToolsExt"
  12. }
  13. -- find library
  14. local result = {links = {}, linkdirs = {}, includedirs = {}, libfiles = {}}
  15. local linkinfo = find_library(libname, paths, {suffixes = path.join("lib", rdir)})
  16. if linkinfo then
  17. local nvtx_dir = path.directory(path.directory(linkinfo.linkdir))
  18. table.insert(result.linkdirs, linkinfo.linkdir)
  19. table.insert(result.links, libname)
  20. table.insert(result.libfiles, path.join(nvtx_dir, "bin", rdir, libname .. ".dll"))
  21. table.insert(result.libfiles, path.join(nvtx_dir, "lib", rdir, libname .. ".lib"))
  22. else
  23. -- not found?
  24. return
  25. end
  26. -- find include
  27. table.insert(result.includedirs, find_path("nvToolsExt.h", paths, {suffixes = "include"}))
  28. return result
  29. else
  30. local cuda = find_cuda()
  31. if cuda then
  32. local result = {links = {}, linkdirs = {}, includedirs = {}}
  33. -- find library
  34. local linkinfo = find_library("nvToolsExt", cuda.linkdirs)
  35. if linkinfo then
  36. table.insert(result.links, "nvToolsExt")
  37. table.insert(result.linkdirs, linkinfo.linkdir)
  38. else
  39. return
  40. end
  41. table.join2(result.includedirs, cuda.includedirs)
  42. return result
  43. end
  44. end
  45. end
  46. function main(package, opt)
  47. if opt.system then
  48. local result = _find_package(package, opt)
  49. if not result then
  50. result = package:find_package("nvtx", opt)
  51. end
  52. return result or false
  53. end
  54. end