| import os |
| import sys |
| import glob |
| |
| source_files = set(['.py', '.cpp', '.h']) |
| |
| |
| def all_generator_source(): |
| r = [] |
| for directory, _, filenames in os.walk('tools'): |
| for f in filenames: |
| if os.path.splitext(f)[1] in source_files: |
| full = os.path.join(directory, f) |
| r.append(full) |
| return sorted(r) |
| |
| |
| inputs = [ |
| 'torch/csrc/generic/TensorMethods.cwrap', |
| 'torch/lib/tmp_install/share/ATen/Declarations.yaml', |
| 'tools/autograd/derivatives.yaml', |
| ] + glob.glob('torch/csrc/generic/methods/*.cwrap') |
| |
| outputs = [ |
| 'torch/csrc/autograd/generated/Functions.cpp', |
| 'torch/csrc/autograd/generated/Functions.h', |
| 'torch/csrc/autograd/generated/python_functions.cpp', |
| 'torch/csrc/autograd/generated/python_functions.h', |
| 'torch/csrc/autograd/generated/python_nn_functions.cpp', |
| 'torch/csrc/autograd/generated/python_nn_functions.h', |
| 'torch/csrc/autograd/generated/python_nn_functions_dispatch.h', |
| 'torch/csrc/autograd/generated/python_variable_methods.cpp', |
| 'torch/csrc/autograd/generated/python_variable_methods_dispatch.h', |
| 'torch/csrc/autograd/generated/VariableType.cpp', |
| 'torch/csrc/autograd/generated/VariableType.h', |
| 'torch/csrc/jit/generated/aten_dispatch.cpp', |
| 'torch/csrc/jit/generated/aten_dispatch.h', |
| ] |
| |
| |
| def generate_code_ninja(w): |
| all_inputs = all_generator_source() + inputs |
| cmd = "{} {}".format(sys.executable, 'tools/setup_helpers/generate_code.py') |
| w.writer.build( |
| outputs, 'do_cmd', all_inputs, |
| variables={ |
| 'cmd': cmd, |
| }) |
| |
| |
| def generate_code(ninja_global=None): |
| # if ninja is enabled, we just register this file as something |
| # ninja will need to call if needed |
| if ninja_global is not None: |
| return generate_code_ninja(ninja_global) |
| |
| # cwrap depends on pyyaml, so we can't import it earlier |
| root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
| sys.path.append(root) |
| from tools.cwrap import cwrap |
| from tools.cwrap.plugins.THPPlugin import THPPlugin |
| from tools.cwrap.plugins.ArgcountSortPlugin import ArgcountSortPlugin |
| from tools.cwrap.plugins.AutoGPU import AutoGPU |
| from tools.cwrap.plugins.BoolOption import BoolOption |
| from tools.cwrap.plugins.KwargsPlugin import KwargsPlugin |
| from tools.cwrap.plugins.NullableArguments import NullableArguments |
| |
| from tools.cwrap.plugins.WrapDim import WrapDim |
| from tools.cwrap.plugins.AssertNDim import AssertNDim |
| |
| from tools.cwrap.plugins.Broadcast import Broadcast |
| from tools.cwrap.plugins.ProcessorSpecificPlugin import ProcessorSpecificPlugin |
| from tools.autograd.gen_variable_type import gen_variable_type |
| from tools.jit.gen_jit_dispatch import gen_jit_dispatch |
| thp_plugin = THPPlugin() |
| |
| cwrap('torch/csrc/generic/TensorMethods.cwrap', plugins=[ |
| ProcessorSpecificPlugin(), BoolOption(), thp_plugin, |
| AutoGPU(condition='IS_CUDA'), ArgcountSortPlugin(), KwargsPlugin(), |
| AssertNDim(), WrapDim(), Broadcast() |
| ]) |
| # Build ATen based Variable classes |
| autograd_gen_dir = 'torch/csrc/autograd/generated' |
| jit_gen_dir = 'torch/csrc/jit/generated' |
| for d in (autograd_gen_dir, jit_gen_dir): |
| if not os.path.exists(d): |
| os.mkdir(d) |
| gen_variable_type( |
| 'torch/lib/tmp_install/share/ATen/Declarations.yaml', |
| autograd_gen_dir) |
| gen_jit_dispatch( |
| 'torch/lib/tmp_install/share/ATen/Declarations.yaml', |
| jit_gen_dir) |
| |
| # called from ninja |
| if __name__ == "__main__": |
| generate_code(None) |