[ITP] clangd

Takashi Yano via Cygwin-apps <[email protected]> Sun, 18 Jan 2026 08:56:15 +0900
Newsgroups gmane.os.cygwin.applications
Message-ID <[email protected]>
clangd understands the C++ code and adds smart features to the editor:
code completion, compile errors, go-to-definition and more. clangd is
a language server that can work with many editors via plugins.

-- 
Takashi Yano <[email protected]>
clang_patches.tar.xz (application/octet-stream, 270 KB) - not displayed
clang++wrapper (text/plain, 341 B)
#!/bin/sh
if [ -z "${clang_resource_dir}" ]; then
	clang_resource_dir="$(clang++ -print-resource-dir)"
fi
/usr/bin/clang++ \
	-stdlib=libc++ -isystem /usr/include/c++/v1 \
	$@ \
	-L${clang_resource_dir}/lib/cygwin \
	-lc++ -lclang_rt.builtins-x86_64 -lunwind \
	-Wno-unused-command-line-argument \
	${additional_option_for_clang}
clangd.cygport (text/plain, 6.7 KB)
inherit cmake python3
NAME="clangd"
VERSION=20.1.8
RELEASE=1
CATEGORY="Devel"
SUMMARY="a language server for C/C++"
DESCRIPTION="clangd understands the C++ code and adds smart features to the editor: code completion, compile errors, go-to-definition and more. clangd is a language server that can work with many editors via plugins."
HOMEPAGE="https://clang.llvm.org/"
LICENSE="Apache-2.0 WITH LLVM-exception"
SRC_URI="
	https://github.com/llvm/llvm-project/releases/download/llvmorg-${PV}/llvm-project-${PV}.src.tar.xz
"
SRC_DIR="llvm-project-${PV}.src/llvm"

DISTCLEANFILES="
	test/tools/llvm-objcopy/COFF/exe-bogus-assoc.test
	../clang/lib/Driver/ToolChains/Cygwin.cpp
	../clang/lib/Driver/ToolChains/Cygwin.h
	../clang/test/CodeGen/X86/cygwin-varargs.c
	../clang/test/Driver/cygwin.cpp
	../clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/i686-pc-msys/bin/as
	../clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/i686-pc-msys/bin/ld
	../clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/i686-pc-msys/lib/.keep
	../clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/lib/gcc/i686-pc-msys/10/crtbegin.o
	../clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/lib/gcc/i686-pc-msys/10/crtend.o
	../clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/lib/gcc/x86_64-pc-cygwin/10/crtbegin.o
	../clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/lib/gcc/x86_64-pc-cygwin/10/crtend.o
	../clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/x86_64-pc-cygwin/bin/as
	../clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/x86_64-pc-cygwin/bin/ld
	../clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/x86_64-pc-cygwin/lib/.keep
	../clang/test/Driver/Inputs/basic_cygwin_tree/include/.keep
	../clang/test/Driver/Inputs/basic_cygwin_tree/lib/.keep
	../clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/c++/10/.keep
	../clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/i686-pc-cygwin/.keep
	../clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/i686-pc-cygwin/c++/10/.keep
	../clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/x86_64-pc-msys/.keep
	../clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/x86_64-pc-msys/c++/10/.keep
	../clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/crt0.o
	../clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/i686-pc-cygwin/10/crtbegin.o
	../clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/i686-pc-cygwin/10/crtbeginS.o
	../clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/i686-pc-cygwin/10/crtend.o
	../clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/x86_64-pc-msys/10/crtbegin.o
	../clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/x86_64-pc-msys/10/crtbeginS.o
	../clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/x86_64-pc-msys/10/crtend.o
	../clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/i686-pc-cygwin/.keep
	../clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/x86_64-pc-msys/.keep
"

