2022-12-28 06:58:28 +08:00
|
|
|
import os
|
|
|
|
import shutil
|
|
|
|
import sys
|
|
|
|
from distutils.core import Distribution, Extension
|
|
|
|
from distutils.command import build_ext
|
|
|
|
|
|
|
|
from Cython.Build import cythonize
|
|
|
|
|
|
|
|
|
|
|
|
def build() -> None:
|
|
|
|
compile_args = []
|
|
|
|
|
|
|
|
if sys.platform == "linux":
|
|
|
|
compile_args += [
|
|
|
|
"-march=native",
|
|
|
|
"-O3",
|
|
|
|
"-msse",
|
|
|
|
"-msse2",
|
|
|
|
"-mfma",
|
|
|
|
"-mfpmath=sse",
|
|
|
|
"-Wno-pointer-sign",
|
|
|
|
"-Wno-unused-variable",
|
|
|
|
]
|
|
|
|
|
|
|
|
extensions = [
|
|
|
|
Extension(
|
|
|
|
"pyModeS.c_common",
|
|
|
|
["pyModeS/c_common.pyx"],
|
|
|
|
extra_compile_args=compile_args,
|
|
|
|
),
|
|
|
|
Extension(
|
|
|
|
"pyModeS.decoder.flarm.decode",
|
|
|
|
[
|
|
|
|
"pyModeS/decoder/flarm/decode.pyx",
|
|
|
|
"pyModeS/decoder/flarm/core.c",
|
|
|
|
],
|
|
|
|
extra_compile_args=compile_args,
|
|
|
|
include_dirs=["pyModeS/decoder/flarm"],
|
|
|
|
),
|
2022-12-28 07:07:13 +08:00
|
|
|
Extension(
|
|
|
|
"pyModeS.extra.demod2400.core",
|
|
|
|
[
|
|
|
|
"pyModeS/extra/demod2400/core.pyx",
|
|
|
|
"pyModeS/extra/demod2400/demod2400.c",
|
|
|
|
],
|
|
|
|
extra_compile_args=compile_args,
|
|
|
|
include_dirs=["pyModeS/extra/demod2400"],
|
|
|
|
libraries=["m"],
|
|
|
|
),
|
2022-12-28 06:58:28 +08:00
|
|
|
]
|
|
|
|
|
|
|
|
ext_modules = cythonize(
|
|
|
|
extensions,
|
|
|
|
compiler_directives={"binding": True, "language_level": 3},
|
|
|
|
)
|
|
|
|
|
|
|
|
distribution = Distribution(
|
|
|
|
{"name": "extended", "ext_modules": ext_modules}
|
|
|
|
)
|
|
|
|
distribution.package_dir = "extended" # type: ignore
|
|
|
|
|
|
|
|
cmd = build_ext.build_ext(distribution)
|
|
|
|
cmd.verbose = True # type: ignore
|
|
|
|
cmd.ensure_finalized() # type: ignore
|
|
|
|
cmd.run()
|
|
|
|
|
|
|
|
# Copy built extensions back to the project
|
|
|
|
for output in cmd.get_outputs():
|
|
|
|
relative_extension = os.path.relpath(output, cmd.build_lib)
|
|
|
|
shutil.copyfile(output, relative_extension)
|
|
|
|
mode = os.stat(relative_extension).st_mode
|
|
|
|
mode |= (mode & 0o444) >> 2
|
|
|
|
os.chmod(relative_extension, mode)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
build()
|