Skip to content

Commit

Permalink
Add wrappers for 'zig c++' to work around clangd
Browse files Browse the repository at this point in the history
  • Loading branch information
mrexodia committed Dec 3, 2024
1 parent 80b6c1a commit 56b384c
Show file tree
Hide file tree
Showing 10 changed files with 35 additions and 7 deletions.
19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,22 @@ You can create toolchains for other triples like this. Here is an example to bui
set(ZIG_TARGET "aarch64-windows-gnu")
include(${CMAKE_CURRENT_LIST_DIR}/zig-toolchain.cmake)
```

## clangd

To get [clangd](https://clangd.llvm.org/) to work you need to first enable generation of `compile_commands.json`:

```sh
cmake -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
```

Additionally you need to pass pass the following arguments to `clangd`:

```json
"clangd.arguments": [
"--log=verbose",
"--query-driver=*/clang-cl.exe,*/zig-cc.*,*/zig-c++.*,*/em++.bat,*/emcc.bat,*/em++,*/emcc",
]
```

Without these arguments `clangd` will not query the driver (`zig c++`) and the include paths will not be resolved correctly.
0 cmake/zig-ar.sh → cmake/zig-ar
100755 → 100644
File renamed without changes.
2 changes: 2 additions & 0 deletions cmake/zig-c++
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#!/bin/sh
zig c++ "$@"
2 changes: 2 additions & 0 deletions cmake/zig-c++.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
@echo off
zig c++ %*
2 changes: 2 additions & 0 deletions cmake/zig-cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#!/bin/sh
zig cc "$@"
2 changes: 2 additions & 0 deletions cmake/zig-cc.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
@echo off
zig cc %*
File renamed without changes.
0 cmake/zig-rc.sh → cmake/zig-rc
100755 → 100644
File renamed without changes.
4 changes: 2 additions & 2 deletions cmake/zig-toolchain-riscv64.cmake
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
set(ZIG_TARGET "riscv64-freestanding-none")
include(${CMAKE_CURRENT_LIST_DIR}/zig-toolchain.cmake)
set(ZIG_TARGET "riscv64-freestanding-none")
include(${CMAKE_CURRENT_LIST_DIR}/zig-toolchain.cmake)
11 changes: 6 additions & 5 deletions cmake/zig-toolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,16 @@ endif()
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR ${ZIG_ARCH})

set(CMAKE_C_COMPILER "zig" cc -target ${ZIG_TARGET})
set(CMAKE_CXX_COMPILER "zig" c++ -target ${ZIG_TARGET})

if(WIN32)
if(CMAKE_HOST_WIN32)
set(SCRIPT_SUFFIX ".cmd")
else()
set(SCRIPT_SUFFIX ".sh")
set(SCRIPT_SUFFIX "")
endif()

# Work around a bug in clangd where 'c++' is reordered on the command line
set(CMAKE_C_COMPILER "${CMAKE_CURRENT_LIST_DIR}/zig-cc${SCRIPT_SUFFIX}" -target ${ZIG_TARGET})
set(CMAKE_CXX_COMPILER "${CMAKE_CURRENT_LIST_DIR}/zig-c++${SCRIPT_SUFFIX}" -target ${ZIG_TARGET})

# This is working (thanks to Simon for finding this trick)
set(CMAKE_AR "${CMAKE_CURRENT_LIST_DIR}/zig-ar${SCRIPT_SUFFIX}")
set(CMAKE_RANLIB "${CMAKE_CURRENT_LIST_DIR}/zig-ranlib${SCRIPT_SUFFIX}")
Expand Down

0 comments on commit 56b384c

Please sign in to comment.