diff options
Diffstat (limited to '0006-Use-cmake-directly-instead-of-letting-setup.py-try-t.patch')
-rw-r--r-- | 0006-Use-cmake-directly-instead-of-letting-setup.py-try-t.patch | 266 |
1 files changed, 266 insertions, 0 deletions
diff --git a/0006-Use-cmake-directly-instead-of-letting-setup.py-try-t.patch b/0006-Use-cmake-directly-instead-of-letting-setup.py-try-t.patch new file mode 100644 index 000000000000..c8e2b3432838 --- /dev/null +++ b/0006-Use-cmake-directly-instead-of-letting-setup.py-try-t.patch @@ -0,0 +1,266 @@ +From 52b71d6edc8ea90d29a5844191d7b386fed67c46 Mon Sep 17 00:00:00 2001 +From: Xiretza <xiretza@xiretza.xyz> +Date: Sat, 4 Jun 2022 11:33:46 +0200 +Subject: [PATCH 6/7] Use cmake directly instead of letting setup.py try to + handle it + +--- + setup.py | 226 +------------------------------------------------------ + 1 file changed, 1 insertion(+), 225 deletions(-) + +diff --git a/setup.py b/setup.py +index cfbaa55..8c0b3ee 100644 +--- a/setup.py ++++ b/setup.py +@@ -18,20 +18,10 @@ + # SPDX-License-Identifier: Apache-2.0 + + import os +-import re + import setuptools +-import shutil + import subprocess +-import sys +-import traceback + + from Cython.Build import cythonize +-from distutils.command.build import build +-from distutils.version import LooseVersion +-from setuptools import Extension +-from setuptools.command.build_ext import build_ext +-from setuptools.command.develop import develop +-from setuptools.command.install import install + + __dir__ = os.path.dirname(os.path.abspath(__file__)) + +@@ -56,212 +46,6 @@ assert version_value[0] == '"', version_value + assert version_value[-1] == '"', version_value + version = version_value[1:-1] + +- +-# Based on: https://www.benjack.io/2018/02/02/python-cpp-revisited.html +-# GitHub: https://github.com/benjaminjack/python_cpp_example +-class CMakeExtension(Extension): +- def __init__(self, name, sourcedir='', prefix=''): +- Extension.__init__(self, name, sources=[]) +- self.sourcedir = os.path.abspath(sourcedir) +- self.prefix = prefix +- +- +-# Used to share options between two classes. +-class SharedOptions(): +- ANTLR_RUNTIMES = ['static', 'shared'] +- options = [ +- ( +- 'antlr-runtime=', None, +- "Whether to use a 'static' or 'shared' ANTLR runtime.") +- ] +- +- def __init__(self): +- self.antlr_runtime = 'static' +- +- def initialize(self, other): +- other.antlr_runtime = None +- +- def load(self, other): +- if other.antlr_runtime is not None: +- self.antlr_runtime = other.antlr_runtime +- assert self.antlr_runtime in SharedOptions.ANTLR_RUNTIMES, \ +- 'Invalid antlr_runtime {}, expected one of {}'.format( +- self.antlr_runtime, SharedOptions.ANTLR_RUNTIMES) +- +- +-# Global to allow sharing options. +-shared_options = SharedOptions() +- +- +-class AntlrCMakeBuild(build_ext): +- user_options = SharedOptions.options +- +- def copy_extensions_to_source(self): +- original_extensions = list(self.extensions) +- self.extensions = [ +- ext for ext in self.extensions +- if not isinstance(ext, CMakeExtension) +- ] +- super().copy_extensions_to_source() +- self.extensions = original_extensions +- +- def run(self): +- shared_options.load(self) +- try: +- super().run() +- +- try: +- out = subprocess.check_output(['cmake', '--version']) +- except OSError: +- raise RuntimeError( +- "CMake must be installed to build " +- "the following extensions: " + ", ".join( +- e.name for e in self.extensions)) +- +- cmake_version = LooseVersion( +- re.search(r'version\s*([\d.]+)', out.decode()).group(1)) +- if cmake_version < '3.7.0': +- raise RuntimeError("CMake >= 3.7.0 is required.") +- +- for ext in self.extensions: +- self.build_extension(ext) +- +- except BaseException as e: +- print( +- "Failed to build ANTLR parser, " +- "falling back on slower textX parser. Error:\n", e) +- traceback.print_exc() +- +- # FIXME: Remove this function +- # see: https://github.com/chipsalliance/fasm/issues/50 +- def add_flags(self): +- if sys.platform.startswith('win'): +- return +- +- for flag in ["CFLAGS", "CXXFLAGS"]: +- flags = [os.environ.get(flag, "")] +- if not flags[0]: +- flags.pop(0) +- +- if shared_options.antlr_runtime == 'static': +- # When linking the ANTLR runtime statically, -fPIC is +- # still necessary because libparse_fasm will be a +- # shared library. +- flags.append("-fPIC") +- +- # FIXME: These should be in the cmake config file? +- # Disable excessive warnings currently in ANTLR runtime. +- # warning: type attributes ignored after type is already defined +- # `class ANTLR4CPP_PUBLIC ATN;` +- flags.append('-Wno-attributes') +- +- # Lots of implicit fallthroughs. +- # flags.append('-Wimplicit-fallthrough=0') +- +- if flags: +- os.environ[flag] = " ".join(flags) +- +- def build_extension(self, ext): +- if isinstance(ext, CMakeExtension): +- extdir = os.path.join( +- os.path.abspath( +- os.path.dirname(self.get_ext_fullpath(ext.name))), +- ext.prefix) +- cmake_args = [ +- '-DCMAKE_INSTALL_PREFIX=' + extdir, +- '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=' + extdir, +- '-DPYTHON_EXECUTABLE=' + sys.executable, +- '-DANTLR_RUNTIME_TYPE=' + shared_options.antlr_runtime +- ] +- +- cfg = 'Debug' if self.debug else 'Release' +- build_args = ['--config', cfg] +- cmake_args += ['-DCMAKE_BUILD_TYPE=' + cfg] +- if not sys.platform.startswith('win') and ( +- os.environ.get("CMAKE_BUILD_PARALLEL_LEVEL") is None): +- build_args += ['--', '-j'] +- +- env = os.environ.copy() +- env['CXXFLAGS'] = '{} -DVERSION_INFO=\\"{}\\"'.format( +- env.get('CXXFLAGS', ''), self.distribution.get_version()) +- +- # Remove the existing build_temp directory if it already exists. +- if os.path.exists(self.build_temp): +- shutil.rmtree(self.build_temp, ignore_errors=True) +- os.makedirs(self.build_temp, exist_ok=True) +- +- self.add_flags() +- +- subprocess.check_call( +- ['cmake', ext.sourcedir] + cmake_args, +- cwd=self.build_temp, +- env=env) +- subprocess.check_call( +- ['cmake', '--build', '.'] + build_args, cwd=self.build_temp) +- subprocess.check_call( +- ['cmake', '--install', '.'], cwd=self.build_temp) +- subprocess.check_call(['ctest'], cwd=self.build_temp) +- print() # Add an empty line for cleaner output +- else: +- super().build_extension(ext) +- +- def initialize_options(self): +- super().initialize_options() +- shared_options.initialize(self) +- +- def finalize_options(self): +- super().finalize_options() +- shared_options.load(self) +- +- +-class BuildCommand(build): +- user_options = build.user_options + SharedOptions.options +- +- def initialize_options(self): +- super().initialize_options() +- shared_options.initialize(self) +- +- def finalize_options(self): +- super().finalize_options() +- shared_options.load(self) +- +- def run(self): +- shared_options.load(self) +- super().run() +- +- +-class InstallCommand(install): +- user_options = install.user_options + SharedOptions.options +- +- def initialize_options(self): +- super().initialize_options() +- shared_options.initialize(self) +- +- def finalize_options(self): +- super().finalize_options() +- shared_options.load(self) +- +- def run(self): +- shared_options.load(self) +- super().run() +- +- +-class DevelopCommand(develop): +- user_options = develop.user_options + SharedOptions.options +- +- def initialize_options(self): +- super().initialize_options() +- shared_options.initialize(self) +- +- def finalize_options(self): +- super().finalize_options() +- shared_options.load(self) +- +- def run(self): +- shared_options.load(self) +- super().run() +- +- + setuptools.setup( + name="fasm", + version=version, +@@ -282,13 +66,5 @@ setuptools.setup( + entry_points={ + 'console_scripts': ['fasm=fasm.tool:main'], + }, +- ext_modules=[ +- CMakeExtension('parse_fasm', sourcedir='src', prefix='fasm/parser') +- ] + cythonize("fasm/parser/antlr_to_tuple.pyx"), +- cmdclass={ +- 'build_ext': AntlrCMakeBuild, +- 'build': BuildCommand, +- 'develop': DevelopCommand, +- 'install': InstallCommand, +- }, ++ ext_modules=cythonize("fasm/parser/antlr_to_tuple.pyx"), + ) +-- +2.36.1 + |