Spaces:
Running
on
L4
Running
on
L4
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}, | |
) | |