-
Notifications
You must be signed in to change notification settings - Fork 579
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
12 changed files
with
1,527 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
name: Build and Test | ||
|
||
on: | ||
push: | ||
branches: [main] | ||
pull_request: | ||
branches: [main] | ||
|
||
jobs: | ||
build: | ||
name: Build sophus_pybind on ${{ matrix.os }} / ${{ matrix.cmakeOptions }} | ||
runs-on: ${{ matrix.os }} | ||
strategy: | ||
matrix: | ||
os: [ubuntu-20.04, macos-10.15] | ||
steps: | ||
- name : Checkout | ||
uses: actions/checkout@v2 | ||
with: | ||
submodules: 'true' | ||
|
||
- name: Install dependencies | ||
shell: bash | ||
run: | | ||
if [ "$RUNNER_OS" == "Linux" ]; then | ||
# Update & upgrade package lists | ||
sudo apt-get update -y | ||
sudo apt-get upgrade | ||
# Deal with Github CI limitation | ||
# https://github.com/actions/runner-images/issues/6399#issuecomment-1285011525 | ||
sudo apt install -y libunwind-dev | ||
# Generic dependencies | ||
sudo apt-get install cmake | ||
# Clean APT cache | ||
sudo apt-get clean | ||
elif [ "$RUNNER_OS" == "macOS" ]; then | ||
# Install system deps with Homebrew | ||
brew install cmake | ||
# VRS dependencies | ||
brew install fmt lz4 zstd xxhash | ||
else | ||
echo "$RUNNER_OS not supported" | ||
exit 1 | ||
fi | ||
- name: Install sophus_pybind | ||
shell: bash | ||
run: | | ||
# Installing Python and dependencies | ||
if [ "$RUNNER_OS" == "Linux" ]; then | ||
sudo apt-get install libpython3-dev python3-pip | ||
sudo pip3 install numpy pytest | ||
elif [ "$RUNNER_OS" == "macOS" ]; then | ||
pip3 install numpy pytest | ||
else | ||
echo "$RUNNER_OS not supported" | ||
exit 1 | ||
fi | ||
# Build and install Python bindings | ||
pip3 install . | ||
- name: Run sophus_pybind tests | ||
shell: bash | ||
run: python3 -m pytest sophus_pybind/tests/sophusPybindTests.py |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
import subprocess | ||
|
||
subprocess.run( | ||
"pybind11-stubgen sophus_pybind -o sophus_pybind-stubs/", | ||
shell=True, | ||
check=True, | ||
) | ||
|
||
subprocess.run("touch sophus_pybind-stubs/py.typed", shell=True, check=True) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,151 @@ | ||
import os | ||
import re | ||
import shutil | ||
import subprocess | ||
import sys | ||
|
||
from setuptools import Extension, find_packages, setup | ||
from setuptools.command.build_ext import build_ext | ||
|
||
ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) | ||
|
||
# Convert distutils Windows platform specifiers to CMake -A arguments | ||
PLAT_TO_CMAKE = { | ||
"win32": "Win32", | ||
"win-amd64": "x64", | ||
"win-arm32": "ARM", | ||
"win-arm64": "ARM64", | ||
} | ||
|
||
# A CMakeExtension needs a sourcedir instead of a file list. | ||
# The name must be the _single_ output extension from the CMake build. | ||
# If you need multiple extensions, see scikit-build. | ||
class CMakeExtension(Extension): | ||
def __init__(self, name, sourcedir=""): | ||
Extension.__init__(self, name, sources=[]) | ||
self.sourcedir = os.path.abspath(sourcedir) | ||
|
||
|
||
class CMakeBuild(build_ext): | ||
def build_extension(self, ext): | ||
extdir = os.path.abspath(os.path.dirname(self.get_ext_fullpath(ext.name))) | ||
|
||
# required for auto-detection & inclusion of auxiliary "native" libs | ||
if not extdir.endswith(os.path.sep): | ||
extdir += os.path.sep | ||
|
||
debug = int(os.environ.get("DEBUG", 0)) if self.debug is None else self.debug | ||
cfg = "Debug" if debug else "Release" | ||
|
||
# CMake lets you override the generator - we need to check this. | ||
# Can be set with Conda-Build, for example. | ||
cmake_generator = os.environ.get("CMAKE_GENERATOR", "") | ||
|
||
cmake_args = [ | ||
"-DBUILD_PYTHON_BINDINGS=ON", | ||
"-DBUILD_SOPHUS_EXAMPLES=OFF", | ||
"-DBUILD_SOPHUS_TESTS=OFF", | ||
] | ||
build_args = [] | ||
# Adding CMake arguments set as environment variable | ||
# (needed e.g. to build for ARM OSx on conda-forge) | ||
if "CMAKE_ARGS" in os.environ: | ||
cmake_args += [item for item in os.environ["CMAKE_ARGS"].split(" ") if item] | ||
|
||
if "PYTHONPATH" in os.environ and "pip-build-env" in os.environ["PYTHONPATH"]: | ||
del os.environ["PYTHONPATH"] | ||
|
||
if self.compiler.compiler_type != "msvc": | ||
# Using Ninja-build since it a) is available as a wheel and b) | ||
# multithreaded automatically. MSVC would require all variables be | ||
# exported for Ninja to pick it up, which is a little tricky to do. | ||
# Users can override the generator with CMAKE_GENERATOR in CMake | ||
# 3.15+. | ||
if not cmake_generator: | ||
try: | ||
import ninja # noqa: F401 | ||
|
||
cmake_args += ["-GNinja"] | ||
except ImportError: | ||
pass | ||
|
||
else: | ||
|
||
# Single config generators are handled "normally" | ||
single_config = any(x in cmake_generator for x in {"NMake", "Ninja"}) | ||
|
||
# CMake allows an arch-in-generator style for backward compatibility | ||
contains_arch = any(x in cmake_generator for x in {"ARM", "Win64"}) | ||
|
||
# Specify the arch if using MSVC generator, but only if it doesn't | ||
# contain a backward-compatibility arch spec already in the | ||
# generator name. | ||
if not single_config and not contains_arch: | ||
cmake_args += ["-A", PLAT_TO_CMAKE[self.plat_name]] | ||
|
||
# Multi-config generators have a different way to specify configs | ||
if not single_config: | ||
cmake_args += [ | ||
f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_{cfg.upper()}={extdir}" | ||
] | ||
build_args += ["--config", cfg] | ||
|
||
if sys.platform.startswith("darwin"): | ||
# Cross-compile support for macOS - respect ARCHFLAGS if set | ||
archs = re.findall(r"-arch (\S+)", os.environ.get("ARCHFLAGS", "")) | ||
if archs: | ||
cmake_args += ["-DCMAKE_OSX_ARCHITECTURES={}".format(";".join(archs))] | ||
|
||
# Set CMAKE_BUILD_PARALLEL_LEVEL to control the parallel build level | ||
# across all generators. | ||
if "CMAKE_BUILD_PARALLEL_LEVEL" not in os.environ: | ||
# self.parallel is a Python 3 only way to set parallel jobs by hand | ||
# using -j in the build_ext call, not supported by pip or PyPA-build. | ||
if hasattr(self, "parallel") and self.parallel: | ||
# CMake 3.12+ only. | ||
build_args += [f"-j{self.parallel}"] | ||
|
||
if not os.path.exists(self.build_temp): | ||
os.makedirs(self.build_temp) | ||
|
||
if not os.path.exists(self.build_lib): | ||
os.makedirs(self.build_lib) | ||
|
||
subprocess.check_call(["cmake", ext.sourcedir] + cmake_args, cwd=self.build_temp) | ||
subprocess.check_call( | ||
["cmake", "--build", "."] + build_args, cwd=self.build_temp | ||
) | ||
|
||
# copy stubs files from sophus_pybind-stubs to lib folder to be installed | ||
subprocess.run( | ||
f"cp sophus_pybind-stubs/*.pyi {self.build_lib}", shell=True, check=True, | ||
) | ||
subprocess.run( | ||
f"cp sophus_pybind-stubs/*.typed {self.build_lib}", shell=True, check=True, | ||
) | ||
# copy .so file to lib | ||
subprocess.run(f"cp {self.build_temp}/*.so {self.build_lib}/", shell=True, check=True,) | ||
|
||
|
||
def main(): | ||
# The information here can also be placed in setup.cfg - better separation of | ||
# logic and declaration, and simpler if you include description/version in a file. | ||
setup( | ||
name="sophus_pybind", | ||
version="1.22.10", | ||
description="Sophus python API", | ||
long_description="Python API for sophus library", | ||
url="https://github.com/strasdat/sophus", | ||
ext_modules=[CMakeExtension("sophus_pybind", sourcedir=ROOT_DIR)], | ||
author="Cheng Peng, David Caruso", | ||
cmdclass={"build_ext": CMakeBuild}, | ||
zip_safe=False, | ||
python_requires=">=3.6", | ||
install_requires=["numpy"], | ||
packages=find_packages(), | ||
license="Apache-2.0", | ||
) | ||
|
||
|
||
if __name__ == "__main__": | ||
main() |
Empty file.
Oops, something went wrong.