mirror of https://github.com/llvm/torch-mlir
Move python native library to python_native/_npcomp...so.
This allows binary and source packages to exist at different physical paths.pull/1/head
parent
680e11ae62
commit
3611958b11
|
@ -48,5 +48,6 @@ message(STATUS "Found pybind11 v${pybind11_VERSION}: ${pybind11_INCLUDE_DIRS}")
|
|||
add_subdirectory(include/npcomp)
|
||||
add_subdirectory(lib)
|
||||
add_subdirectory(python)
|
||||
add_subdirectory(python_native)
|
||||
add_subdirectory(tools)
|
||||
add_subdirectory(test)
|
||||
|
|
37
README.md
37
README.md
|
@ -38,31 +38,26 @@ ninja check-npcomp-opt
|
|||
./python/run_tests.py
|
||||
```
|
||||
|
||||
## Interactive Use
|
||||
|
||||
The cmake configuration populates symlinks in the `build/python` directory
|
||||
mirroring the source layout. This allows edit-run without rebuilding (unless
|
||||
if files are added/removed).
|
||||
|
||||
Configuring the `PYTHONPATH` should be sufficient to run any interactive
|
||||
tooling (`python3`, Jupyter/Colab, etc).
|
||||
|
||||
```shell
|
||||
export PYTHONPATH="$(realpath build/python):$(realpath build/python_native)"
|
||||
```
|
||||
|
||||
The `run_tests.py` script is special in that it sets up the PYTHONPATH
|
||||
correctly when run.
|
||||
|
||||
### Things to look at:
|
||||
|
||||
* `python/npcomp/tracing/mlir_trace_test.py` : Simple test case of tracing a function to an MLIR module.
|
||||
|
||||
### Installing pybind11
|
||||
|
||||
The native extension relies on pybind11. In a perfect world, this could just
|
||||
be installed with your system package manager. However, at least on
|
||||
some tested versions of Ubuntu, the system package installed with broken cmake
|
||||
files.
|
||||
|
||||
If this happens, you must install pybind11 from source.
|
||||
|
||||
### Building the python native library
|
||||
|
||||
```shell
|
||||
# From the build directory
|
||||
ninja NPCOMPNativePyExt
|
||||
ninja check-npcomp
|
||||
python3 ./python/run_tests.py
|
||||
|
||||
# Setup PYTHONPATH for interactive use.
|
||||
export PYTHONPATH=$(pwd)/tools/npcomp/python
|
||||
```
|
||||
|
||||
Notes:
|
||||
|
||||
* Python sources are symlinked to the output directory at configure time.
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
add_subdirectory(npcomp)
|
||||
|
||||
################################################################################
|
||||
# Manage python source files
|
||||
################################################################################
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
# See https://llvm.org/LICENSE.txt for license information.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
|
||||
from ..native.dialect import BasicpyDialectHelper as _BaseDialectHelper
|
||||
from ..native.mlir import ir
|
||||
from _npcomp.dialect import BasicpyDialectHelper as _BaseDialectHelper
|
||||
from _npcomp.mlir import ir
|
||||
|
||||
__all__ = [
|
||||
"DialectHelper",
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
|
||||
from npcomp.dialect import Basicpy
|
||||
from npcomp.native.mlir import ir
|
||||
from _npcomp.mlir import ir
|
||||
|
||||
__all__ = [
|
||||
"load_builtin_module",
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
"""Test for the MLIR IR Python bindings"""
|
||||
|
||||
from npcomp.native.mlir import ir
|
||||
from _npcomp.mlir import ir
|
||||
from npcomp.utils import test_utils
|
||||
|
||||
test_utils.start_filecheck_test()
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
from . import native
|
||||
print(native.__doc__)
|
||||
import _npcomp
|
||||
print(_npcomp.__doc__)
|
||||
|
|
|
@ -6,9 +6,9 @@ import re
|
|||
from typing import Iterable
|
||||
import numpy as np
|
||||
|
||||
from ..dialect import Numpy
|
||||
from ..native.mlir import ir
|
||||
from _npcomp.mlir import ir
|
||||
|
||||
from ..dialect import Numpy
|
||||
from .context import *
|
||||
from .emitters import *
|
||||
from ..exporter import *
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
{
|
||||
global: PyInit_native;
|
||||
local: *;
|
||||
};
|
|
@ -17,8 +17,14 @@ TEST_MODULES = (
|
|||
)
|
||||
|
||||
# Compute PYTHONPATH for sub processes.
|
||||
DIRSEP = ":" if os.path.sep == "/" else ";"
|
||||
PYTHONPATH = os.path.abspath(os.path.dirname(__file__))
|
||||
DIRSEP = os.path.pathsep
|
||||
LOCAL_PYTHONPATH_COMPONENTS = [
|
||||
# This directory.
|
||||
os.path.abspath(os.path.dirname(__file__)),
|
||||
# The parallel python_native directory (assuming in the build tree).
|
||||
os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "python_native"))
|
||||
]
|
||||
PYTHONPATH = DIRSEP.join(LOCAL_PYTHONPATH_COMPONENTS)
|
||||
if "PYTHONPATH" in os.environ:
|
||||
PYTHONPATH = PYTHONPATH + DIRSEP + os.environ["PYTHONPATH"]
|
||||
CHILD_ENVIRON = dict(os.environ)
|
||||
|
|
|
@ -25,11 +25,11 @@ set(NPCOMP_PYEXT_LIBADD ${PYTHON_LIBRARIES})
|
|||
# compiled separately for now.
|
||||
set(extension_target NPCOMPNativePyExt)
|
||||
set(extension_pybind_sources
|
||||
native.cpp
|
||||
mlir_init.cpp
|
||||
mlir_ir.cpp
|
||||
npcomp_dialect.cpp
|
||||
pybind_utils.cpp
|
||||
MlirInit.cpp
|
||||
MlirIr.cpp
|
||||
NpcompDialect.cpp
|
||||
NpcompModule.cpp
|
||||
PybindUtils.cpp
|
||||
)
|
||||
set_source_files_properties(
|
||||
${extension_pybind_sources}
|
||||
|
@ -41,7 +41,7 @@ add_library(${extension_target} ${NPCOMP_PYEXT_LINK_MODE}
|
|||
|
||||
set_target_properties(${extension_target} PROPERTIES LIBRARY_OUTPUT_DIRECTORY
|
||||
"${CMAKE_CURRENT_BINARY_DIR}")
|
||||
set_target_properties(${extension_target} PROPERTIES OUTPUT_NAME native)
|
||||
set_target_properties(${extension_target} PROPERTIES OUTPUT_NAME _npcomp)
|
||||
set_target_properties(${extension_target} PROPERTIES PREFIX
|
||||
"${PYTHON_MODULE_PREFIX}")
|
||||
set_target_properties(${extension_target} PROPERTIES SUFFIX
|
|
@ -1,4 +1,4 @@
|
|||
//===- mlir_init.cpp ------------------------------------------------------===//
|
||||
//===- MlirInit.cpp -------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
|
@ -1,4 +1,4 @@
|
|||
//===- mlir_ir.cpp - MLIR IR Bindings -------------------------------------===//
|
||||
//===- MlirIr.cpp - MLIR IR Bindings --------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
|
@ -6,8 +6,8 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "mlir_ir.h"
|
||||
#include "native.h"
|
||||
#include "MlirIr.h"
|
||||
#include "NpcompModule.h"
|
||||
|
||||
#include "mlir/Dialect/StandardOps/IR/Ops.h"
|
||||
#include "mlir/IR/Attributes.h"
|
|
@ -1,4 +1,4 @@
|
|||
//===- mlir_ir.h - MLIR IR Bindings -------------------------------------===//
|
||||
//===- MlirIr.h - MLIR IR Bindings ----------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
|
@ -6,10 +6,10 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef NPCOMP_PYTHON_MLIR_IR_H
|
||||
#define NPCOMP_PYTHON_MLIR_IR_H
|
||||
#ifndef NPCOMP_PYTHON_NATIVE_MLIR_IR_H
|
||||
#define NPCOMP_PYTHON_NATIVE_MLIR_IR_H
|
||||
|
||||
#include "pybind_utils.h"
|
||||
#include "PybindUtils.h"
|
||||
|
||||
#include "mlir/IR/Block.h"
|
||||
#include "mlir/IR/Builders.h"
|
||||
|
@ -174,4 +174,4 @@ protected:
|
|||
|
||||
} // namespace mlir
|
||||
|
||||
#endif // NPCOMP_PYTHON_MLIR_IR_H
|
||||
#endif // NPCOMP_PYTHON_NATIVE_MLIR_IR_H
|
|
@ -1,4 +1,4 @@
|
|||
//===- npcomp_dialect.cpp - Custom dialect classes ------------------------===//
|
||||
//===- NpcompDialect.cpp - Custom dialect classes -------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
|
@ -6,8 +6,8 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "mlir_ir.h"
|
||||
#include "native.h"
|
||||
#include "MlirIr.h"
|
||||
#include "NpcompModule.h"
|
||||
|
||||
#include "npcomp/Dialect/Basicpy/BasicpyDialect.h"
|
||||
#include "npcomp/Dialect/Basicpy/BasicpyOps.h"
|
|
@ -9,8 +9,8 @@
|
|||
#include <cstddef>
|
||||
#include <unordered_map>
|
||||
|
||||
#include "native.h"
|
||||
#include "pybind_utils.h"
|
||||
#include "NpcompModule.h"
|
||||
#include "PybindUtils.h"
|
||||
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
|
||||
|
@ -48,7 +48,7 @@ void defineLLVMModule(pybind11::module m) {
|
|||
py::arg("name"));
|
||||
}
|
||||
|
||||
PYBIND11_MODULE(native, m) {
|
||||
PYBIND11_MODULE(_npcomp, m) {
|
||||
// Guard the once init to happen once per process (vs module, which in
|
||||
// mondo builds can happen multiple times).
|
||||
static bool llvm_init_baton = ([]() { return npcompMlirInitialize(); })();
|
|
@ -1,4 +1,4 @@
|
|||
//===- dialect.h - Module registrations -----------------------------------===//
|
||||
//===- NpcompModule.h - Module registrations ------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
|
@ -6,10 +6,10 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef NPCOMP_PYTHON_NATIVE_H
|
||||
#define NPCOMP_PYTHON_NATIVE_H
|
||||
#ifndef NPCOMP_PYTHON_NATIVE_NPCOMP_MODULE_H
|
||||
#define NPCOMP_PYTHON_NATIVE_NPCOMP_MODULE_H
|
||||
|
||||
#include "pybind_utils.h"
|
||||
#include "PybindUtils.h"
|
||||
|
||||
namespace mlir {
|
||||
void defineMlirIrModule(py::module m);
|
||||
|
@ -24,4 +24,4 @@ void defineNpcompDialect(py::module m);
|
|||
} // namespace npcomp
|
||||
} // namespace mlir
|
||||
|
||||
#endif // NPCOMP_PYTHON_NATIVE_H
|
||||
#endif // NPCOMP_PYTHON_NATIVE_NPCOMP_MODULE_H
|
|
@ -1,4 +1,4 @@
|
|||
//===- pybind_utils.cpp - Utilities for interop with python ---------------===//
|
||||
//===- PybindUtils.cpp - Utilities for interop with python ----------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
|
@ -6,7 +6,7 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "pybind_utils.h"
|
||||
#include "PybindUtils.h"
|
||||
|
||||
namespace pybind11 {
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
//===- pybind_utils.h - Utilities for interop with python -----------------===//
|
||||
//===- PybindUtils.h - Utilities for interop with python ------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
|
@ -6,8 +6,8 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef NPCOMP_PYTHON_PYBIND_UTILS_H
|
||||
#define NPCOMP_PYTHON_PYBIND_UTILS_H
|
||||
#ifndef NPCOMP_PYTHON_NATIVE_PYBIND_UTILS_H
|
||||
#define NPCOMP_PYTHON_NATIVE_PYBIND_UTILS_H
|
||||
|
||||
#include <string>
|
||||
|
||||
|
@ -52,4 +52,4 @@ inline pybind11::error_already_set raiseValueError(const std::string &message) {
|
|||
|
||||
} // namespace pybind11
|
||||
|
||||
#endif // NPCOMP_PYTHON_PYBIND_UTILS_H
|
||||
#endif // NPCOMP_PYTHON_NATIVE_PYBIND_UTILS_H
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
global: PyInit__npcomp;
|
||||
local: *;
|
||||
};
|
Loading…
Reference in New Issue