From 385a34f156e94588be606c2fd19aec0da2adf61f Mon Sep 17 00:00:00 2001 From: Marc Auberer Date: Sat, 23 Sep 2023 14:29:51 +0200 Subject: [PATCH] Fix bug in publish workflow --- .github/workflows/publish.yml | 9 +-- .goreleaser.yml | 7 ++ src/ast/ASTNodes.h | 10 --- src/cmake/ExternalAntlr4Cpp.cmake | 119 ++++++++++++++++++++-------- src/symboltablebuilder/SymbolType.h | 4 +- 5 files changed, 97 insertions(+), 52 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 309766b5d..1f514a6f4 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -50,7 +50,7 @@ jobs: git clone --depth 1 --branch llvmorg-17.0.1 https://github.com/llvm/llvm-project.git llvm mkdir ./llvm/build cd ./llvm/build - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_CXX_FLAGS_RELEASE="-O2" -DLLVM_ENABLE_RTTI=ON -GNinja -Wno-dev -Wattributes ../llvm + cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_CXX_FLAGS_RELEASE="-O2" -DLLVM_ENABLE_RTTI=ON -Wno-dev -Wattributes ../llvm cmake --build . -j$(nproc) - name: Download Libs @@ -94,8 +94,7 @@ jobs: java-version: 11 - name: Setup latest GCC and build dependencies - run: | - sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu + run: sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu - name: Setup Ninja run: sudo apt-get install ninja-build @@ -120,7 +119,7 @@ jobs: if: steps.cache-llvm.outputs.cache-hit != 'true' run: | cd ./llvm/build - cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DLLVM_HOST_TRIPLE=x86_64-linux-gnu -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_CXX_FLAGS_RELEASE="-O2" -DLLVM_ENABLE_RTTI=ON -GNinja -Wno-dev -Wattributes ../llvm + cmake -GNinja -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DLLVM_HOST_TRIPLE=x86_64-linux-gnu -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_CXX_FLAGS_RELEASE="-O2" -DLLVM_ENABLE_RTTI=ON -Wno-dev -Wattributes ../llvm cmake --build . - name: Download Libs @@ -134,7 +133,7 @@ jobs: run: | mkdir ./bin cd ./bin - cmake cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DSPICE_LINK_STATIC=ON -DSPICE_LTO=ON -DCMAKE_CXX_FLAGS_RELEASE="-O2" -DSPICE_VERSION="${{ github.ref_name }}" -DSPICE_BUILT_BY="ghactions" .. + cmake cmake -GNinja -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DSPICE_LTO=ON -DCMAKE_CXX_FLAGS_RELEASE="-O2" -DSPICE_VERSION="${{ github.ref_name }}" -DSPICE_BUILT_BY="ghactions" .. cmake --build . --target spice -j$(nproc) - name: Process build output diff --git a/.goreleaser.yml b/.goreleaser.yml index 8ce0a3b94..dbb94eea1 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -8,6 +8,13 @@ builds: goarch: - amd64 - arm64 + ignore: + - goos: windows + goarch: arm64 + - goos: darwin + goarch: amd64 + - goos: darwin + goarch: arm64 hooks: post: - mv ./bin/spice-{{ .Os }}-{{ .Arch }}/spice{{ .Ext }} {{ .Path }} diff --git a/src/ast/ASTNodes.h b/src/ast/ASTNodes.h index 2b49edcea..5b943f639 100644 --- a/src/ast/ASTNodes.h +++ b/src/ast/ASTNodes.h @@ -39,21 +39,11 @@ class ASTNode { ASTNode(ASTNode *parent, CodeLoc codeLoc) : parent(parent), codeLoc(std::move(codeLoc)) {} ASTNode(const ASTNode &) = delete; - // Destructors - virtual ~ASTNode() = default; - // Virtual methods virtual std::any accept(AbstractASTVisitor *visitor) = 0; virtual std::any accept(ParallelizableASTVisitor *visitor) const = 0; // Public methods - template T *createChild(const CodeLoc &loc) { - static_assert(std::is_base_of_v, "T must be derived from ASTNode"); - T *node = new T(this, loc); - children.push_back(node); - return node; - } - template void addChild(T *node) { static_assert(std::is_base_of_v, "T must be derived from ASTNode"); children.push_back(node); diff --git a/src/cmake/ExternalAntlr4Cpp.cmake b/src/cmake/ExternalAntlr4Cpp.cmake index 676b27b85..825db2e19 100644 --- a/src/cmake/ExternalAntlr4Cpp.cmake +++ b/src/cmake/ExternalAntlr4Cpp.cmake @@ -78,42 +78,91 @@ if (NOT DEFINED ANTLR4_WITH_STATIC_CRT) endif () if (ANTLR4_ZIP_REPOSITORY) - ExternalProject_Add( - antlr4_runtime - PREFIX antlr4_runtime - URL ${ANTLR4_ZIP_REPOSITORY} - DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR} - BUILD_COMMAND "" - BUILD_IN_SOURCE 1 - SOURCE_DIR ${ANTLR4_ROOT} - SOURCE_SUBDIR runtime/Cpp - CMAKE_CACHE_ARGS - -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DWITH_STATIC_CRT:BOOL=${ANTLR4_WITH_STATIC_CRT} - # -DCMAKE_CXX_STANDARD:STRING=17 # if desired, compile the runtime with a different C++ standard - # -DCMAKE_CXX_STANDARD:STRING=${CMAKE_CXX_STANDARD} # alternatively, compile the runtime with the same C++ standard as the outer project - INSTALL_COMMAND "" - EXCLUDE_FROM_ALL 1 - DOWNLOAD_EXTRACT_TIMESTAMP 0) + if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + ExternalProject_Add( + antlr4_runtime + PREFIX antlr4_runtime + URL ${ANTLR4_ZIP_REPOSITORY} + DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR} + BUILD_COMMAND "" + BUILD_IN_SOURCE 1 + SOURCE_DIR ${ANTLR4_ROOT} + SOURCE_SUBDIR runtime/Cpp + CMAKE_CACHE_ARGS + -DCMAKE_SYSTEM_NAME:STRING=${CMAKE_SYSTEM_NAME} + -DCMAKE_SYSTEM_PROCESSOR:STRING=${CMAKE_SYSTEM_PROCESSOR} + -DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER} + -DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER} + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DWITH_STATIC_CRT:BOOL=${ANTLR4_WITH_STATIC_CRT} + # -DCMAKE_CXX_STANDARD:STRING=17 # if desired, compile the runtime with a different C++ standard + # -DCMAKE_CXX_STANDARD:STRING=${CMAKE_CXX_STANDARD} # alternatively, compile the runtime with the same C++ standard as the outer project + INSTALL_COMMAND "" + EXCLUDE_FROM_ALL 1 + DOWNLOAD_EXTRACT_TIMESTAMP 0) + else() + ExternalProject_Add( + antlr4_runtime + PREFIX antlr4_runtime + URL ${ANTLR4_ZIP_REPOSITORY} + DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR} + BUILD_COMMAND "" + BUILD_IN_SOURCE 1 + SOURCE_DIR ${ANTLR4_ROOT} + SOURCE_SUBDIR runtime/Cpp + CMAKE_CACHE_ARGS + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DWITH_STATIC_CRT:BOOL=${ANTLR4_WITH_STATIC_CRT} + # -DCMAKE_CXX_STANDARD:STRING=17 # if desired, compile the runtime with a different C++ standard + # -DCMAKE_CXX_STANDARD:STRING=${CMAKE_CXX_STANDARD} # alternatively, compile the runtime with the same C++ standard as the outer project + INSTALL_COMMAND "" + EXCLUDE_FROM_ALL 1 + DOWNLOAD_EXTRACT_TIMESTAMP 0) + endif() else () - ExternalProject_Add( - antlr4_runtime - PREFIX antlr4_runtime - GIT_REPOSITORY ${ANTLR4_GIT_REPOSITORY} - GIT_TAG ${ANTLR4_TAG} - DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR} - BUILD_COMMAND "" - BUILD_IN_SOURCE 1 - SOURCE_DIR ${ANTLR4_ROOT} - SOURCE_SUBDIR runtime/Cpp - CMAKE_CACHE_ARGS - -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DWITH_STATIC_CRT:BOOL=${ANTLR4_WITH_STATIC_CRT} - # -DCMAKE_CXX_STANDARD:STRING=17 # if desired, compile the runtime with a different C++ standard - # -DCMAKE_CXX_STANDARD:STRING=${CMAKE_CXX_STANDARD} # alternatively, compile the runtime with the same C++ standard as the outer project - INSTALL_COMMAND "" - EXCLUDE_FROM_ALL 1 - DOWNLOAD_EXTRACT_TIMESTAMP 0) + if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + ExternalProject_Add( + antlr4_runtime + PREFIX antlr4_runtime + GIT_REPOSITORY ${ANTLR4_GIT_REPOSITORY} + GIT_TAG ${ANTLR4_TAG} + DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR} + BUILD_COMMAND "" + BUILD_IN_SOURCE 1 + SOURCE_DIR ${ANTLR4_ROOT} + SOURCE_SUBDIR runtime/Cpp + CMAKE_CACHE_ARGS + -DCMAKE_SYSTEM_NAME:STRING=${CMAKE_SYSTEM_NAME} + -DCMAKE_SYSTEM_PROCESSOR:STRING=${CMAKE_SYSTEM_PROCESSOR} + -DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER} + -DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER} + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DWITH_STATIC_CRT:BOOL=${ANTLR4_WITH_STATIC_CRT} + # -DCMAKE_CXX_STANDARD:STRING=17 # if desired, compile the runtime with a different C++ standard + # -DCMAKE_CXX_STANDARD:STRING=${CMAKE_CXX_STANDARD} # alternatively, compile the runtime with the same C++ standard as the outer project + INSTALL_COMMAND "" + EXCLUDE_FROM_ALL 1 + DOWNLOAD_EXTRACT_TIMESTAMP 0) + else() + ExternalProject_Add( + antlr4_runtime + PREFIX antlr4_runtime + GIT_REPOSITORY ${ANTLR4_GIT_REPOSITORY} + GIT_TAG ${ANTLR4_TAG} + DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR} + BUILD_COMMAND "" + BUILD_IN_SOURCE 1 + SOURCE_DIR ${ANTLR4_ROOT} + SOURCE_SUBDIR runtime/Cpp + CMAKE_CACHE_ARGS + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DWITH_STATIC_CRT:BOOL=${ANTLR4_WITH_STATIC_CRT} + # -DCMAKE_CXX_STANDARD:STRING=17 # if desired, compile the runtime with a different C++ standard + # -DCMAKE_CXX_STANDARD:STRING=${CMAKE_CXX_STANDARD} # alternatively, compile the runtime with the same C++ standard as the outer project + INSTALL_COMMAND "" + EXCLUDE_FROM_ALL 1 + DOWNLOAD_EXTRACT_TIMESTAMP 0) + endif() endif () # Separate build step as rarely people want both diff --git a/src/symboltablebuilder/SymbolType.h b/src/symboltablebuilder/SymbolType.h index 3dea603a1..0946aaf68 100644 --- a/src/symboltablebuilder/SymbolType.h +++ b/src/symboltablebuilder/SymbolType.h @@ -133,9 +133,9 @@ class SymbolType { [[nodiscard]] bool isErrorObj() const; [[nodiscard]] bool implements(const SymbolType &symbolType, const ASTNode *node) const; [[nodiscard]] bool isBaseType(SymbolSuperType superType) const; - [[nodiscard]] ALWAYS_INLINE bool isOneOf(const std::vector &superTypes) const { + [[nodiscard]] ALWAYS_INLINE bool isOneOf(const std::initializer_list &superTypes) const { const SymbolSuperType superType = getSuperType(); - return std::ranges::any_of(superTypes, [&superType](int type) { return type == superType; }); + return std::ranges::any_of(superTypes, [&superType](SymbolSuperType type) { return type == superType; }); } [[nodiscard]] bool isSameContainerTypeAs(const SymbolType &otherType) const; [[nodiscard]] ALWAYS_INLINE SymbolSuperType getSuperType() const {