|
import glob |
|
import os |
|
import platform |
|
|
|
import torch |
|
from setuptools import find_packages, setup |
|
from torch.utils.cpp_extension import ( |
|
CUDA_HOME, |
|
BuildExtension, |
|
CppExtension, |
|
CUDAExtension, |
|
) |
|
|
|
library_name = "texture_baker" |
|
|
|
|
|
def get_extensions(): |
|
debug_mode = os.getenv("DEBUG", "0") == "1" |
|
use_cuda = os.getenv("USE_CUDA", "1" if torch.cuda.is_available() else "0") == "1" |
|
use_metal = ( |
|
os.getenv("USE_METAL", "1" if torch.backends.mps.is_available() else "0") == "1" |
|
) |
|
use_native_arch = os.getenv("USE_NATIVE_ARCH", "1") == "1" |
|
if debug_mode: |
|
print("Compiling in debug mode") |
|
|
|
use_cuda = use_cuda and CUDA_HOME is not None |
|
extension = CUDAExtension if use_cuda else CppExtension |
|
|
|
extra_link_args = [] |
|
extra_compile_args = { |
|
"cxx": [ |
|
"-O3" if not debug_mode else "-O0", |
|
"-fdiagnostics-color=always", |
|
"-fopenmp", |
|
] |
|
+ ["-march=native"] |
|
if use_native_arch |
|
else [], |
|
"nvcc": [ |
|
"-O3" if not debug_mode else "-O0", |
|
], |
|
} |
|
if debug_mode: |
|
extra_compile_args["cxx"].append("-g") |
|
if platform.system() == "Windows": |
|
extra_compile_args["cxx"].append("/Z7") |
|
extra_compile_args["cxx"].append("/Od") |
|
extra_link_args.extend(["/DEBUG"]) |
|
extra_compile_args["cxx"].append("-UNDEBUG") |
|
extra_compile_args["nvcc"].append("-UNDEBUG") |
|
extra_compile_args["nvcc"].append("-g") |
|
extra_link_args.extend(["-O0", "-g"]) |
|
|
|
define_macros = [] |
|
extensions = [] |
|
libraries = [] |
|
|
|
this_dir = os.path.dirname(os.path.curdir) |
|
sources = glob.glob( |
|
os.path.join(this_dir, library_name, "csrc", "**", "*.cpp"), recursive=True |
|
) |
|
|
|
if len(sources) == 0: |
|
print("No source files found for extension, skipping extension compilation") |
|
return None |
|
|
|
if use_cuda: |
|
define_macros += [ |
|
("THRUST_IGNORE_CUB_VERSION_CHECK", None), |
|
] |
|
sources += glob.glob( |
|
os.path.join(this_dir, library_name, "csrc", "**", "*.cu"), recursive=True |
|
) |
|
libraries += ["cudart", "c10_cuda"] |
|
|
|
if use_metal: |
|
define_macros += [ |
|
("WITH_MPS", None), |
|
] |
|
sources += glob.glob( |
|
os.path.join(this_dir, library_name, "csrc", "**", "*.mm"), recursive=True |
|
) |
|
extra_compile_args.update({"cxx": ["-O3", "-arch", "arm64"]}) |
|
extra_link_args += ["-arch", "arm64"] |
|
|
|
extensions.append( |
|
extension( |
|
name=f"{library_name}._C", |
|
sources=sources, |
|
define_macros=define_macros, |
|
extra_compile_args=extra_compile_args, |
|
extra_link_args=extra_link_args, |
|
libraries=libraries |
|
+ [ |
|
"c10", |
|
"torch", |
|
"torch_cpu", |
|
"torch_python", |
|
], |
|
) |
|
) |
|
|
|
for ext in extensions: |
|
ext.libraries = ["cudart_static" if x == "cudart" else x for x in ext.libraries] |
|
|
|
print(extensions) |
|
|
|
return extensions |
|
|
|
|
|
setup( |
|
name=library_name, |
|
version="0.0.1", |
|
packages=find_packages(where="."), |
|
package_dir={"": "."}, |
|
ext_modules=get_extensions(), |
|
install_requires=[], |
|
package_data={ |
|
library_name: [os.path.join("csrc", "*.h"), os.path.join("csrc", "*.metal")], |
|
}, |
|
description="Small texture baker which rasterizes barycentric coordinates to a tensor.", |
|
long_description=open("README.md").read(), |
|
long_description_content_type="text/markdown", |
|
url="https://github.com/Stability-AI/texture_baker", |
|
cmdclass={"build_ext": BuildExtension}, |
|
) |
|
|