fix longpaths for libtorch Windows (#357)
* add libtorch * update to 1.8.1 * remove unused package stubs * update for system package * remove git.core.longpaths setting * fix longpaths for libtorch Co-authored-by: xq114 <1140735506@qq.com>pull/358/head
parent
04c58c8b96
commit
7d650ebf29
2 changed files with 156 additions and 0 deletions
@ -0,0 +1,29 @@ |
||||
package("cuda") |
||||
|
||||
set_homepage("https://developer.nvidia.com/cuda-zone/") |
||||
set_description("CUDA® is a parallel computing platform and programming model developed by NVIDIA for general computing on graphical processing units (GPUs).") |
||||
|
||||
add_configs("utils", {description = "enabled cuda utilities.", default = {}, type = "table"}) |
||||
|
||||
on_fetch(function (package, opt) |
||||
if opt.system then |
||||
import("detect.sdks.find_cuda") |
||||
import("lib.detect.find_library") |
||||
|
||||
local cuda = find_cuda() |
||||
if cuda then |
||||
package:addenv("PATH", cuda.bindir) |
||||
local result = {includedirs = cuda.includedirs, linkdirs = cuda.linkdirs, links = {}} |
||||
local utils = package:config("utils") |
||||
table.insert(utils, package:config("shared") and "cudart" or "cudart_static") |
||||
|
||||
for _, util in ipairs(utils) do |
||||
if not find_library(util, cuda.linkdirs) then |
||||
return |
||||
end |
||||
table.insert(result.links, util) |
||||
end |
||||
return result |
||||
end |
||||
end |
||||
end) |
@ -0,0 +1,127 @@ |
||||
package("libtorch") |
||||
|
||||
set_homepage("https://pytorch.org/") |
||||
set_description("An open source machine learning framework that accelerates the path from research prototyping to production deployment.") |
||||
set_license("BSD-3-Clause") |
||||
|
||||
add_urls("https://github.com/pytorch/pytorch.git") |
||||
add_versions("v1.8.0", "37c1f4a7fef115d719104e871d0cf39434aa9d56") |
||||
add_versions("v1.8.1", "56b43f4fec1f76953f15a627694d4bba34588969") |
||||
|
||||
add_configs("python", {description = "Build python interface.", default = false, type = "boolean"}) |
||||
add_configs("ninja", {description = "Use ninja as build tool.", default = false, type = "boolean"}) |
||||
|
||||
add_deps("cmake") |
||||
add_deps("python 3.x", {kind = "binary", system = false}) |
||||
add_deps("libuv") |
||||
add_deps("cuda", {optional = true, configs = {utils = {"nvrtc", "cudnn", "cufft", "curand", "cublas", "cudart_static"}}}) |
||||
add_deps("nvtx", "mkl", {optional = true, system = true}) |
||||
add_includedirs("include") |
||||
add_includedirs("include/torch/csrc/api/include") |
||||
|
||||
-- enable long paths for git submodule on windows |
||||
if is_host("windows") then |
||||
set_policy("platform.longpaths", true) |
||||
end |
||||
|
||||
-- prevent the link to the libraries found automatically |
||||
add_links("") |
||||
|
||||
on_load("windows|x64", "macosx", "linux", function (package) |
||||
if package:config("ninja") then |
||||
package:add("deps", "ninja") |
||||
end |
||||
|
||||
if not package:is_plat("macosx") then |
||||
if not find_package("mkl") then |
||||
package:add("deps", "openblas") |
||||
end |
||||
end |
||||
end) |
||||
|
||||
on_install("windows|x64", "macosx", "linux", function (package) |
||||
import("package.tools.cmake") |
||||
|
||||
-- tackle link flags |
||||
local has_cuda = package:dep("cuda"):exists() and package:dep("nvtx"):exists() |
||||
local libnames = {"torch", "torch_cpu"} |
||||
if has_cuda then |
||||
table.insert(libnames, "torch_cuda") |
||||
end |
||||
table.insert(libnames, "c10") |
||||
if has_cuda then |
||||
table.insert(libnames, "c10_cuda") |
||||
end |
||||
local suffix = "" |
||||
if not package:is_plat("windows") and package:config("shared") then |
||||
package:add("ldflags", "-Wl,-rpath," .. package:installdir("lib")) |
||||
if package:is_plat("linux") then |
||||
suffix = ".so" |
||||
elseif package:is_plat("macosx") then |
||||
suffix = ".dylib" |
||||
end |
||||
for _, lib in ipairs(libnames) do |
||||
package:add("ldflags", (package:is_plat("linux") and "-Wl,--no-as-needed," or "") .. package:installdir("lib", "lib") .. lib .. suffix) |
||||
end |
||||
else |
||||
for _, lib in ipairs(libnames) do |
||||
package:add("links", lib) |
||||
end |
||||
end |
||||
|
||||
-- some patches to the third-party cmake files |
||||
io.replace("cmake/Modules/FindMKL.cmake", "MSVC AND NOT CMAKE_CXX_COMPILER_ID STREQUAL \"Intel\"", "FALSE", {plain = true}) |
||||
io.replace("third_party/fbgemm/CMakeLists.txt", "PRIVATE FBGEMM_STATIC", "PUBLIC FBGEMM_STATIC", {plain = true}) |
||||
io.replace("third_party/protobuf/cmake/install.cmake", "install%(DIRECTORY.-%)", "") |
||||
io.replace("third_party/ideep/mkl-dnn/src/CMakeLists.txt", "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}", "${CMAKE_INSTALL_LIBDIR}", {plain = true}) |
||||
if package:is_plat("windows") then |
||||
io.replace("cmake/Modules/FindOpenBLAS.cmake", "NAMES openblas PATHS", "NAMES libopenblas PATHS", {plain = true}) |
||||
if package:config("vs_runtime"):startswith("MD") then |
||||
io.replace("third_party/fbgemm/CMakeLists.txt", "MT", "MD", {plain = true}) |
||||
end |
||||
end |
||||
|
||||
-- prepare python |
||||
os.vrun("python -m pip install typing_extensions pyyaml") |
||||
local configs = {"-DUSE_MPI=OFF"} |
||||
if package:config("python") then |
||||
table.insert(configs, "-DBUILD_PYTHON=ON") |
||||
os.vrun("python -m pip install numpy") |
||||
else |
||||
table.insert(configs, "-DBUILD_PYTHON=OFF") |
||||
end |
||||
|
||||
-- prepare for installation |
||||
local extracfg = {} |
||||
if package:config("ninja") then |
||||
extracfg.cmake_generator = "Ninja" |
||||
end |
||||
local envs = cmake.buildenvs(package, extracfg) |
||||
if not package:is_plat("macosx") then |
||||
if package:dep("mkl"):exists() then |
||||
table.insert(configs, "-DBLAS=MKL") |
||||
local mkl = package:dep("mkl"):fetch() |
||||
table.insert(configs, "-DINTEL_MKL_DIR=" .. path.directory(mkl.sysincludedirs[1])) |
||||
else |
||||
table.insert(configs, "-DBLAS=OpenBLAS") |
||||
envs.OpenBLAS_HOME = package:dep("openblas"):installdir() |
||||
end |
||||
end |
||||
envs.libuv_ROOT = package:dep("libuv"):installdir() |
||||
table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release")) |
||||
table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF")) |
||||
table.insert(configs, "-DCAFFE2_USE_MSVC_STATIC_RUNTIME=" .. (package:config("vs_runtime"):startswith("MT") and "ON" or "OFF")) |
||||
extracfg.envs = envs |
||||
cmake.install(package, configs, extracfg) |
||||
end) |
||||
|
||||
on_test(function (package) |
||||
assert(package:check_cxxsnippets({test = [[ |
||||
void test() { |
||||
auto a = torch::ones(3); |
||||
auto b = torch::tensor({1, 2, 3}); |
||||
auto c = torch::dot(a, b); |
||||
} |
||||
]]}, {configs = {languages = "c++14"}, includes = "torch/torch.h"})) |
||||
end) |
||||
|
Loading…
Reference in new issue