mirror of
https://github.com/clangd/clangd.git
synced 2025-04-19 23:22:59 +00:00
Compare commits
71 Commits
snapshot_2
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
439b0626d1 | ||
|
cb1cfd5a92 | ||
|
8ea4a27f46 | ||
|
0a7499759d | ||
|
909659b1ba | ||
|
cb870db274 | ||
|
ff6fd49148 | ||
|
d5998e7fce | ||
|
6e7f5968ba | ||
|
a729875fb1 | ||
|
1a90fba271 | ||
|
f707dfdeab | ||
|
ebce136114 | ||
|
64ccc9d3ec | ||
|
19a7bfdb2d | ||
|
9d058532be | ||
|
ca00967a89 | ||
|
1a5759b2da | ||
|
c0845399c6 | ||
|
c576bf40d1 | ||
|
e2345b0261 | ||
|
186c1cfe5b | ||
|
c4786ebf83 | ||
|
608aa9953c | ||
|
d78d99d3f3 | ||
|
ec24d11c53 | ||
|
d36dadfd99 | ||
|
fc7440e2e5 | ||
|
d561d317fc | ||
|
411063a83a | ||
|
239800b0c5 | ||
|
e279de4b94 | ||
|
fead93d1a9 | ||
|
fc26be2c43 | ||
|
3d90b39e96 | ||
|
40114796f0 | ||
|
bef10dc3c8 | ||
|
835256346b | ||
|
405dee024a | ||
|
ebde6ecac4 | ||
|
ae38d57cb9 | ||
|
94b525b2ee | ||
|
a276cdf62f | ||
|
02bad4f0eb | ||
|
8d1f3300c5 | ||
|
6f906275b0 | ||
|
6ab953a853 | ||
|
f34af43022 | ||
|
f779426513 | ||
|
5a40c019f1 | ||
|
d1d8b39c4c | ||
|
45b6fbdfb0 | ||
|
40dcef1871 | ||
|
9a0cad43e8 | ||
|
55b106258d | ||
|
61703d6bba | ||
|
b51dc0092f | ||
|
2de2ec4404 | ||
|
12c31b0756 | ||
|
722567248f | ||
|
d740d020b6 | ||
|
45de907b37 | ||
|
adc3c29c7f | ||
|
efb0a8fab5 | ||
|
e7efb79737 | ||
|
68c8b97885 | ||
|
1e1281022b | ||
|
47ba9b16a5 | ||
|
4b11bad775 | ||
|
f7b55aeb19 | ||
|
ac147e77a7 |
30
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
30
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: A problem encountered using clangd
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Please describe the problem.
|
||||
For hints on what information is helpful, see: https://clangd.llvm.org/troubleshooting.html
|
||||
|
||||
If you can, provide a minimal chunk of code that shows the problem (either inline, or attach it if larger).
|
||||
|
||||
**Logs**
|
||||
|
||||
Please attach the clangd stderr log if you can. (Usually available from the editor)
|
||||
If possible, run with `--log=verbose` - note that the logs will include the contents of open files!
|
||||
If this is a crash, try to put `llvm-symbolizer` on your PATH per the troubleshooting instructions.
|
||||
(If you're using Windows, place the associated PDB file (debug symbols) in the same directory as
|
||||
clangd.exe and rerun again. For official releases, download symbols from the
|
||||
[release page](https://github.com/clangd/clangd/releases).)
|
||||
|
||||
**System information**
|
||||
|
||||
Output of `clangd --version`:
|
||||
|
||||
Editor/LSP plugin:
|
||||
|
||||
Operating system:
|
4
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
4
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
contact_links:
|
||||
- name: Questions and discussions
|
||||
url: https://github.com/clangd/clangd/discussions
|
||||
about: Usage questions, ideas and proposals
|
10
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
10
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for clangd
|
||||
title: ''
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
|
13
.github/ISSUE_TEMPLATE/release_cherrypick.md
vendored
Normal file
13
.github/ISSUE_TEMPLATE/release_cherrypick.md
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
---
|
||||
name: Cherry-pick for release
|
||||
about: Nominate a bug fix to be backported to the current release branch
|
||||
title: 'Cherrypick: '
|
||||
labels: cherrypick
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Commit:
|
||||
- llvm/llvm-project@
|
||||
|
||||
Why is this important or safe?
|
15
.github/actions/pick/action.yml
vendored
15
.github/actions/pick/action.yml
vendored
@ -1,15 +0,0 @@
|
||||
name: 'Pick commit'
|
||||
description: 'Pick last successful commit from a repo'
|
||||
inputs:
|
||||
repo:
|
||||
description: 'Github repository e.g. llvm/llvm-project'
|
||||
required: true
|
||||
token:
|
||||
description: 'Github auth token'
|
||||
required: true
|
||||
outputs:
|
||||
sha:
|
||||
description: 'The SHA1 of the picked commit'
|
||||
runs:
|
||||
using: 'node12'
|
||||
main: 'index.js'
|
18
.github/actions/pick/index.js
vendored
18
.github/actions/pick/index.js
vendored
@ -1,18 +0,0 @@
|
||||
const core = require('@actions/core');
|
||||
const last = require('last-successful-gh-commit').default;
|
||||
try {
|
||||
var parts = core.getInput('repo').split('/', 2);
|
||||
last({
|
||||
owner: parts[0],
|
||||
name: parts[1],
|
||||
token: core.getInput('token'),
|
||||
})
|
||||
.then(commit => core.setOutput('sha', commit.node.oid))
|
||||
.catch(error => {
|
||||
console.error(error);
|
||||
core.setFailed(error.message);
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
core.setFailed(error.message);
|
||||
}
|
56
.github/actions/pick/package-lock.json
generated
vendored
56
.github/actions/pick/package-lock.json
generated
vendored
@ -1,56 +0,0 @@
|
||||
{
|
||||
"name": "pick",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"@actions/core": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.2.tgz",
|
||||
"integrity": "sha512-IbCx7oefq+Gi6FWbSs2Fnw8VkEI6Y4gvjrYprY3RV//ksq/KPMlClOerJ4jRosyal6zkUIc8R9fS/cpRMlGClg=="
|
||||
},
|
||||
"axios": {
|
||||
"version": "0.16.2",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.16.2.tgz",
|
||||
"integrity": "sha1-uk+S8XFn37q0CYN4VFS5rBScPG0=",
|
||||
"requires": {
|
||||
"follow-redirects": "^1.2.3",
|
||||
"is-buffer": "^1.1.5"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
|
||||
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
|
||||
"requires": {
|
||||
"ms": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.10.0",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.10.0.tgz",
|
||||
"integrity": "sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ==",
|
||||
"requires": {
|
||||
"debug": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"is-buffer": {
|
||||
"version": "1.1.6",
|
||||
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
|
||||
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
|
||||
},
|
||||
"last-successful-gh-commit": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/last-successful-gh-commit/-/last-successful-gh-commit-1.0.1.tgz",
|
||||
"integrity": "sha1-8Mn8HfEvb764g/5vrcy3W4p5EVo=",
|
||||
"requires": {
|
||||
"axios": "^0.16.2"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||
}
|
||||
}
|
||||
}
|
14
.github/actions/pick/package.json
vendored
14
.github/actions/pick/package.json
vendored
@ -1,14 +0,0 @@
|
||||
{
|
||||
"name": "pick",
|
||||
"version": "1.0.0",
|
||||
"description": "Pick the last successful commit from a github repo",
|
||||
"main": "index.js",
|
||||
"scripts": {},
|
||||
"keywords": [],
|
||||
"author": "sam.mccall@gmail.com",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.2.2",
|
||||
"last-successful-gh-commit": "^1.0.1"
|
||||
}
|
||||
}
|
345
.github/workflows/autobuild.yaml
vendored
345
.github/workflows/autobuild.yaml
vendored
@ -1,78 +1,205 @@
|
||||
# Workflow to build binaries for a release.
|
||||
# Triggered by release creation, which should include `llvm-project@<full-sha>`.
|
||||
# Workflow to build binaries and release them.
|
||||
# Triggered by the schedule or manual dispatch, which might include
|
||||
# `<owner/llvm-project>@<full-sha>`.
|
||||
#
|
||||
# Because the build takes more than an hour, our GITHUB_TOKEN credentials may
|
||||
# expire. A token `secrets.RELEASE_TOKEN` must exist with public_repo scope.
|
||||
name: Build release binaries
|
||||
env:
|
||||
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true
|
||||
on:
|
||||
release:
|
||||
types: created
|
||||
# Run weekly on sunday at 21:37 UTC (arbitrary)
|
||||
schedule:
|
||||
- cron: '37 21 * * SUN'
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
commit:
|
||||
description: 'Commit to build from'
|
||||
required: true
|
||||
repo:
|
||||
description: 'Repository to build from'
|
||||
required: true
|
||||
default: 'llvm/llvm-project'
|
||||
release_name:
|
||||
description: 'Release name'
|
||||
required: true
|
||||
tag:
|
||||
description: 'Tag name'
|
||||
required: true
|
||||
description:
|
||||
description: 'Release description'
|
||||
required: true
|
||||
jobs:
|
||||
prepare:
|
||||
schedule_environment:
|
||||
name: Create default build environment
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event_name == 'schedule' }}
|
||||
steps:
|
||||
- name: Find LLVM commit
|
||||
- name: Install deps
|
||||
run: |
|
||||
grep -m 1 -o "llvm-project@[[:xdigit:]]\{40,\}" << EOF | cut -f 2 -d@ > commit
|
||||
${{ github.event.release.body }}
|
||||
EOF
|
||||
- name: Mark as draft
|
||||
sudo apt-get install jq
|
||||
- name: Clone scripts
|
||||
uses: actions/checkout@v2
|
||||
# Choose the commit to build a release from.
|
||||
#
|
||||
# We want to avoid unbuildable revisions: choose the last green from CI.
|
||||
# FIXME: The criteria should be some consistent set of buildbots passing.
|
||||
# Use clangd/actions/pick after
|
||||
# https://github.com/ramasilveyra/last-successful-gh-commit/issues/2 has
|
||||
# been addressed.
|
||||
- name: Get commit hash for LLVM head
|
||||
run: >
|
||||
curl --fail --show-error -XPATCH
|
||||
"-HAuthorization: Bearer ${{ secrets.RELEASE_TOKEN }}"
|
||||
"https://api.github.com/repos/${{ github.repository }}/releases/${{ github.event.release.id }}"
|
||||
"-d" '{"draft": true}'
|
||||
- name: Persist release info
|
||||
uses: actions/upload-artifact@v1
|
||||
COMMIT=$(curl --fail --show-error
|
||||
"https://api.github.com/repos/llvm/llvm-project/commits/main" |
|
||||
jq ".sha" -r)
|
||||
|
||||
echo "LLVM_COMMIT=$COMMIT" >> $GITHUB_ENV
|
||||
- name: Compute release info
|
||||
run: |
|
||||
echo "RELEASE_COMMIT_SHORT=$(printf '%.12s' ${{ env.LLVM_COMMIT }})" >> $GITHUB_ENV
|
||||
echo "RELEASE_DATE=$(date -u +%Y%m%d)" >> $GITHUB_ENV
|
||||
echo "LLVM_REPO=llvm/llvm-project" >> commit.env
|
||||
echo "LLVM_COMMIT=${{ env.LLVM_COMMIT }}" >> commit.env
|
||||
- name: Use date as the tag name
|
||||
run: >
|
||||
echo "TAG_NAME=snapshot_${{ env.RELEASE_DATE }}" >> commit.env
|
||||
- name: Use date and release commit as release name
|
||||
run: >
|
||||
echo "RELEASE_NAME=${{ env.RELEASE_DATE }} @${{ env.RELEASE_COMMIT_SHORT }}" >> commit.env
|
||||
- name: Generate default release description
|
||||
run: >
|
||||
echo "RELEASE_DESCRIPTION=Unstable snapshot of clangd on ${{ env.RELEASE_DATE }}." >> commit.env
|
||||
- name: Upload result
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: env
|
||||
path: commit.env
|
||||
workflow_dispatch_environment:
|
||||
name: Use inputs to create build environment
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event_name == 'workflow_dispatch' }}
|
||||
steps:
|
||||
- name: Use repo and commit from the inputs
|
||||
run: |
|
||||
echo "LLVM_REPO=${{ github.event.inputs.repo }}" >> commit.env
|
||||
echo "LLVM_COMMIT=${{ github.event.inputs.commit }}" >> commit.env
|
||||
echo "TAG_NAME=${{ github.event.inputs.tag }}" >> commit.env
|
||||
echo "RELEASE_NAME=${{ github.event.inputs.release_name }}" >> commit.env
|
||||
echo "RELEASE_DESCRIPTION=${{ github.event.inputs.description }}" >> commit.env
|
||||
- name: Upload result
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: env
|
||||
path: commit.env
|
||||
create_release:
|
||||
name: Create release
|
||||
runs-on: ubuntu-latest
|
||||
needs: [schedule_environment, workflow_dispatch_environment]
|
||||
# Use always() and manually check results here since GitHub Actions do not
|
||||
# support conditionally skipping jobs and there is no way to "exit with
|
||||
# success" from a job.
|
||||
if: always() && (needs.schedule_environment.result == 'success' || needs.workflow_dispatch_environment.result == 'success')
|
||||
steps:
|
||||
- name: Fetch environment variables
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name:
|
||||
env
|
||||
path:
|
||||
env
|
||||
- name: Set environment variables
|
||||
run: |
|
||||
cat env/commit.env >> $GITHUB_ENV
|
||||
- name: Create release
|
||||
uses: actions/create-release@master
|
||||
id: create_release
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
release_name: ${{ env.RELEASE_NAME }}
|
||||
body: |
|
||||
${{ env.RELEASE_DESCRIPTION }}
|
||||
|
||||
Built from ${{ env.LLVM_REPO }}@${{ env.LLVM_COMMIT }}.
|
||||
prerelease: true
|
||||
draft: true
|
||||
- name: Preserve release info
|
||||
run: |
|
||||
echo "UPLOAD_URL=${{ steps.create_release.outputs.upload_url }}" >> release.env
|
||||
echo "TAG_NAME=${{ env.TAG_NAME }}" >> release.env
|
||||
echo "RELEASE_ID=${{ steps.create_release.outputs.id }}" >> release.env
|
||||
- name: Upload result
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: release
|
||||
path: commit
|
||||
path: release.env
|
||||
# Build clangd using CMake/Ninja.
|
||||
#
|
||||
# This step is a template that runs on each OS, build config varies slightly.
|
||||
# Uploading releases needs a per-job token that expires after an hour.
|
||||
build:
|
||||
name: Build ${{ matrix.config.name }}
|
||||
needs: prepare
|
||||
runs-on: ${{ matrix.config.os }}
|
||||
needs: create_release
|
||||
if: always() && needs.create_release.result == 'success'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
config:
|
||||
- name: windows
|
||||
os: windows-latest
|
||||
preinstall: choco install ninja
|
||||
os: windows-2019
|
||||
preinstall: choco install ninja nasm
|
||||
vcvars: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat
|
||||
# FIXME: remove ALLOW_OLD_TOOLCHAIN once VS 16.5 is available.
|
||||
cmake: >
|
||||
cflags: /O2 /DNDEBUG
|
||||
cmake: >-
|
||||
"-DCMAKE_C_COMPILER=cl"
|
||||
"-DCMAKE_CXX_COMPILER=cl"
|
||||
"-DCMAKE_CXX_FLAGS_RELEASE=/O2 /DNDEBUG"
|
||||
"-DCMAKE_C_FLAGS_RELEASE=/O2 /DNDEBUG"
|
||||
"-DLLVM_ENABLE_ZLIB=OFF"
|
||||
"-DLLVM_USE_CRT_RELEASE=MT"
|
||||
"-DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON"
|
||||
"-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded"
|
||||
"-DLLVM_ENABLE_PDB=ON"
|
||||
"-DLLVM_PARALLEL_LINK_JOBS=1"
|
||||
grpc_cmake: >-
|
||||
"-DgRPC_MSVC_STATIC_RUNTIME=ON"
|
||||
binary_extension: ".exe"
|
||||
- name: mac
|
||||
os: macos-latest
|
||||
os: macos-13
|
||||
preinstall: brew install ninja zlib p7zip
|
||||
cmake: >
|
||||
cflags: -O3 -gline-tables-only -DNDEBUG
|
||||
cmake: >-
|
||||
"-DCMAKE_C_COMPILER=clang"
|
||||
"-DCMAKE_CXX_COMPILER=clang++"
|
||||
"-DCMAKE_C_FLAGS_RELEASE=-O3 -gline-tables-only -DNDEBUG"
|
||||
"-DCMAKE_CXX_FLAGS_RELEASE=-O3 -gline-tables-only -DNDEBUG"
|
||||
"-DLLVM_ENABLE_ZLIB=FORCE_ON"
|
||||
"-DCMAKE_OSX_ARCHITECTURES=x86_64;arm64"
|
||||
"-DCMAKE_OSX_DEPLOYMENT_TARGET=10.13"
|
||||
# BoringSSL doesn't support universal binaries when building with ASM.
|
||||
grpc_cmake: >-
|
||||
"-DOPENSSL_NO_ASM=ON"
|
||||
- name: linux
|
||||
os: ubuntu-latest
|
||||
preinstall: sudo apt-get install ninja-build libz-dev
|
||||
cmake: >
|
||||
"-DCMAKE_C_COMPILER=clang"
|
||||
"-DCMAKE_CXX_COMPILER=clang++"
|
||||
"-DCMAKE_CXX_FLAGS_RELEASE=-O3 -gline-tables-only -DNDEBUG"
|
||||
"-DCMAKE_C_FLAGS_RELEASE=-O3 -gline-tables-only -DNDEBUG"
|
||||
container: ubuntu:20.04
|
||||
preinstall: >-
|
||||
apt-get update &&
|
||||
apt-get install -y ninja-build libz-dev libc-ares-dev wget clang-9
|
||||
software-properties-common p7zip-full curl &&
|
||||
add-apt-repository ppa:git-core/ppa &&
|
||||
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | apt-key add - &&
|
||||
apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main' &&
|
||||
apt-get update &&
|
||||
apt-get install -y git cmake python3.8 python3.8-dev
|
||||
cflags: -O3 -gline-tables-only -DNDEBUG -include $GITHUB_WORKSPACE/.github/workflows/lib_compat.h
|
||||
cmake: >-
|
||||
"-DCMAKE_C_COMPILER=clang-9"
|
||||
"-DCMAKE_CXX_COMPILER=clang++-9"
|
||||
"-DCMAKE_EXE_LINKER_FLAGS_RELEASE=-static-libgcc -Wl,--compress-debug-sections=zlib"
|
||||
"-DLLVM_STATIC_LINK_CXX_STDLIB=ON"
|
||||
"-DLLVM_ENABLE_ZLIB=FORCE_ON"
|
||||
"-DZLIB_LIBRARY=/usr/lib/x86_64-linux-gnu/libz.a"
|
||||
"-DCMAKE_PROJECT_INCLUDE=$GITHUB_WORKSPACE/.github/workflows/linux-static-deps.cmake"
|
||||
# Using c-ares as a module prevents dynamic linking of unneeded
|
||||
# libraries. All other gRPC dependencies can be built from sources.
|
||||
grpc_cmake: >-
|
||||
"-DgRPC_CARES_PROVIDER=package"
|
||||
runs-on: ${{ matrix.config.os }}
|
||||
container: ${{ matrix.config.container }}
|
||||
steps:
|
||||
- name: Clone scripts
|
||||
uses: actions/checkout@v2
|
||||
@ -88,20 +215,65 @@ jobs:
|
||||
run: |
|
||||
cmd /c "`"${{ matrix.config.vcvars }}`">NUL && set" | Foreach-Object {
|
||||
$name, $value = $_ -split '=', 2
|
||||
if ($value) { echo "::set-env name=$($name)::$($value)" }
|
||||
if ($value) {
|
||||
echo "$($name)=$($value)" >> $env:GITHUB_ENV
|
||||
}
|
||||
}
|
||||
- name: Clone gRPC
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: grpc/grpc
|
||||
path: grpc
|
||||
# We use the same version of gRPC for LLVM's clangd-ubuntu-tsan
|
||||
# buildbot.
|
||||
# https://github.com/llvm/llvm-zorg/blob/main/buildbot/google/docker/buildbot-clangd-ubuntu-clang/Dockerfile
|
||||
ref: v1.36.3
|
||||
submodules: recursive
|
||||
- name: Build gRPC
|
||||
run: >
|
||||
mkdir $HOME/grpc-installation
|
||||
|
||||
mkdir grpc-build
|
||||
|
||||
cmake -G Ninja -S grpc -B grpc-build
|
||||
"-DgRPC_INSTALL=ON"
|
||||
"-DCMAKE_INSTALL_PREFIX=$HOME/grpc-installation"
|
||||
"-DCMAKE_BUILD_TYPE=Release"
|
||||
"-DCMAKE_C_FLAGS_RELEASE=${{ matrix.config.cflags }}"
|
||||
"-DCMAKE_CXX_FLAGS_RELEASE=${{ matrix.config.cflags }}"
|
||||
${{ matrix.config.grpc_cmake }} ${{ matrix.config.cmake }}
|
||||
|
||||
ninja -C grpc-build install
|
||||
- name: Fetch target commit
|
||||
uses: actions/download-artifact@v1
|
||||
with: { name: release }
|
||||
- name: Set target commit
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name:
|
||||
env
|
||||
path:
|
||||
env
|
||||
- name: Fetch release info
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name:
|
||||
release
|
||||
path:
|
||||
release
|
||||
- name: Put release info into env
|
||||
run: |
|
||||
echo ::set-env name=LLVM_COMMIT::$(cat release/commit)
|
||||
echo ::set-env name=CLANGD_DIR::clangd_${{ github.event.release.tag_name }}
|
||||
cat env/commit.env >> $GITHUB_ENV
|
||||
cat release/release.env >> $GITHUB_ENV
|
||||
shell: bash
|
||||
# Use environment variables set above to create a directory. This needs
|
||||
# to be a separate step because they are not in the context yet when
|
||||
# being set.
|
||||
- name: Set build directory
|
||||
run: |
|
||||
echo "CLANGD_DIR=clangd_${{ env.TAG_NAME }}" >> $GITHUB_ENV
|
||||
shell: bash
|
||||
- name: Clone LLVM
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: llvm/llvm-project
|
||||
repository: ${{ env.LLVM_REPO }}
|
||||
path: llvm-project
|
||||
ref: ${{ env.LLVM_COMMIT }}
|
||||
- name: CMake
|
||||
@ -111,43 +283,98 @@ jobs:
|
||||
cp llvm-project/llvm/LICENSE.TXT ${{ env.CLANGD_DIR }}
|
||||
|
||||
cmake -G Ninja -S llvm-project/llvm -B ${{ env.CLANGD_DIR }}
|
||||
"-DLLVM_ENABLE_PROJECTS=clang;clang-tools-extra"
|
||||
"-DLLVM_ENABLE_PROJECTS=clang;clang-tools-extra;openmp"
|
||||
"-DLLVM_ENABLE_ASSERTIONS=OFF"
|
||||
"-DLLVM_ENABLE_BACKTRACES=ON"
|
||||
"-DLLVM_ENABLE_TERMINFO=OFF"
|
||||
"-DCMAKE_BUILD_TYPE=Release"
|
||||
"-DCLANG_PLUGIN_SUPPORT=OFF"
|
||||
"-DLLVM_ENABLE_PLUGINS=OFF"
|
||||
"-DCMAKE_C_FLAGS_RELEASE=${{ matrix.config.cflags }}"
|
||||
"-DCMAKE_CXX_FLAGS_RELEASE=${{ matrix.config.cflags }}"
|
||||
"-DCLANGD_ENABLE_REMOTE=ON"
|
||||
"-DLLVM_ENABLE_ZSTD=OFF"
|
||||
"-DGRPC_INSTALL_PATH=$HOME/grpc-installation"
|
||||
${{ matrix.config.cmake }}
|
||||
- name: Ninja
|
||||
run: ninja -C ${{ env.CLANGD_DIR }} clangd
|
||||
- name: Archive
|
||||
run: >
|
||||
ninja -C ${{ env.CLANGD_DIR }} clangd clangd-indexer clangd-index-server
|
||||
clangd-index-server-monitor
|
||||
- name: Install OpenMP headers
|
||||
shell: bash
|
||||
run: >
|
||||
cp ${{ env.CLANGD_DIR }}/projects/openmp/runtime/src/omp{,-tools}.h ${{ env.CLANGD_DIR }}/lib/clang/*/include
|
||||
|| true # Don't let the non-existing omp headers block the release.
|
||||
- name: Archive clangd
|
||||
run: >
|
||||
7z a clangd.zip
|
||||
${{ env.CLANGD_DIR }}/LICENSE.TXT
|
||||
${{ env.CLANGD_DIR }}/bin/clangd*
|
||||
${{ env.CLANGD_DIR }}/bin/clangd${{ matrix.config.binary_extension }}
|
||||
${{ env.CLANGD_DIR }}/lib/clang
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: ${{ matrix.config.name }}
|
||||
path: clangd.zip
|
||||
- name: Upload asset
|
||||
- name: Archive clangd PDB symbols
|
||||
if: matrix.config.name == 'windows'
|
||||
run: >
|
||||
7z a clangd-pdb.7z -t7z -m0=LZMA2
|
||||
${{ env.CLANGD_DIR }}/LICENSE.TXT
|
||||
${{ env.CLANGD_DIR }}/bin/clangd.pdb
|
||||
- name: Archive indexing-tools
|
||||
run: >
|
||||
7z a indexing-tools.zip
|
||||
${{ env.CLANGD_DIR }}/LICENSE.TXT
|
||||
${{ env.CLANGD_DIR }}/bin/clangd-indexer${{ matrix.config.binary_extension }}
|
||||
${{ env.CLANGD_DIR }}/bin/clangd-index-server${{ matrix.config.binary_extension }}
|
||||
${{ env.CLANGD_DIR }}/bin/clangd-index-server-monitor${{ matrix.config.binary_extension }}
|
||||
${{ env.CLANGD_DIR }}/lib/clang
|
||||
- name: Upload clangd asset
|
||||
uses: actions/upload-release-asset@v1.0.1
|
||||
env: { GITHUB_TOKEN: "${{ secrets.RELEASE_TOKEN }}" }
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ github.event.release.upload_url }}
|
||||
asset_name: clangd-${{ matrix.config.name }}-${{ github.event.release.tag_name }}.zip
|
||||
upload_url: ${{ env.UPLOAD_URL }}
|
||||
asset_name: clangd-${{ matrix.config.name }}-${{ env.TAG_NAME }}.zip
|
||||
asset_path: clangd.zip
|
||||
asset_content_type: application/zip
|
||||
- name: Upload clangd PDB asset
|
||||
if: matrix.config.name == 'windows'
|
||||
uses: actions/upload-release-asset@v1.0.1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ env.UPLOAD_URL }}
|
||||
asset_name: clangd-${{ matrix.config.name }}-${{ env.TAG_NAME }}-debug-symbols.7z
|
||||
asset_path: clangd-pdb.7z
|
||||
asset_content_type: application/zip
|
||||
- name: Upload indexing-tools asset
|
||||
uses: actions/upload-release-asset@v1.0.1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ env.UPLOAD_URL }}
|
||||
asset_name: clangd_indexing_tools-${{ matrix.config.name }}-${{ env.TAG_NAME }}.zip
|
||||
asset_path: indexing-tools.zip
|
||||
asset_content_type: application/zip
|
||||
- name: Check binary compatibility
|
||||
if: matrix.config.name == 'linux'
|
||||
run: .github/workflows/lib_compat_test.py --lib=GLIBC_2.18 "$CLANGD_DIR/bin/clangd"
|
||||
# Create the release, and upload the artifacts to it.
|
||||
finalize:
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
if: always() && needs.build.result == 'success'
|
||||
steps:
|
||||
- name: Fetch release info
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name:
|
||||
release
|
||||
path:
|
||||
release
|
||||
- name: Update the env variables
|
||||
run: >
|
||||
cat release/release.env >> $GITHUB_ENV
|
||||
- name: Publish release
|
||||
run: >
|
||||
curl -XPATCH
|
||||
"-HAuthorization: Bearer ${{ secrets.RELEASE_TOKEN }}"
|
||||
"https://api.github.com/repos/${{ github.repository }}/releases/${{ github.event.release.id }}"
|
||||
"https://api.github.com/repos/${{ github.repository }}/releases/${{ env.RELEASE_ID }}"
|
||||
"-d" '{"draft": false}'
|
||||
|
21
.github/workflows/lib_compat.h
vendored
Normal file
21
.github/workflows/lib_compat.h
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
// This header forces the use of a particular version of glibc symbols.
|
||||
// This can make the resulting binary portable to systems with older glibcs.
|
||||
//
|
||||
// It must be included in each TU, with CFLAGS="-include glibc_compat.h" etc.
|
||||
//
|
||||
// We only list symbols known to be used. This is paired with a test enforcing
|
||||
// the max glibc symbol version. If the test fails, the list should be extended.
|
||||
// Find the old alternatives version to target with e.g.:
|
||||
// objdump -T /lib/x86_64-linux-gnu/lib{c,m,pthread,rt}.so.* | grep "\bexpf\b"
|
||||
|
||||
#define FORCE_SYMBOL_VERSION(sym, version) \
|
||||
__asm__(".symver " #sym "," #sym "@" #version)
|
||||
|
||||
FORCE_SYMBOL_VERSION(exp2, GLIBC_2.2.5);
|
||||
FORCE_SYMBOL_VERSION(expf, GLIBC_2.2.5);
|
||||
FORCE_SYMBOL_VERSION(log, GLIBC_2.2.5);
|
||||
FORCE_SYMBOL_VERSION(log2, GLIBC_2.2.5);
|
||||
FORCE_SYMBOL_VERSION(pow, GLIBC_2.2.5);
|
||||
FORCE_SYMBOL_VERSION(exp, GLIBC_2.2.5);
|
||||
|
||||
#undef FORCE_SYMBOL_VERSION
|
89
.github/workflows/lib_compat_test.py
vendored
Executable file
89
.github/workflows/lib_compat_test.py
vendored
Executable file
@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Verifies a binary uses only dynamic symbols from whitelisted library versions.
|
||||
# Prints the disallowed symbols and their versions on failure.
|
||||
# Usage: lib_compat_test.py bin/clangd --lib=GLIBC_2.18
|
||||
|
||||
import argparse
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("binary")
|
||||
parser.add_argument(
|
||||
"--lib",
|
||||
action="append",
|
||||
default=[],
|
||||
help="Whitelist a library, e.g. GLIBC_2.18 or GLIBC",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--sym", action="append", default=[], help="Whitelist a symbol, e.g. crc32"
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
# Parses GLIBC_2.3 into ("GLIBC", [2,3])
|
||||
# Parses GLIBC into ("GLIBC", None)
|
||||
def parse_version(version):
|
||||
parts = version.rsplit("_", 1)
|
||||
if len(parts) == 1:
|
||||
return (version, None)
|
||||
try:
|
||||
return (parts[0], [int(p) for p in parts[1].split(".")])
|
||||
except ValueError:
|
||||
return (version, None)
|
||||
|
||||
|
||||
lib_versions = dict([parse_version(v) for v in args.lib])
|
||||
|
||||
# Determines whether all symbols with version 'lib' are acceptable.
|
||||
# A versioned library is name_x.y.z by convention.
|
||||
def accept_lib(lib):
|
||||
(lib, ver) = parse_version(lib)
|
||||
if not lib in lib_versions: # Non-whitelisted library.
|
||||
return False
|
||||
if lib_versions[lib] is None: # Unrestricted version
|
||||
return True
|
||||
if ver is None: # Lib has non-numeric version, library restricts version.
|
||||
return False
|
||||
return ver <= lib_versions[lib]
|
||||
|
||||
|
||||
# Determines whether an optionally-versioned symbol is acceptable.
|
||||
# A versioned symbol is symbol@version as output by nm.
|
||||
def accept_symbol(sym):
|
||||
if sym in args.sym:
|
||||
return True
|
||||
split = sym.split("@", 1)
|
||||
return (split[0] in args.sym) or (len(split) == 2 and accept_lib(split[1]))
|
||||
|
||||
|
||||
# Run nm to find the undefined symbols, and check whether each is acceptable.
|
||||
nm = subprocess.run(
|
||||
["nm", "-uD", "--with-symbol-version", args.binary],
|
||||
stdout=subprocess.PIPE,
|
||||
universal_newlines=True,
|
||||
)
|
||||
nm.check_returncode()
|
||||
status = 0
|
||||
for line in nm.stdout.splitlines():
|
||||
# line = " U foo@GLIBC_2.3"
|
||||
parts = line.split()
|
||||
if len(parts) != 2:
|
||||
print("Unparseable nm output: ", line, file=sys.stderr)
|
||||
status = 2
|
||||
continue
|
||||
if parts[0] == "w": # Weak-undefined symbol, not actually required.
|
||||
continue
|
||||
if not accept_symbol(parts[1]):
|
||||
print(parts[1])
|
||||
status = 1
|
||||
if status == 1:
|
||||
print(
|
||||
"Binary depends on disallowed symbols above. Use some combination of:\n"
|
||||
" - relax the whitelist by adding --lib and --sym flags to this test\n"
|
||||
" - force older symbol versions by updating lib_compat.h\n"
|
||||
" - avoid dynamic dependencies by changing CMake configuration\n"
|
||||
" - remove bad dependencies from the code",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(status)
|
3
.github/workflows/linux-static-deps.cmake
vendored
Normal file
3
.github/workflows/linux-static-deps.cmake
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
# Convince find_package() to link against libz.a instead of libz.so.
|
||||
# The default is ".so;.a", meaning dynamic libraries are preferred.
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
55
.github/workflows/periodic.yaml
vendored
55
.github/workflows/periodic.yaml
vendored
@ -1,55 +0,0 @@
|
||||
# Workflow to create an auto-buildable release periodically.
|
||||
#
|
||||
# Releases created with automation credentials don't trigger workflows.
|
||||
# Therefore a token `secrets.RELEASE_TOKEN` must exist with public_repo scope.
|
||||
name: Periodic release
|
||||
on:
|
||||
# Run weekly on sunday at 21:37 UTC (arbitrary)
|
||||
schedule:
|
||||
- cron: '37 21 * * SUN'
|
||||
# Allow triggering manually:
|
||||
# curl -XPOST -d '{"event_type":"periodic"}' \
|
||||
# "-HAuthorization: Bearer <token>" \
|
||||
# https://api.github.com/repos/clangd/clangd/dispatches
|
||||
repository_dispatch: { types: periodic }
|
||||
jobs:
|
||||
# Choose the commit to build a release from.
|
||||
#
|
||||
# We want to avoid unbuildable revisions: choose the last green from CI.
|
||||
# FIXME: the criteria should be some consistent set of buildbots passing.
|
||||
pick:
|
||||
name: Create draft release
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Clone scripts
|
||||
uses: actions/checkout@v2
|
||||
- name: Install NPM dependencies
|
||||
run: npm install --prefix .github/actions/pick
|
||||
- name: Pick last successful commit
|
||||
id: pick
|
||||
uses: ./.github/actions/pick
|
||||
with:
|
||||
repo: llvm/llvm-project
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Compute release info
|
||||
run: |
|
||||
echo ::set-env name=RELEASE_COMMIT_SHORT::$(printf "%.12s" ${{ steps.pick.outputs.sha }})
|
||||
echo ::set-env name=RELEASE_DATE::$(date -u +%Y%m%d)
|
||||
- name: Create release
|
||||
uses: actions/create-release@master
|
||||
id: release
|
||||
env: { GITHUB_TOKEN: "${{ secrets.RELEASE_TOKEN }}" }
|
||||
with:
|
||||
tag_name: snapshot_${{ env.RELEASE_DATE }}
|
||||
release_name: ${{ env.RELEASE_DATE }} @${{ env.RELEASE_COMMIT_SHORT }}
|
||||
body: |
|
||||
Unstable snapshot of clangd on ${{ env.RELEASE_DATE }}.
|
||||
|
||||
Built from llvm/llvm-project@${{ steps.pick.outputs.sha }}.
|
||||
prerelease: true
|
||||
# It would be nice to use draft releases, to hide them from users.
|
||||
# But drafts don't fire events to trigger the autobuild workflow.
|
||||
# Instead, that workflow marks the release as draft until it's built.
|
||||
# As a result, the empty release will be briefly visible to users.
|
||||
draft: false
|
||||
|
219
LICENSE
Normal file
219
LICENSE
Normal file
@ -0,0 +1,219 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
|
||||
--- LLVM Exceptions to the Apache 2.0 License ----
|
||||
|
||||
As an exception, if, as a result of your compiling your source code, portions
|
||||
of this Software are embedded into an Object form of such source code, you
|
||||
may redistribute such embedded portions in such Object form without complying
|
||||
with the conditions of Sections 4(a), 4(b) and 4(d) of the License.
|
||||
|
||||
In addition, if you combine or link compiled forms of this Software with
|
||||
software that is licensed under the GPLv2 ("Combined Software") and if a
|
||||
court of competent jurisdiction determines that the patent provision (Section
|
||||
3), the indemnity provision (Section 9) or other Section of the License
|
||||
conflicts with the conditions of the GPLv2, you may retroactively and
|
||||
prospectively choose to deem waived or otherwise exclude such Section(s) of
|
||||
the License, but only in their entirety and only with respect to the Combined
|
||||
Software.
|
||||
|
17
README.md
17
README.md
@ -3,8 +3,17 @@
|
||||
clangd is a language server, and provides C++ IDE features to editors.
|
||||
This is not its documentation.
|
||||
|
||||
- the **website** is https://clangd.github.io/.
|
||||
- the **website** is https://clangd.llvm.org/.
|
||||
- the **bug tracker** is in this repository: https://github.com/clangd/clangd/issues
|
||||
- the **source code** is hosted at http://llvm.org/, and mirrored at
|
||||
https://github.com/llvm/llvm-project/tree/master/clang-tools-extra/clangd.
|
||||
- the **website source code** is at https://github.com/clangd/clangd.github.io/
|
||||
- the **source code** is hosted at https://github.com/llvm/llvm-project/tree/main/clang-tools-extra/clangd.
|
||||
- the **website source code** is at https://github.com/llvm/clangd-www/
|
||||
|
||||
### Communication channels
|
||||
|
||||
If you have any questions or feedback, you can reach community and developers
|
||||
through one of these channels:
|
||||
|
||||
- chat: #clangd room hosted on [LLVM's Discord
|
||||
channel](https://discord.gg/xS7Z362).
|
||||
- user questions and feature requests can be asked in the clangd topic on [LLVM
|
||||
Discussion Forums](https://llvm.discourse.group/c/llvm-project/clangd/34)
|
||||
|
1
logo/.gitignore
vendored
Normal file
1
logo/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
card-*.png
|
21
logo/build.sh
Executable file
21
logo/build.sh
Executable file
@ -0,0 +1,21 @@
|
||||
#!/bin/bash -ex
|
||||
|
||||
SMALLER="-strip -define png:compression-filter=3"
|
||||
PAD_TO="-background none -gravity center -extent"
|
||||
LOGO_ONLY="--export-id=CD --export-background-opacity=0"
|
||||
CONTRAST="-level 20%,100%,1.4"
|
||||
inkscape clangd.svg $LOGO_ONLY --export-plain-svg=logo.svg
|
||||
inkscape clangd.svg --export-png=card.png -h=640
|
||||
mogrify $SMALLER card.png
|
||||
inkscape clangd.svg --export-png=logo.png -h=1024 $LOGO_ONLY
|
||||
mogrify $SMALLER $PAD_TO 1024x1024 logo.png
|
||||
inkscape clangd.svg --export-png=favicon.png -h=16 $LOGO_ONLY --export-area-snap
|
||||
mogrify -define png:exclude-chunk=all $CONTRAST $PAD_TO 16x16 favicon.png
|
||||
|
||||
# Set CARD="vscode coc www" to generate cards with subtitles.
|
||||
for CARD in $CARDS; do
|
||||
xmlstarlet < clangd.svg edit -P \
|
||||
--update "//*[@id='subtitle']/*[local-name()='tspan']" --value "$CARD" \
|
||||
| inkscape - --export-png=card-$CARD.png -h=640
|
||||
mogrify $SMALLER card-$CARD.png
|
||||
done
|
BIN
logo/card.png
Normal file
BIN
logo/card.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 50 KiB |
190
logo/clangd.svg
Normal file
190
logo/clangd.svg
Normal file
@ -0,0 +1,190 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="200mm"
|
||||
height="100mm"
|
||||
viewBox="0 0 200 100"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:export-filename="/home/sammccall/card.png"
|
||||
inkscape:export-xdpi="162.56"
|
||||
inkscape:export-ydpi="162.56"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="clangd.svg">
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6203">
|
||||
<stop
|
||||
id="stop6201"
|
||||
offset="0"
|
||||
style="stop-color:#f0f8a0;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#c1e0a4;stop-opacity:1;"
|
||||
offset="0.75"
|
||||
id="stop6272" />
|
||||
<stop
|
||||
id="stop6199"
|
||||
offset="1"
|
||||
style="stop-color:#5aab7b;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6195">
|
||||
<stop
|
||||
style="stop-color:#0f5499;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop6191" />
|
||||
<stop
|
||||
style="stop-color:#0ed6ff;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop6193" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient6119"
|
||||
osb:paint="solid">
|
||||
<stop
|
||||
style="stop-color:#75af89;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6117" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6195"
|
||||
id="linearGradient6197"
|
||||
x1="87.3125"
|
||||
y1="236.14583"
|
||||
x2="109.80209"
|
||||
y2="199.10417"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-42.33333,27.781253)" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6203"
|
||||
id="radialGradient6287"
|
||||
cx="93.45755"
|
||||
cy="230.91721"
|
||||
fx="93.45755"
|
||||
fy="230.91721"
|
||||
r="20.843767"
|
||||
gradientTransform="matrix(-2.0309823,-8.6890853e-7,7.0332774e-7,-1.6935434,253.83964,637.53298)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6203"
|
||||
id="radialGradient6314"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-2.0309823,-8.6890853e-7,7.0332774e-7,-1.6935434,253.83964,637.53298)"
|
||||
cx="93.45755"
|
||||
cy="230.91721"
|
||||
fx="93.45755"
|
||||
fy="230.91721"
|
||||
r="20.843767" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6195"
|
||||
id="linearGradient6316"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-42.33333,27.781253)"
|
||||
x1="87.3125"
|
||||
y1="236.14583"
|
||||
x2="109.80209"
|
||||
y2="199.10417" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ecedea"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="1"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.5270238"
|
||||
inkscape:cx="402.76179"
|
||||
inkscape:cy="151.43033"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer2"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:window-width="1916"
|
||||
inkscape:window-height="1041"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="18"
|
||||
inkscape:window-maximized="0"
|
||||
fit-margin-top="10"
|
||||
inkscape:pagecheckerboard="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3780" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer2"
|
||||
inkscape:label="layer"
|
||||
style="display:inline"
|
||||
transform="translate(0,-197)"
|
||||
inkscape:groupmode="layer">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
x="87.181389"
|
||||
y="259.77109"
|
||||
id="clangd"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan6291"
|
||||
x="87.181389"
|
||||
y="259.77109"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.39999962px;font-family:'Noto Sans Mono';-inkscape-font-specification:'Noto Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">clangd</tspan></text>
|
||||
<g
|
||||
style="display:inline"
|
||||
id="CD"
|
||||
inkscape:label="CD">
|
||||
<path
|
||||
id="C"
|
||||
style="display:inline;fill:url(#radialGradient6314);fill-opacity:1;stroke:#055f25;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 63.5,225.5625 H 50.270837 c -13.229167,0 -26.458334,6.61458 -26.458334,26.45834 0,19.84374 13.229167,26.55586 26.599104,26.50658 L 63.5,278.47922 l 4e-5,-13.22917 H 50.270837 c 0,0 -12.705299,1e-4 -12.964614,-13.09685 -0.264553,-13.36153 12.964614,-13.36153 12.964614,-13.36153 H 63.5 Z"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="czsscccsccc"
|
||||
inkscape:export-xdpi="387.07999"
|
||||
inkscape:export-ydpi="387.07999"
|
||||
inkscape:label="C" />
|
||||
<path
|
||||
id="D"
|
||||
style="fill:url(#linearGradient6316);fill-opacity:1;stroke:#0d386b;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 64.82292,212.33333 h 10.58333 c 0.62363,0 1.32292,0.69929 1.32292,1.32292 v 50.27083 c 0,0.62363 -0.69929,1.32292 -1.32292,1.32292 H 63.5 50.270837 c 0,0 -12.612556,-1.5e-4 -12.924189,-13.37203 -0.304978,-13.0863 12.924189,-13.0863 12.924189,-13.0863 H 63.5 v -25.13542 c 0,-0.62363 0.69929,-1.32292 1.32292,-1.32292 z"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sssccccsccss"
|
||||
inkscape:label="D" />
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.11111069px;line-height:1.25;font-family:'Noto Sans Mono';-inkscape-font-specification:'Noto Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;opacity:1;fill:#5d5d5d;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
x="133.1293"
|
||||
y="277.50995"
|
||||
id="subtitle"
|
||||
inkscape:label="subtitle"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4561"> </tspan></text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.3 KiB |
BIN
logo/favicon.png
Normal file
BIN
logo/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 620 B |
BIN
logo/logo.png
Normal file
BIN
logo/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 83 KiB |
138
logo/logo.svg
Normal file
138
logo/logo.svg
Normal file
@ -0,0 +1,138 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
id="svg8"
|
||||
version="1.1"
|
||||
viewBox="0 0 54.916668 68.194359"
|
||||
height="68.194359mm"
|
||||
width="54.916668mm">
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
id="linearGradient6203">
|
||||
<stop
|
||||
style="stop-color:#f0f8a0;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop6201" />
|
||||
<stop
|
||||
id="stop6272"
|
||||
offset="0.75"
|
||||
style="stop-color:#c1e0a4;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#5aab7b;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop6199" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient6195">
|
||||
<stop
|
||||
id="stop6191"
|
||||
offset="0"
|
||||
style="stop-color:#0f5499;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop6193"
|
||||
offset="1"
|
||||
style="stop-color:#0ed6ff;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
osb:paint="solid"
|
||||
id="linearGradient6119">
|
||||
<stop
|
||||
id="stop6117"
|
||||
offset="0"
|
||||
style="stop-color:#75af89;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="translate(-42.33333,27.781253)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="199.10417"
|
||||
x2="109.80209"
|
||||
y1="236.14583"
|
||||
x1="87.3125"
|
||||
id="linearGradient6197"
|
||||
xlink:href="#linearGradient6195" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-2.0309823,-8.6890853e-7,7.0332774e-7,-1.6935434,253.83964,637.53298)"
|
||||
r="20.843767"
|
||||
fy="230.91721"
|
||||
fx="93.45755"
|
||||
cy="230.91721"
|
||||
cx="93.45755"
|
||||
id="radialGradient6287"
|
||||
xlink:href="#linearGradient6203" />
|
||||
<radialGradient
|
||||
r="20.843767"
|
||||
fy="230.91721"
|
||||
fx="93.45755"
|
||||
cy="230.91721"
|
||||
cx="93.45755"
|
||||
gradientTransform="matrix(-2.0309823,-8.6890853e-7,7.0332774e-7,-1.6935434,253.83964,637.53298)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient6314"
|
||||
xlink:href="#linearGradient6203" />
|
||||
<linearGradient
|
||||
y2="199.10417"
|
||||
x2="109.80209"
|
||||
y1="236.14583"
|
||||
x1="87.3125"
|
||||
gradientTransform="translate(-42.33333,27.781253)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6316"
|
||||
xlink:href="#linearGradient6195" />
|
||||
</defs>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(-22.812503,-211.33333)"
|
||||
style="display:inline"
|
||||
id="layer2">
|
||||
<text
|
||||
id="clangd"
|
||||
y="259.77109"
|
||||
x="87.181389"
|
||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.39999962px;font-family:'Noto Sans Mono';-inkscape-font-specification:'Noto Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
|
||||
y="259.77109"
|
||||
x="87.181389"
|
||||
id="tspan6291">clangd</tspan></text>
|
||||
<g
|
||||
id="CD"
|
||||
style="display:inline">
|
||||
<path
|
||||
d="M 63.5,225.5625 H 50.270837 c -13.229167,0 -26.458334,6.61458 -26.458334,26.45834 0,19.84374 13.229167,26.55586 26.599104,26.50658 L 63.5,278.47922 l 4e-5,-13.22917 H 50.270837 c 0,0 -12.705299,1e-4 -12.964614,-13.09685 -0.264553,-13.36153 12.964614,-13.36153 12.964614,-13.36153 H 63.5 Z"
|
||||
style="display:inline;fill:url(#radialGradient6314);fill-opacity:1;stroke:#055f25;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="C" />
|
||||
<path
|
||||
d="m 64.82292,212.33333 h 10.58333 c 0.62363,0 1.32292,0.69929 1.32292,1.32292 v 50.27083 c 0,0.62363 -0.69929,1.32292 -1.32292,1.32292 H 63.5 50.270837 c 0,0 -12.612556,-1.5e-4 -12.924189,-13.37203 -0.304978,-13.0863 12.924189,-13.0863 12.924189,-13.0863 H 63.5 v -25.13542 c 0,-0.62363 0.69929,-1.32292 1.32292,-1.32292 z"
|
||||
style="fill:url(#linearGradient6316);fill-opacity:1;stroke:#0d386b;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="D" />
|
||||
</g>
|
||||
<text
|
||||
id="subtitle"
|
||||
y="277.50995"
|
||||
x="133.1293"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.11111069px;line-height:1.25;font-family:'Noto Sans Mono';-inkscape-font-specification:'Noto Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;opacity:1;fill:#5d5d5d;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
xml:space="preserve"><tspan
|
||||
y="277.50995"
|
||||
x="137.35988"
|
||||
id="tspan4561"> </tspan></text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.6 KiB |
@ -8,7 +8,8 @@ is being able to cut releases easily whenever we want.
|
||||
The releases are just a zip archive containing the `clangd` binary, and the
|
||||
clang builtin headers. They should be runnable immediately after extracting the
|
||||
archive. The linux binary has `libstdc++` and other dependencies statically
|
||||
linked for maximum portability.
|
||||
linked for maximum portability, and requires glibc 2.18 (the first version with
|
||||
`thread_local` support).
|
||||
|
||||
## Creating a release manually
|
||||
|
||||
|
27
scripts/compile_flags_json.py
Executable file
27
scripts/compile_flags_json.py
Executable file
@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env python
|
||||
import os, sys, json
|
||||
|
||||
EXTS = ('.c','.C','.cpp','.cc','.cxx','.m','.mm'
|
||||
'.h','.H','.hpp','.hh','.hxx')
|
||||
|
||||
input = sys.argv[1] if len(sys.argv) > 1 else 'compile_flags.txt'
|
||||
driver = sys.argv[2] if len(sys.argv) > 2 else 'clang'
|
||||
with open(input) as f:
|
||||
flags = [line.strip() for line in f]
|
||||
|
||||
dir = os.path.dirname(os.path.abspath(input))
|
||||
|
||||
entries = []
|
||||
|
||||
for root, dirs, files in os.walk(dir):
|
||||
for file in files:
|
||||
ext = os.path.splitext(file)[1]
|
||||
if ext in EXTS:
|
||||
entries.append({
|
||||
'directory': dir,
|
||||
'file': os.path.join(dir, file),
|
||||
'arguments': [driver] + flags + [os.path.join(dir, file)]})
|
||||
|
||||
with open(os.path.join(dir, 'compile_commands.json'), 'w') as file:
|
||||
json.dump(entries, file, indent=2)
|
||||
|
Loading…
Reference in New Issue
Block a user