summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorXiretza2022-06-04 19:41:28 +0200
committerXiretza2022-06-04 19:42:17 +0200
commitc38320f53cb1fec23056ac1b97a02efb41fab058 (patch)
tree719fafe07ecf6c50baf587a3c82ca6be64a27004
parent77aecaae850110a33c362ee25741a773658b1657 (diff)
downloadaur-c38320f53cb1fec23056ac1b97a02efb41fab058.tar.gz
Make antlr4 parser work
-rw-r--r--.SRCINFO26
-rw-r--r--0001-ANTLR4-4.10-compatibility.patch56
-rw-r--r--0002-cmake-use-native-gtest.patch25
-rw-r--r--0003-cmake-use-native-antlr.patch27
-rw-r--r--0004-cmake-install-parse_fasm.so.patch24
-rw-r--r--0005-fix-cmake-fix-missing-gtest-linker-argument.patch24
-rw-r--r--0006-Use-cmake-directly-instead-of-letting-setup.py-try-t.patch266
-rw-r--r--0007-cmake-install-tags.py-properly.patch40
-rw-r--r--FindANTLR.cmake124
-rw-r--r--PKGBUILD48
10 files changed, 641 insertions, 19 deletions
diff --git a/.SRCINFO b/.SRCINFO
index ddba986ca168..566b24876794 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,10 +1,11 @@
pkgbase = python-fasm-git
pkgdesc = FPGA Assembly (FASM) Parser and Generation library
- pkgver = 0.0.2.r67.gaf39a4f
+ pkgver = 0.0.2.r98.g9a73d70
pkgrel = 2
url = https://github.com/SymbiFlow/fasm
arch = x86_64
license = ISC
+ checkdepends = gtest
checkdepends = python-pytest
makedepends = git
makedepends = python-setuptools
@@ -14,15 +15,26 @@ pkgbase = python-fasm-git
depends = python
depends = python-textx
depends = antlr4-runtime
- provides = python-fasm=0.0.2.r67.gaf39a4f
+ provides = python-fasm=0.0.2.r98.g9a73d70
conflicts = fasm
conflicts = python-fasm
source = git+https://github.com/SymbiFlow/fasm.git
- source = git+https://github.com/antlr/antlr4
- source = git+https://github.com/google/googletest
- sha256sums = SKIP
- sha256sums = SKIP
+ source = FindANTLR.cmake
+ source = 0001-ANTLR4-4.10-compatibility.patch
+ source = 0002-cmake-use-native-gtest.patch
+ source = 0003-cmake-use-native-antlr.patch
+ source = 0004-cmake-install-parse_fasm.so.patch
+ source = 0005-fix-cmake-fix-missing-gtest-linker-argument.patch
+ source = 0006-Use-cmake-directly-instead-of-letting-setup.py-try-t.patch
+ source = 0007-cmake-install-tags.py-properly.patch
sha256sums = SKIP
+ sha256sums = ff8bb6b28f8e4724aeac01526ea7fa193f4bfa979de24ac99dbae92ee7116488
+ sha256sums = d70b631453501e731e63cfa21d24c12386a2e3343631b5e4e7edbba2f4dc7ace
+ sha256sums = 66404ae75ab1e761bcf22de598e76882cc52cad57a95368e751b8a078ecca9ce
+ sha256sums = 8c973830b1309fa636e101ce520d7d617adf09364ca86b5c8a5111b1597fb57f
+ sha256sums = aff2f899aa8bc8b9b93d48430c63d97012c1d53b41106b2f4294e8dbcacb0110
+ sha256sums = 6be3cebb42c8f40359c7b0d5bbbaba0434920ba21276ee78dc362e7084739d03
+ sha256sums = 24b86a0575317b2349ec4ae488592f949995d5e9cabbf0bc41b2d133a91c6591
+ sha256sums = 8f4b57b2bbbfa601b53003489a786ee889db00b92f67a34356e7efcaa7b83683
pkgname = python-fasm-git
-
diff --git a/0001-ANTLR4-4.10-compatibility.patch b/0001-ANTLR4-4.10-compatibility.patch
new file mode 100644
index 000000000000..de89c5d9e39f
--- /dev/null
+++ b/0001-ANTLR4-4.10-compatibility.patch
@@ -0,0 +1,56 @@
+From 752ae3a73c5c5c17feacf896d269752956700c11 Mon Sep 17 00:00:00 2001
+From: Xiretza <xiretza@xiretza.xyz>
+Date: Sat, 4 Jun 2022 10:47:32 +0200
+Subject: [PATCH 1/7] ANTLR4 4.10 compatibility
+
+Commit 70b2edcf98[0] removed antlrcpp::Any in favor of std::any.
+
+[0]: https://github.com/antlr/antlr4/commit/70b2edcf98eb612a92d3dbaedb2ce0b69533b0cb
+---
+ src/ParseFasm.cpp | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+diff --git a/src/ParseFasm.cpp b/src/ParseFasm.cpp
+index 6a1e720..8f3ca67 100644
+--- a/src/ParseFasm.cpp
++++ b/src/ParseFasm.cpp
+@@ -199,7 +199,7 @@ struct ParseException {
+
+ /// Helper macro to convert a rule context into a string
+ /// For use inside FasmParserBaseVisitor
+-#define GET(x) (context->x() ? visit(context->x()).as<std::string>() : "")
++#define GET(x) (context->x() ? std::any_cast<std::string>(visit(context->x())) : "")
+
+ /// FasmParserBaseVisitor is a visitor for the parse tree
+ /// generated by the ANTLR parser.
+@@ -218,7 +218,7 @@ class FasmParserBaseVisitor : public FasmParserVisitor {
+ virtual Any visitFasmFile(
+ FasmParser::FasmFileContext* context) override {
+ for (auto& line : context->fasmLine()) {
+- std::string str = visit(line).as<std::string>();
++ std::string str = std::any_cast<std::string>(visit(line));
+ if (!str.empty()) {
+ out << str;
+ if (hex_mode)
+@@ -285,8 +285,7 @@ class FasmParserBaseVisitor : public FasmParserVisitor {
+ TAG('\'', width),
+ std::stoi(context->INT()->getText()));
+ }
+- data << visit(context->verilogDigits())
+- .as<std::string>();
++ data << std::any_cast<std::string>(visit(context->verilogDigits()));
+ }
+ return data.str();
+ }
+@@ -439,7 +438,7 @@ class FasmParserBaseVisitor : public FasmParserVisitor {
+ FasmParser::AnnotationsContext* context) override {
+ std::ostringstream data;
+ for (auto& a : context->annotation()) {
+- data << visit(a).as<std::string>();
++ data << std::any_cast<std::string>(visit(a));
+ }
+ return withHeader(TAG('{', annotations), data.str());
+ }
+--
+2.36.1
+
diff --git a/0002-cmake-use-native-gtest.patch b/0002-cmake-use-native-gtest.patch
new file mode 100644
index 000000000000..a4e5901e4fa6
--- /dev/null
+++ b/0002-cmake-use-native-gtest.patch
@@ -0,0 +1,25 @@
+From e9d7442de4f0f52ce19629ccfe7ef036030f9669 Mon Sep 17 00:00:00 2001
+From: Xiretza <xiretza@xiretza.xyz>
+Date: Sat, 4 Jun 2022 11:22:15 +0200
+Subject: [PATCH 2/7] cmake: use native gtest
+
+---
+ src/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 94783a6..caf428a 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -63,7 +63,7 @@ set(ANTLR_EXECUTABLE ${CMAKE_CURRENT_SOURCE_DIR}/../third_party/antlr4_lib/antlr
+ find_package(ANTLR REQUIRED)
+
+ # Unit testing library
+-add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../third_party/googletest EXCLUDE_FROM_ALL googletest)
++find_package(GTest REQUIRED)
+
+ # Lexer and parser targets
+ antlr_target(FasmLexer antlr/FasmLexer.g4 LEXER
+--
+2.36.1
+
diff --git a/0003-cmake-use-native-antlr.patch b/0003-cmake-use-native-antlr.patch
new file mode 100644
index 000000000000..5c9c1ecd3967
--- /dev/null
+++ b/0003-cmake-use-native-antlr.patch
@@ -0,0 +1,27 @@
+From 501df447d4d3c7f4e22f4fec43b4915b8de2013c Mon Sep 17 00:00:00 2001
+From: Xiretza <xiretza@xiretza.xyz>
+Date: Sat, 4 Jun 2022 11:32:32 +0200
+Subject: [PATCH 3/7] cmake: use native antlr
+
+---
+ src/CMakeLists.txt | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index caf428a..f4b5b1f 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -55,10 +55,6 @@ endif()
+ # add antrl4cpp artifacts to project environment
+ include_directories(${ANTLR4_INCLUDE_DIRS})
+
+-# set variable pointing to the antlr tool that supports C++
+-# this is not required if the jar file can be found under PATH environment
+-set(ANTLR_EXECUTABLE ${CMAKE_CURRENT_SOURCE_DIR}/../third_party/antlr4_lib/antlr-4.9.3-complete.jar)
+-
+ # add macros to generate ANTLR Cpp code from grammar
+ find_package(ANTLR REQUIRED)
+
+--
+2.36.1
+
diff --git a/0004-cmake-install-parse_fasm.so.patch b/0004-cmake-install-parse_fasm.so.patch
new file mode 100644
index 000000000000..bf1181458736
--- /dev/null
+++ b/0004-cmake-install-parse_fasm.so.patch
@@ -0,0 +1,24 @@
+From 36b8c46b10a4f823754e4adfb388fcd2907098e7 Mon Sep 17 00:00:00 2001
+From: Xiretza <xiretza@xiretza.xyz>
+Date: Sat, 4 Jun 2022 11:32:59 +0200
+Subject: [PATCH 4/7] cmake: install parse_fasm.so
+
+---
+ src/CMakeLists.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index f4b5b1f..b95872e 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -93,6 +93,7 @@ add_library(parse_fasm SHARED ParseFasm.cpp
+ ${ANTLR_FasmLexer_CXX_OUTPUTS}
+ ${ANTLR_FasmParser_CXX_OUTPUTS})
+ target_link_libraries(parse_fasm ${ANTLR4_RUNTIME})
++install(TARGETS parse_fasm)
+ #target_compile_options(parse_fasm PRIVATE -Wno-attributes) # Disable warning from antlr4-runtime
+
+ add_executable(parse_fasm_tests
+--
+2.36.1
+
diff --git a/0005-fix-cmake-fix-missing-gtest-linker-argument.patch b/0005-fix-cmake-fix-missing-gtest-linker-argument.patch
new file mode 100644
index 000000000000..9bd22e6b4017
--- /dev/null
+++ b/0005-fix-cmake-fix-missing-gtest-linker-argument.patch
@@ -0,0 +1,24 @@
+From 8f0cf99eba23b575616e45c43266145eaac77dd7 Mon Sep 17 00:00:00 2001
+From: Xiretza <xiretza@xiretza.xyz>
+Date: Sat, 4 Jun 2022 11:33:13 +0200
+Subject: [PATCH 5/7] fix(cmake): fix missing gtest linker argument
+
+---
+ src/CMakeLists.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index b95872e..63502e5 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -102,6 +102,7 @@ add_executable(parse_fasm_tests
+ ${ANTLR_FasmParser_CXX_OUTPUTS})
+ target_link_libraries(parse_fasm_tests ${ANTLR4_RUNTIME})
+ target_link_libraries(parse_fasm_tests gtest_main)
++target_link_libraries(parse_fasm_tests gtest)
+ #target_compile_options(parse_fasm_tests PRIVATE -Wno-attributes) # Disable warning from antlr4-runtime
+
+ # Standalone executable
+--
+2.36.1
+
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
+
diff --git a/0007-cmake-install-tags.py-properly.patch b/0007-cmake-install-tags.py-properly.patch
new file mode 100644
index 000000000000..9c7ea1f35861
--- /dev/null
+++ b/0007-cmake-install-tags.py-properly.patch
@@ -0,0 +1,40 @@
+From 30c905970e06caf9bb4b8211d759d6107f863ca0 Mon Sep 17 00:00:00 2001
+From: Xiretza <xiretza@xiretza.xyz>
+Date: Sat, 4 Jun 2022 19:35:34 +0200
+Subject: [PATCH 7/7] cmake: install tags.py properly
+
+---
+ src/CMakeLists.txt | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 63502e5..8d3564f 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -76,13 +76,15 @@ antlr_target(FasmParser antlr/FasmParser.g4 PARSER VISITOR
+ # line 1: Skip lines starting in #define
+ # 2: Extract TAGS(...) from dependencies
+ # 3: Convert from TAGS('c', long_name) -> long_name = b'c, write to file
+-add_custom_target(tags.py ALL
++add_custom_command(OUTPUT tags.py
+ COMMAND grep -ve ^\#define ${CMAKE_CURRENT_SOURCE_DIR}/ParseFasm.cpp |
+ grep -hoe TAG\([^\)]*\) |
+- sed -e s/TAG\(\\\(.*\\\),\ \\\(.*\\\)\)/\\2\ =\ b\\1/ > tags.py
++ sed -e s/TAG\(\\\(.*\\\),\ \\\(.*\\\)\)/\\2\ =\ b\\1/ > ${CMAKE_CURRENT_BINARY_DIR}/tags.py
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/ParseFasm.cpp
+ VERBATIM
+ )
++add_custom_target(tags_py ALL DEPENDS tags.py)
++install(FILES ${CMAKE_CURRENT_BINARY_DIR}/tags.py DESTINATION ${CMAKE_INSTALL_LIBDIR})
+
+ # Include generated files in project environment
+ include_directories(${ANTLR_FasmLexer_OUTPUT_DIR})
+@@ -120,5 +122,3 @@ include(CTest)
+ add_test(NAME parse_fasm_tests
+ COMMAND parse_fasm_tests)
+ enable_testing()
+-
+-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/tags.py DESTINATION .)
+--
+2.36.1
+
diff --git a/FindANTLR.cmake b/FindANTLR.cmake
new file mode 100644
index 000000000000..4a34d730d156
--- /dev/null
+++ b/FindANTLR.cmake
@@ -0,0 +1,124 @@
+find_package(Java QUIET COMPONENTS Runtime)
+
+if(NOT ANTLR_EXECUTABLE)
+ find_program(ANTLR_EXECUTABLE
+ NAMES antlr.jar antlr4.jar antlr-4.jar antlr-4.10-complete.jar)
+endif()
+
+if(ANTLR_EXECUTABLE AND Java_JAVA_EXECUTABLE)
+ execute_process(
+ COMMAND ${Java_JAVA_EXECUTABLE} -jar ${ANTLR_EXECUTABLE}
+ OUTPUT_VARIABLE ANTLR_COMMAND_OUTPUT
+ ERROR_VARIABLE ANTLR_COMMAND_ERROR
+ RESULT_VARIABLE ANTLR_COMMAND_RESULT
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ if(ANTLR_COMMAND_RESULT EQUAL 0)
+ string(REGEX MATCH "Version [0-9]+(\\.[0-9])*" ANTLR_VERSION ${ANTLR_COMMAND_OUTPUT})
+ string(REPLACE "Version " "" ANTLR_VERSION ${ANTLR_VERSION})
+ else()
+ message(
+ SEND_ERROR
+ "Command '${Java_JAVA_EXECUTABLE} -jar ${ANTLR_EXECUTABLE}' "
+ "failed with the output '${ANTLR_COMMAND_ERROR}'")
+ endif()
+
+ macro(ANTLR_TARGET Name InputFile)
+ set(ANTLR_OPTIONS LEXER PARSER LISTENER VISITOR)
+ set(ANTLR_ONE_VALUE_ARGS PACKAGE OUTPUT_DIRECTORY DEPENDS_ANTLR)
+ set(ANTLR_MULTI_VALUE_ARGS COMPILE_FLAGS DEPENDS)
+ cmake_parse_arguments(ANTLR_TARGET
+ "${ANTLR_OPTIONS}"
+ "${ANTLR_ONE_VALUE_ARGS}"
+ "${ANTLR_MULTI_VALUE_ARGS}"
+ ${ARGN})
+
+ set(ANTLR_${Name}_INPUT ${InputFile})
+
+ get_filename_component(ANTLR_INPUT ${InputFile} NAME_WE)
+
+ if(ANTLR_TARGET_OUTPUT_DIRECTORY)
+ set(ANTLR_${Name}_OUTPUT_DIR ${ANTLR_TARGET_OUTPUT_DIRECTORY})
+ else()
+ set(ANTLR_${Name}_OUTPUT_DIR
+ ${CMAKE_CURRENT_BINARY_DIR}/antlr4cpp_generated_src/${ANTLR_INPUT})
+ endif()
+
+ unset(ANTLR_${Name}_CXX_OUTPUTS)
+
+ if((ANTLR_TARGET_LEXER AND NOT ANTLR_TARGET_PARSER) OR
+ (ANTLR_TARGET_PARSER AND NOT ANTLR_TARGET_LEXER))
+ list(APPEND ANTLR_${Name}_CXX_OUTPUTS
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}.h
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}.cpp)
+ set(ANTLR_${Name}_OUTPUTS
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}.interp
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}.tokens)
+ else()
+ list(APPEND ANTLR_${Name}_CXX_OUTPUTS
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Lexer.h
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Lexer.cpp
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Parser.h
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Parser.cpp)
+ list(APPEND ANTLR_${Name}_OUTPUTS
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Lexer.interp
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Lexer.tokens)
+ endif()
+
+ if(ANTLR_TARGET_LISTENER)
+ list(APPEND ANTLR_${Name}_CXX_OUTPUTS
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}BaseListener.h
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}BaseListener.cpp
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Listener.h
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Listener.cpp)
+ list(APPEND ANTLR_TARGET_COMPILE_FLAGS -listener)
+ endif()
+
+ if(ANTLR_TARGET_VISITOR)
+ list(APPEND ANTLR_${Name}_CXX_OUTPUTS
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}BaseVisitor.h
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}BaseVisitor.cpp
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Visitor.h
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Visitor.cpp)
+ list(APPEND ANTLR_TARGET_COMPILE_FLAGS -visitor)
+ endif()
+
+ if(ANTLR_TARGET_PACKAGE)
+ list(APPEND ANTLR_TARGET_COMPILE_FLAGS -package ${ANTLR_TARGET_PACKAGE})
+ endif()
+
+ list(APPEND ANTLR_${Name}_OUTPUTS ${ANTLR_${Name}_CXX_OUTPUTS})
+
+ if(ANTLR_TARGET_DEPENDS_ANTLR)
+ if(ANTLR_${ANTLR_TARGET_DEPENDS_ANTLR}_INPUT)
+ list(APPEND ANTLR_TARGET_DEPENDS
+ ${ANTLR_${ANTLR_TARGET_DEPENDS_ANTLR}_INPUT})
+ list(APPEND ANTLR_TARGET_DEPENDS
+ ${ANTLR_${ANTLR_TARGET_DEPENDS_ANTLR}_OUTPUTS})
+ else()
+ message(SEND_ERROR
+ "ANTLR target '${ANTLR_TARGET_DEPENDS_ANTLR}' not found")
+ endif()
+ endif()
+
+ add_custom_command(
+ OUTPUT ${ANTLR_${Name}_OUTPUTS}
+ COMMAND ${Java_JAVA_EXECUTABLE} -jar ${ANTLR_EXECUTABLE}
+ ${InputFile}
+ -o ${ANTLR_${Name}_OUTPUT_DIR}
+ -no-listener
+ -Dlanguage=Cpp
+ ${ANTLR_TARGET_COMPILE_FLAGS}
+ DEPENDS ${InputFile}
+ ${ANTLR_TARGET_DEPENDS}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ COMMENT "Building ${Name} with ANTLR ${ANTLR_VERSION}")
+ endmacro(ANTLR_TARGET)
+
+endif(ANTLR_EXECUTABLE AND Java_JAVA_EXECUTABLE)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(
+ ANTLR
+ REQUIRED_VARS ANTLR_EXECUTABLE Java_JAVA_EXECUTABLE
+ VERSION_VAR ANTLR_VERSION)
diff --git a/PKGBUILD b/PKGBUILD
index e781f771da45..e590c690f9dc 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -2,7 +2,7 @@
_pkgname=fasm
pkgname="python-$_pkgname-git"
-pkgver=0.0.2.r67.gaf39a4f
+pkgver=0.0.2.r98.g9a73d70
pkgrel=2
pkgdesc="FPGA Assembly (FASM) Parser and Generation library"
arch=(x86_64)
@@ -10,15 +10,29 @@ url="https://github.com/SymbiFlow/fasm"
license=('ISC')
depends=('python' 'python-textx' 'antlr4-runtime')
makedepends=('git' 'python-setuptools' 'cython' 'cmake' 'antlr4')
-checkdepends=('python-pytest')
+checkdepends=('gtest' 'python-pytest')
provides=("${pkgname%%-git}=$pkgver")
conflicts=(fasm "${pkgname%%-git}")
-source=("git+$url.git"
- "git+https://github.com/antlr/antlr4"
- "git+https://github.com/google/googletest")
+source=(
+ "git+$url.git"
+ "FindANTLR.cmake"
+ "0001-ANTLR4-4.10-compatibility.patch"
+ "0002-cmake-use-native-gtest.patch"
+ "0003-cmake-use-native-antlr.patch"
+ "0004-cmake-install-parse_fasm.so.patch"
+ "0005-fix-cmake-fix-missing-gtest-linker-argument.patch"
+ "0006-Use-cmake-directly-instead-of-letting-setup.py-try-t.patch"
+ "0007-cmake-install-tags.py-properly.patch"
+)
sha256sums=('SKIP'
- 'SKIP'
- 'SKIP')
+ 'ff8bb6b28f8e4724aeac01526ea7fa193f4bfa979de24ac99dbae92ee7116488'
+ 'd70b631453501e731e63cfa21d24c12386a2e3343631b5e4e7edbba2f4dc7ace'
+ '66404ae75ab1e761bcf22de598e76882cc52cad57a95368e751b8a078ecca9ce'
+ '8c973830b1309fa636e101ce520d7d617adf09364ca86b5c8a5111b1597fb57f'
+ 'aff2f899aa8bc8b9b93d48430c63d97012c1d53b41106b2f4294e8dbcacb0110'
+ '6be3cebb42c8f40359c7b0d5bbbaba0434920ba21276ee78dc362e7084739d03'
+ '24b86a0575317b2349ec4ae488592f949995d5e9cabbf0bc41b2d133a91c6591'
+ '8f4b57b2bbbfa601b53003489a786ee889db00b92f67a34356e7efcaa7b83683')
pkgver() {
cd "$_pkgname"
@@ -29,16 +43,26 @@ pkgver() {
prepare() {
cd "$_pkgname"
- git submodule init
- git config submodule.third_party/antlr4.url "$srcdir/antlr4"
- git config submodule.third_party/googletest.url "$srcdir/googletest"
- git submodule update
+ for patch in "$srcdir"/*.patch; do
+ patch -p1 < "$patch"
+ done
}
build() {
+ local python_version=$(python -c 'import sys; print(".".join(map(str, sys.version_info[:2])))')
+
+ cmake -S "$_pkgname/src" -B cmake_builddir \
+ -DCMAKE_MODULE_PATH="$srcdir" \
+ -DANTLR_EXECUTABLE=/usr/share/java/antlr-complete.jar \
+ -DCMAKE_INSTALL_PREFIX="$srcdir/$_pkgname/build" \
+ -DCMAKE_INSTALL_LIBDIR="lib.linux-$CARCH-$python_version/fasm/parser" \
+ -DCMAKE_BUILD_TYPE=None
+ make -C cmake_builddir
+ make -C cmake_builddir install
+
cd "$_pkgname"
- python setup.py build --antlr-runtime=shared
+ python setup.py build
}
check() {