mirror of
https://gitee.com/fantix/kloop.git
synced 2024-11-21 09:51:00 +00:00
Fix setup.py build and clean
This commit is contained in:
parent
665647013b
commit
081a2877b8
4 changed files with 130 additions and 58 deletions
16
Makefile
16
Makefile
|
@ -1,15 +1,23 @@
|
||||||
.PHONY: build dev clean
|
.PHONY: dist dev build clean
|
||||||
.DEFAULT_GOAL := dev
|
.DEFAULT_GOAL := dev
|
||||||
|
|
||||||
|
|
||||||
build:
|
# Make distribution tarballs
|
||||||
|
dist:
|
||||||
pip install -U build
|
pip install -U build
|
||||||
python -m build
|
python -m build
|
||||||
|
|
||||||
|
|
||||||
|
# Incrementally build for development
|
||||||
dev:
|
dev:
|
||||||
pip install -Ue .
|
KLOOP_DEBUG=1 python setup.py develop
|
||||||
|
|
||||||
|
|
||||||
|
# Always build for development
|
||||||
|
build:
|
||||||
|
KLOOP_FORCE=1 KLOOP_DEBUG=1 python setup.py develop
|
||||||
|
|
||||||
|
|
||||||
|
# Clean up everything including the Rust build cache
|
||||||
clean:
|
clean:
|
||||||
git clean -Xfd -e "!/*.code-workspace" -e "!/*.vscode" -e "!/*.idea" -e "!/*.python-version"
|
python setup.py clean --all
|
||||||
|
|
|
@ -68,5 +68,6 @@ sudo apt install gcc libssl-dev python3-dev python3.10-venv
|
||||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||||||
python3 -m venv path/to/env
|
python3 -m venv path/to/env
|
||||||
source path/to/env/bin/activate
|
source path/to/env/bin/activate
|
||||||
pip install -e path/to/kloop
|
pip install cython
|
||||||
|
KLOOP_DEBUG=1 python setup.py develop # or just run `make`
|
||||||
```
|
```
|
||||||
|
|
|
@ -62,5 +62,6 @@ sudo apt install gcc libssl-dev python3-dev python3.10-venv
|
||||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||||||
python3 -m venv path/to/env
|
python3 -m venv path/to/env
|
||||||
source path/to/env/bin/activate
|
source path/to/env/bin/activate
|
||||||
pip install -e path/to/kloop
|
pip install cython
|
||||||
|
KLOOP_DEBUG=1 python setup.py develop # 或者直接执行 `make`
|
||||||
```
|
```
|
||||||
|
|
166
setup.py
166
setup.py
|
@ -9,74 +9,136 @@
|
||||||
# See the Mulan PSL v2 for more details.
|
# See the Mulan PSL v2 for more details.
|
||||||
|
|
||||||
|
|
||||||
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
import sysconfig
|
import sysconfig
|
||||||
|
|
||||||
from setuptools import setup
|
from setuptools import setup
|
||||||
|
|
||||||
from Cython.Build import cythonize
|
from Cython.Build import cythonize
|
||||||
from Cython.Distutils import Extension
|
|
||||||
from Cython.Distutils import build_ext
|
from Cython.Distutils import build_ext
|
||||||
|
from Cython.Distutils import Extension
|
||||||
|
from distutils import dir_util
|
||||||
DEBUG = True
|
from distutils import log
|
||||||
RESOLVER_LIB = (
|
from distutils.command.clean import clean
|
||||||
f"resolver/target/{'debug' if DEBUG else 'release'}/libkloop_resolver.a"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class build_ext_with_resolver(build_ext):
|
class build_ext_with_resolver(build_ext):
|
||||||
def run(self):
|
def finalize_options(self):
|
||||||
subprocess.check_call(
|
self.set_undefined_options(
|
||||||
["cargo", "build"] + [] if DEBUG else ["-r"],
|
"build",
|
||||||
cwd="resolver",
|
("debug", "debug"),
|
||||||
|
("force", "force"),
|
||||||
)
|
)
|
||||||
|
if self.debug is None:
|
||||||
|
self.debug = os.getenv("KLOOP_DEBUG", "0") == "1"
|
||||||
|
if self.force is None:
|
||||||
|
self.force = os.getenv("KLOOP_FORCE", "0") == "1"
|
||||||
|
|
||||||
|
for ext in self.distribution.ext_modules:
|
||||||
|
if self.debug:
|
||||||
|
if "-O0" not in ext.extra_compile_args:
|
||||||
|
ext.extra_compile_args.append("-O0")
|
||||||
|
if ext.name == "kloop.loop":
|
||||||
|
resolver = (
|
||||||
|
f"resolver/target/{'debug' if self.debug else 'release'}"
|
||||||
|
f"/libkloop_resolver.a"
|
||||||
|
)
|
||||||
|
if resolver not in ext.extra_link_args:
|
||||||
|
ext.extra_link_args.append(resolver)
|
||||||
|
if resolver not in ext.depends:
|
||||||
|
ext.depends.append(resolver)
|
||||||
|
|
||||||
|
self.distribution.ext_modules = cythonize(
|
||||||
|
self.distribution.ext_modules, language_level="3",
|
||||||
|
)
|
||||||
|
|
||||||
|
super().finalize_options()
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
if self.force:
|
||||||
|
cmd = ["cargo", "clean", "-p", "resolver"]
|
||||||
|
if not self.debug:
|
||||||
|
cmd.append("-r")
|
||||||
|
self.announce(f"Running: {cmd}", log.INFO)
|
||||||
|
subprocess.check_call(cmd, cwd="resolver")
|
||||||
|
|
||||||
|
cmd = ["cargo", "build"]
|
||||||
|
if not self.debug:
|
||||||
|
cmd.append("-r")
|
||||||
|
self.announce(f"Running: {cmd}", log.INFO)
|
||||||
|
subprocess.check_call(cmd, cwd="resolver")
|
||||||
super().run()
|
super().run()
|
||||||
|
|
||||||
|
|
||||||
|
class clean_with_resolver(clean):
|
||||||
|
def run(self):
|
||||||
|
super().run()
|
||||||
|
for d in self.distribution.package_dir.values():
|
||||||
|
self._clean_dir(d)
|
||||||
|
cmd = ["cargo", "clean"]
|
||||||
|
if not self.all:
|
||||||
|
cmd.extend(["-p", "resolver"])
|
||||||
|
self.announce(f"Running: {cmd}", log.INFO)
|
||||||
|
if not self.dry_run:
|
||||||
|
subprocess.check_call(cmd, cwd="resolver")
|
||||||
|
|
||||||
|
def _clean_dir(self, path):
|
||||||
|
for f in os.listdir(path):
|
||||||
|
name, ext = os.path.splitext(f)
|
||||||
|
real_f = os.path.join(path, f)
|
||||||
|
is_dir = os.path.isdir(real_f) and not os.path.islink(real_f)
|
||||||
|
if name == "__pycache__" or ext in {".egg-info", ".so", ".c"}:
|
||||||
|
if is_dir:
|
||||||
|
dir_util.remove_tree(real_f, dry_run=self.dry_run)
|
||||||
|
else:
|
||||||
|
self.announce(f"removing {real_f!r}", log.INFO)
|
||||||
|
if not self.dry_run:
|
||||||
|
os.remove(real_f)
|
||||||
|
elif is_dir:
|
||||||
|
self._clean_dir(real_f)
|
||||||
|
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
cmdclass={
|
cmdclass={
|
||||||
"build_ext": build_ext_with_resolver,
|
"build_ext": build_ext_with_resolver,
|
||||||
|
"clean": clean_with_resolver,
|
||||||
},
|
},
|
||||||
ext_modules=cythonize(
|
ext_modules=[
|
||||||
[
|
Extension(
|
||||||
Extension(
|
"kloop.loop",
|
||||||
"kloop.loop",
|
["src/kloop/loop.pyx"],
|
||||||
["src/kloop/loop.pyx"],
|
),
|
||||||
extra_link_args=[RESOLVER_LIB],
|
Extension(
|
||||||
depends=[RESOLVER_LIB],
|
"kloop.tls",
|
||||||
|
["src/kloop/tls.pyx"],
|
||||||
|
libraries=[
|
||||||
|
lib.strip().removeprefix("-l")
|
||||||
|
for lib in sysconfig.get_config_var("OPENSSL_LIBS").split()
|
||||||
|
],
|
||||||
|
include_dirs=[
|
||||||
|
d.strip().removeprefix("-I")
|
||||||
|
for d in sysconfig.get_config_var(
|
||||||
|
"OPENSSL_INCLUDES"
|
||||||
|
).split()
|
||||||
|
],
|
||||||
|
library_dirs=[
|
||||||
|
d.strip().removeprefix("-L")
|
||||||
|
for d in sysconfig.get_config_var(
|
||||||
|
"OPENSSL_LDFLAGS"
|
||||||
|
).split()
|
||||||
|
if d.strip().startswith("-L")
|
||||||
|
],
|
||||||
|
extra_link_args=[
|
||||||
|
d.strip()
|
||||||
|
for d in sysconfig.get_config_var(
|
||||||
|
"OPENSSL_LDFLAGS"
|
||||||
|
).split()
|
||||||
|
if not d.strip().startswith("-L")
|
||||||
|
],
|
||||||
|
runtime_library_dirs=(lambda x: [x] if x else [])(
|
||||||
|
sysconfig.get_config_var("OPENSSL_RPATH")
|
||||||
),
|
),
|
||||||
Extension(
|
),
|
||||||
"kloop.tls",
|
],
|
||||||
["src/kloop/tls.pyx"],
|
|
||||||
libraries=[
|
|
||||||
lib.strip().removeprefix("-l")
|
|
||||||
for lib in sysconfig.get_config_var("OPENSSL_LIBS").split()
|
|
||||||
],
|
|
||||||
include_dirs=[
|
|
||||||
d.strip().removeprefix("-I")
|
|
||||||
for d in sysconfig.get_config_var(
|
|
||||||
"OPENSSL_INCLUDES"
|
|
||||||
).split()
|
|
||||||
],
|
|
||||||
library_dirs=[
|
|
||||||
d.strip().removeprefix("-L")
|
|
||||||
for d in sysconfig.get_config_var(
|
|
||||||
"OPENSSL_LDFLAGS"
|
|
||||||
).split()
|
|
||||||
if d.strip().startswith("-L")
|
|
||||||
],
|
|
||||||
extra_link_args=[
|
|
||||||
d.strip()
|
|
||||||
for d in sysconfig.get_config_var(
|
|
||||||
"OPENSSL_LDFLAGS"
|
|
||||||
).split()
|
|
||||||
if not d.strip().startswith("-L")
|
|
||||||
],
|
|
||||||
runtime_library_dirs=(lambda x: [x] if x else [])(
|
|
||||||
sysconfig.get_config_var("OPENSSL_RPATH")
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
language_level="3",
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue