The target `build` creates a build directory with the same name and initializes through an invocation of CMake. Regardless of the success or failure of the CMake invocation, all subsequent invocations of the target do not invoke CMake anymore, as the target's prerequisites are satisfied through the existence of the build directory created upon the first invocation. This patch changes the dependencies to the build directory with an intermediate target that depends on a stamp file that is only created when the first CMake invocation in the build directory succeeds.
Homomorphizer
The homomorphizer is a compiler that takes a high level computation model and produces a programs that evaluate the model in an homomorphic way.
Build the Python Package
Currently supported platforms:
- Linux x86_64 for python 3.8, 3.9, and 3.10
Linux
We use the manylinux docker images for building python packages for Linux. Those packages should work on distributions that have GLIBC >= 2.24.
You can use Make to build the python wheels using these docker images:
$ cd compiler
$ make package_py38 # package_py39 package_py310
This will build the image for the appropriate python version then copy the wheels out under /wheels
Build wheels in your environment
Temporary MLIR issue
Due to an issue with MLIR, you will need to manually add __init__.py files to the mlir python package after the build.
$ make python-bindings
$ touch build/tools/zamalang/python_packages/zamalang_core/mlir/__init__.py
$ touch build/tools/zamalang/python_packages/zamalang_core/mlir/dialects/__init__.py
Build wheel
Building the wheels is actually simple.
$ pip wheel --no-deps -w ../wheels .
Depending on the platform you are using (specially Linux), you might need to use auditwheel to specify the platform this wheel is targeting. For example, in our build of the package for Linux x86_64 and GLIBC 2.24, we also run:
$ auditwheel repair ../wheels/*.whl --plat manylinux_2_24_x86_64 -w ../wheels