|
import glob
|
|
import os
|
|
|
|
import torch
|
|
from setuptools import find_packages, setup
|
|
from torch.utils.cpp_extension import (
|
|
BuildExtension,
|
|
CppExtension,
|
|
)
|
|
|
|
library_name = "uv_unwrapper"
|
|
|
|
|
|
def get_extensions():
|
|
debug_mode = os.getenv("DEBUG", "0") == "1"
|
|
if debug_mode:
|
|
print("Compiling in debug mode")
|
|
|
|
is_mac = True if torch.backends.mps.is_available() else False
|
|
use_native_arch = not is_mac and os.getenv("USE_NATIVE_ARCH", "1") == "1"
|
|
extension = CppExtension
|
|
|
|
extra_link_args = []
|
|
extra_compile_args = {
|
|
"cxx": [
|
|
"-O3" if not debug_mode else "-O0",
|
|
"-fdiagnostics-color=always",
|
|
("-Xclang " if is_mac else "") + "-fopenmp",
|
|
]
|
|
+ ["-march=native"]
|
|
if use_native_arch
|
|
else [],
|
|
}
|
|
if debug_mode:
|
|
extra_compile_args["cxx"].append("-g")
|
|
extra_compile_args["cxx"].append("-UNDEBUG")
|
|
extra_link_args.extend(["-O0", "-g"])
|
|
|
|
define_macros = []
|
|
extensions = []
|
|
|
|
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
|
|
|
|
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=["c10", "torch", "torch_cpu", "torch_python"] + ["omp"]
|
|
if is_mac
|
|
else [],
|
|
)
|
|
)
|
|
|
|
print(extensions)
|
|
|
|
return extensions
|
|
|
|
|
|
setup(
|
|
name=library_name,
|
|
version="0.0.1",
|
|
packages=find_packages(),
|
|
ext_modules=get_extensions(),
|
|
install_requires=[],
|
|
description="Box projection based UV unwrapper",
|
|
long_description=open("README.md").read(),
|
|
long_description_content_type="text/markdown",
|
|
cmdclass={"build_ext": BuildExtension},
|
|
)
|
|
|