Skip to content

Commit

Permalink
gpkg/clang: new pkg
Browse files Browse the repository at this point in the history
  • Loading branch information
Maxython committed Jan 22, 2024
1 parent 2507de4 commit c70acfd
Show file tree
Hide file tree
Showing 3 changed files with 220 additions and 0 deletions.
70 changes: 70 additions & 0 deletions gpkg/clang/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
TERMUX_PKG_HOMEPAGE=https://llvm.org/
TERMUX_PKG_DESCRIPTION="Compiler infrastructure"
TERMUX_PKG_LICENSE="Apache-2.0, NCSA"
TERMUX_PKG_LICENSE_FILE="LICENSE.TXT"
TERMUX_PKG_MAINTAINER="@termux-pacman"
TERMUX_PKG_VERSION=17.0.6
_SOURCE=https://github.com/llvm/llvm-project/releases/download/llvmorg-$TERMUX_PKG_VERSION
TERMUX_PKG_SRCURL=($_SOURCE/clang-$TERMUX_PKG_VERSION.src.tar.xz
$_SOURCE/clang-tools-extra-$TERMUX_PKG_VERSION.src.tar.xz
$_SOURCE/llvm-$TERMUX_PKG_VERSION.src.tar.xz
$_SOURCE/cmake-$TERMUX_PKG_VERSION.src.tar.xz
$_SOURCE/third-party-$TERMUX_PKG_VERSION.src.tar.xz)
TERMUX_PKG_SHA256=(a78f668a726ae1d3d9a7179996d97b12b90fb76ab9442a43110b972ff7ad9029
aa774642415d338d7b77a66fcbad6fd1f77f382dabcb67422a6230614eff1ab9
b638167da139126ca11917b6880207cc6e8f9d1cbb1a48d87d017f697ef78188
807f069c54dc20cb47b21c1f6acafdd9c649f3ae015609040d6182cab01140f4
3054d0a9c9375dab1a4539cc2cc45ab340341c5d71475f9599ba7752e222947b)
TERMUX_PKG_DEPENDS="libllvm-glibc, gcc-glibc, compiler-rt-glibc"
TERMUX_PKG_BUILD_DEPENDS="llvm-glibc, python-glibc"
TERMUX_PKG_NO_STATICSPLIT=true

termux_step_post_get_source() {
for i in cmake third-party; do
rm -fr $TERMUX_TOPDIR/$TERMUX_PKG_NAME/${i}
mv $TERMUX_PKG_SRCDIR/$i-$TERMUX_PKG_VERSION.src $TERMUX_TOPDIR/$TERMUX_PKG_NAME
mv $TERMUX_TOPDIR/$TERMUX_PKG_NAME/$i-$TERMUX_PKG_VERSION.src $TERMUX_TOPDIR/$TERMUX_PKG_NAME/$i
done

mv $TERMUX_PKG_SRCDIR/clang-tools-extra-$TERMUX_PKG_VERSION.src $TERMUX_PKG_SRCDIR/tools/extra
}

