Commit 8b2d3243 authored by David Goulet's avatar David Goulet 🐼 Committed by George Kadianakis
Browse files

build: Add "make lsp" command



Generates the compile_commands.json file using the "bear" application so the
ccls server can be more efficient with our code base.

Closes #40227

Signed-off-by: David Goulet's avatarDavid Goulet <dgoulet@torproject.org>
parent 1430d5ff
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -37,6 +37,8 @@ details-*.json
uptime-*.json
*.full_url
*.last_modified
# ccls file that can be per directory.
*.ccls

# /
/Makefile
@@ -74,6 +76,7 @@ uptime-*.json
/Tor*Bundle.dmg
/tor-*-win32.exe
/warning_flags
/compile_commands.json

/coverage_html/
/callgraph/
+14 −0
Original line number Diff line number Diff line
@@ -725,3 +725,17 @@ show-libs:

show-testing-libs:
	@echo src/test/libtor-testing.a

# Note here that we hardcode this -j2 because if the user would pass too many
# cores, bear actually chockes and dies :S. For this to work, a make clean
# needs to be done else bear will miss some compile flags.
lsp:
	@if test -x "`which bear 2>&1;true`"; then \
		echo "Generating LSP compile_commands.json. Might take few minutes..."; \
		$(MAKE) clean 2>&1 >/dev/null; \
		bear >/dev/null 2>&1 -- $(MAKE) -j2 2>&1 >/dev/null; \
		echo "Generating .ccls file..."; \
		./scripts/maint/gen_ccls_file.sh \
	else \
		echo "No bear command found. On debian, apt install bear"; \
	fi

changes/ticket40227

0 → 100644
+4 −0
Original line number Diff line number Diff line
  o Minor feature (build system):
    - New "make lsp" command to auto generate the compile_commands.json file
      used by the ccls server. The "bear" program is needed for this. Closes
      ticket 40227.
+20 −0
Original line number Diff line number Diff line
#!/bin/sh

##############################################################################
# THIS MUST BE CALLED FROM THE ROOT DIRECTORY. IT IS USED BY THE MAKEFILE SO #
# IN THEORY, YOU SHOULD NEVER CALL THIS.                                     #
##############################################################################

set -e

CCLS_FILE=".ccls"

# Get all #define *_PRIVATE from our source. We need to list them in our .ccls
# file and enable them otherwise ccls will not find their definition thinking
# that they are dead code.
PRIVATE_DEFS=$(grep -r --include \*.h "_PRIVATE" | grep "#ifdef" | cut -d' ' -f2 | sort | uniq)

echo "clang" > "$CCLS_FILE"
for p in $PRIVATE_DEFS; do
  echo "-D$p" >> "$CCLS_FILE"
done