PATCH_URI="
	0001-LLVM-Cygwin-Fix-symbol-visibility-definition.patch
	0002-LLVM-Cygwin-Remove-special-case-for-CXX-extensions-o.patch
	0003-LLVM-Cygwin-Fix-shared-library-name-136599.patch
	0004-LLVM-Cygwin-Fix-Signals-compatibility-with-Cygwin-AP.patch
	0005-LLVM-TargetParser-Handle-msys-targets-the-same-as-cy.patch
	0006-LLVM-Cygwin-Define-_GNU_SOURCE-on-Cygwin-as-well.-13.patch
	0007-Cygwin-Emit-COMDAT-name-correctly-for-Cygwin-138621.patch
	0008-LLVM-Cygwin-add-workaround-for-blocking-connect-acce.patch
	0009-Support-Cygwin-Fix-handling-of-Process-symbol-lookup.patch
	0010-Cygwin-Define-LLVM_ABI-for-Cygwin-143222.patch
	0011-Cygwin-CYGWIN-is-not-WIN32-in-current-CMake-143130.patch
	0012-Cygwin-Don-t-use-version-script-for-Cygwin-target-14.patch
	0013-LLVM-Tests-remove-exeext-from-lli-child-target-param.patch
	0014-LLVM-Support-Cygwin-Add-threading-support-for-Cygwin.patch
	0015-LLVM-Cygwin-Enable-dynamic-linking-of-libLLVM-146440.patch
	0016-LLVM-Cygwin-Enable-conditions-that-are-shared-with-M.patch
	0017-llvm-objcopy-COFF-Ignore-associative-sections-in-exe.patch
	0018-lli-Fix-crash-with-no-process-syms-on-MinGW-151386.patch
	0019-llvm-Enable-building-Analysis-plugins-on-Cygwin-1513.patch
	0020-LLVM-adjust-lit.cfg.py-for-Cygwin-151416.patch
"

CLANG_PATCHES="
	0101-Cygwin-Global-symbols-should-be-external-by-default-.patch
	0102-Clang-Cygwin-Enable-few-conditions-that-are-shared-w.patch
	0103-Cygwin-Enable-TLS-on-Cygwin-target-138618.patch
	0104-Clang-Cygwin-Fix-symbol-visibility-definition-138118.patch
	0105-Cygwin-RTTI-and-VTable-should-be-dllexport-ed-139798.patch
	0106-Clang-Cygwin-Disable-shared-libs-on-Cygwin-by-defaul.patch
	0107-Clang-Cygwin-Remove-erroneous-_WIN32-define-and-clea.patch
	0108-Clang-Cygwin-don-t-use-Bsymbolic-functions-138217.patch
	0109-hack-cygwin-allow-multiple-definition-in-c-index-tes.patch
	0110-Clang-Driver-add-a-Cygwin-ToolChain-135691.patch
	0111-Clang-Driver-use-__cxa_atexit-by-default-on-Cygwin.-.patch
	0112-Clang-CMake-use-CMakePushCheckState-138783.patch
	0113-CMake-respect-LLVMConfig.cmake-s-LLVM_DEFINITIONS.patch
	0114-Cygwin-Internal-class-in-explicitly-instantiation-de.patch
	0115-Cygwin-Template-instantiations-should-be-exported-by.patch
	0116-Clang-Cygwin-va_list-must-be-treated-like-normal-Win.patch
	0117-Clang-Cygwin-wint_t-is-unsigned-int-143117.patch
	0118-scan-build-Windows-Fix-driver-name-transformation-in.patch
	0119-libclang-Add-missing-dllexport-annotation-147108.patch
	0120-libclang-Cygwin-Use-__declspec-dllexport-for-libclan.patch
	0121-libclang-Cygwin-Use-LLVM_EXPORTED_SYMBOL_FILE-.def-f.patch
	0122-Tests-Add-system-cygwin-feature-and-use-it.-152611.patch
"
SRC_URI+=" ${CLANG_PATCHES}"
SRC_URI+=" clang++wrapper"

CYGPORT_USE_UNSTABLE_API=1

src_patch_hook() {
	sdir=$(pwd)
	for proj in clang; do
		eval list='$'${proj^^}_PATCHES
		pushd ../${proj}
		for pat in ${list}; do
			inform "applying patch ${pat} (-p2):"
			patch -p2 < ${sdir}/../../../../${pat}
		done
		popd
	done
}

src_compile() {
	echo "import myst_parser" | python3 || error "myst_parser required."
	if [ $(clang++ -dumpversion | cut -d. -f1) -ge 21 ]; then
		export additional_option_for_clang="
			-Wno-unnecessary-virtual-specifier
			-Wno-preferred-type-bitfield-enum-conversion
		"
	fi
	export clang_resource_dir=$(clang++ -print-resource-dir)
	cd ${B}
	CYGCMAKE_GENERATOR="Ninja"
	cygcmake \
		-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" \
		-DCMAKE_BUILD_TYPE=Release \
		-DCMAKE_C_COMPILER=/usr/bin/clang \
		-DCMAKE_CXX_COMPILER=${B}/../../clang++wrapper \
		-DLLVM_ENABLE_LIBCXX=ON
	cygninja clangd
}

src_install() {
	cd ${B}
	exeinto /usr/bin
	doexe bin/clangd.exe
#	doman share/man/man1/clangd.1
}

PKG_REQUIRES="libc++-devel" # needs c++ headers
BUILD_REQUIRES="
	clang
	libc++-devel
	compiler-rt
	libunwind-devel
	python3
	python39-sphinx
	python39-pytz
"
llvm_patches.tar.xz (application/octet-stream, 90 KB) - not displayed