termux_step_configure() {
termux_setup_cmake
termux_setup_ninja

local LLVM_TARGET_ARCH="X86"
if [ $TERMUX_ARCH = "arm" ]; then
LLVM_TARGET_ARCH="ARM"
elif [ $TERMUX_ARCH = "aarch64" ]; then
LLVM_TARGET_ARCH="AArch64"
fi

cmake ${TERMUX_PKG_SRCDIR} \
-G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_FIND_ROOT_PATH=$TERMUX_PREFIX \
-DCMAKE_INSTALL_DOCDIR=share/doc \
-DCMAKE_INSTALL_PREFIX=$TERMUX_PREFIX \
-DCMAKE_SYSTEM_NAME=Linux \
-DLLVM_HOST_TRIPLE=$TERMUX_HOST_PLATFORM \
-DCMAKE_LIBRARY_ARCHITECTURE=$TERMUX_HOST_PLATFORM \
-DCMAKE_SYSTEM_PROCESSOR=$LLVM_TARGET_ARCH \
-DLLVM_TARGETS_TO_BUILD=$LLVM_TARGET_ARCH \
-DCMAKE_C_COMPILER=$CC \
-DCMAKE_CXX_COMPILER=$CXX \
-DCMAKE_SKIP_RPATH=ON \
-DCLANG_DEFAULT_PIE_ON_LINUX=ON \
-DCLANG_LINK_CLANG_DYLIB=ON \
-DENABLE_LINKER_BUILD_ID=ON \
-DLLVM_BUILD_DOCS=ON \
-DLLVM_BUILD_TESTS=ON \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_ENABLE_SPHINX=ON \
-DLLVM_EXTERNAL_LIT=$TERMUX_PREFIX/bin/lit \
-DLLVM_INCLUDE_DOCS=ON \
-DLLVM_LINK_LLVM_DYLIB=ON \
-DLLVM_MAIN_SRC_DIR=$TERMUX_PKG_SRCDIR/llvm-$TERMUX_PKG_VERSION.src \
-DSPHINX_WARNINGS_AS_ERRORS=OFF \
-DLLVM_INCLUDE_TESTS=OFF
}
78 changes: 78 additions & 0 deletions gpkg/clang/clangd-handle-missing-ending-brace.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
From 9d1dada57741d204f8a95aa2b0c89a7242e101f1 Mon Sep 17 00:00:00 2001
From: Nathan Ridge <[email protected]>
Date: Thu, 18 Jan 2024 01:51:43 -0500
Subject: [PATCH] [clangd] Handle an expanded token range that ends in the
`eof` token in TokenBuffer::spelledForExpanded() (#78092)

Such ranges can legitimately arise in the case of invalid code, such as
a declaration missing an ending brace.

Fixes https://github.com/clangd/clangd/issues/1559
---
clang/tools/extra/clangd/unittests/DumpASTTests.cpp | 11 +++++++++++
clang/lib/Tooling/Syntax/Tokens.cpp | 6 ++++++
clang/unittests/Tooling/Syntax/TokensTest.cpp | 12 ++++++++++++
3 files changed, 29 insertions(+)

diff --git a/clang/tools/extra/clangd/unittests/DumpASTTests.cpp b/clang/tools/extra/clangd/unittests/DumpASTTests.cpp
index d1b8f21b82c65a..304682118c871d 100644
--- clang/tools/extra/clangd/unittests/DumpASTTests.cpp
+++ clang/tools/extra/clangd/unittests/DumpASTTests.cpp
@@ -186,6 +186,17 @@ TEST(DumpASTTests, Arcana) {
EXPECT_THAT(Node.children.front().arcana, testing::StartsWith("QualType "));
}

+TEST(DumpASTTests, UnbalancedBraces) {
+ // Test that we don't crash while trying to compute a source range for the
+ // node whose ending brace is missing, and also that the source range is
+ // not empty.
+ Annotations Case("/*error-ok*/ $func[[int main() {]]");
+ ParsedAST AST = TestTU::withCode(Case.code()).build();
+ auto Node = dumpAST(DynTypedNode::create(findDecl(AST, "main")),
+ AST.getTokens(), AST.getASTContext());
+ ASSERT_EQ(Node.range, Case.range("func"));
+}
+
} // namespace
} // namespace clangd
} // namespace clang
diff --git a/clang/lib/Tooling/Syntax/Tokens.cpp b/clang/lib/Tooling/Syntax/Tokens.cpp
index 2f28b9cf286a63..8d32c45a4a70cf 100644
--- clang/lib/Tooling/Syntax/Tokens.cpp
+++ clang/lib/Tooling/Syntax/Tokens.cpp
@@ -401,6 +401,12 @@ std::string TokenBuffer::Mapping::str() const {

std::optional<llvm::ArrayRef<syntax::Token>>
TokenBuffer::spelledForExpanded(llvm::ArrayRef<syntax::Token> Expanded) const {
+ // In cases of invalid code, AST nodes can have source ranges that include
+ // the `eof` token. As there's no spelling for this token, exclude it from
+ // the range.
+ if (!Expanded.empty() && Expanded.back().kind() == tok::eof) {
+ Expanded = Expanded.drop_back();
+ }
// Mapping an empty range is ambiguous in case of empty mappings at either end
// of the range, bail out in that case.
if (Expanded.empty())
diff --git a/clang/unittests/Tooling/Syntax/TokensTest.cpp b/clang/unittests/Tooling/Syntax/TokensTest.cpp
index 0c08318a637c0b..42f51697139658 100644
--- clang/unittests/Tooling/Syntax/TokensTest.cpp
+++ clang/unittests/Tooling/Syntax/TokensTest.cpp
@@ -816,6 +816,18 @@ TEST_F(TokenBufferTest, SpelledByExpanded) {
EXPECT_EQ(Buffer.spelledForExpanded(findExpanded("prev good")), std::nullopt);
}

+TEST_F(TokenBufferTest, NoCrashForEofToken) {
+ recordTokens(R"cpp(
+ int main() {
+ )cpp");
+ ASSERT_TRUE(!Buffer.expandedTokens().empty());
+ ASSERT_EQ(Buffer.expandedTokens().back().kind(), tok::eof);
+ // Expanded range including `eof` is handled gracefully (`eof` is ignored).
+ EXPECT_THAT(
+ Buffer.spelledForExpanded(Buffer.expandedTokens()),
+ ValueIs(SameRange(Buffer.spelledTokens(SourceMgr->getMainFileID()))));
+}
+
TEST_F(TokenBufferTest, ExpandedTokensForRange) {
recordTokens(R"cpp(
#define SIGN(X) X##_washere
72 changes: 72 additions & 0 deletions gpkg/clang/enable-fstack-protector-strong-by-default.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
From 5346dc41bee9546db1fc649f39f1c44629495cc5 Mon Sep 17 00:00:00 2001
From: Evangelos Foutras <[email protected]>
Date: Fri, 18 Aug 2023 13:31:57 +0000
Subject: [PATCH] Enable -fstack-protector-strong by default

---
clang/lib/Driver/ToolChains/Linux.h | 5 +++++
clang/test/Driver/fsanitize.c | 6 +++---
clang/test/Driver/stack-protector.c | 4 ++--
3 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/Linux.h b/clang/lib/Driver/ToolChains/Linux.h
index 524391743090..0d4e1944118b 100644
--- clang/lib/Driver/ToolChains/Linux.h
+++ clang/lib/Driver/ToolChains/Linux.h
@@ -10,6 +10,7 @@
#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_LINUX_H

#include "Gnu.h"
+#include "clang/Basic/LangOptions.h"
#include "clang/Driver/ToolChain.h"

namespace clang {
@@ -48,6 +49,10 @@ public:
IsAArch64OutlineAtomicsDefault(const llvm::opt::ArgList &Args) const override;
bool isPIEDefault(const llvm::opt::ArgList &Args) const override;
bool IsMathErrnoDefault() const override;
+ LangOptions::StackProtectorMode
+ GetDefaultStackProtectorLevel(bool KernelOrKext) const override {
+ return LangOptions::SSPStrong;
+ }
SanitizerMask getSupportedSanitizers() const override;
void addProfileRTLibs(const llvm::opt::ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) const override;
diff --git a/clang/test/Driver/fsanitize.c b/clang/test/Driver/fsanitize.c
index 8ad6dc25b4d1..1619b59a40f0 100644
--- clang/test/Driver/fsanitize.c
+++ clang/test/Driver/fsanitize.c
@@ -695,12 +695,12 @@
// RUN: %clang -fno-sanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NOSP
// NOSP-NOT: "-fsanitize=safe-stack"

-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP
// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address,safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP-ASAN
// RUN: %clang --target=x86_64-linux-gnu -fstack-protector -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP
// RUN: %clang --target=x86_64-linux-gnu -fsanitize=safe-stack -fstack-protector-all -### %s 2>&1 | FileCheck %s -check-prefix=SP
-// RUN: %clang --target=arm-linux-androideabi -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP
-// RUN: %clang --target=aarch64-linux-android -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP
+// RUN: %clang --target=arm-linux-androideabi -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP
+// RUN: %clang --target=aarch64-linux-android -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP
// RUN: %clang --target=i386-contiki-unknown -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP
// NO-SP-NOT: stack-protector
// NO-SP: "-fsanitize=safe-stack"
diff --git a/clang/test/Driver/stack-protector.c b/clang/test/Driver/stack-protector.c
index 169376919a71..2470b7f7e39e 100644
--- clang/test/Driver/stack-protector.c
+++ clang/test/Driver/stack-protector.c
@@ -3,11 +3,11 @@
// NOSSP-NOT: "-stack-protector-buffer-size"

// RUN: %clang -target i386-unknown-linux -fstack-protector -### %s 2>&1 | FileCheck %s -check-prefix=SSP
-// SSP: "-stack-protector" "1"
+// SSP: "-stack-protector" "2"
// SSP-NOT: "-stack-protector-buffer-size"

// RUN: %clang -target i386-unknown-linux -fstack-protector --param ssp-buffer-size=16 -### %s 2>&1 | FileCheck %s -check-prefix=SSP-BUF
-// SSP-BUF: "-stack-protector" "1"
+// SSP-BUF: "-stack-protector" "2"
// SSP-BUF: "-stack-protector-buffer-size" "16"

// RUN: %clang -target i386-pc-openbsd -### %s 2>&1 | FileCheck %s -check-prefix=OPENBSD

0 comments on commit c70acfd

Please sign in to comment.