[SOLVED] Using clangd with vscode to develop a flatpak
from unionagainstdhmo@aussie.zone to linux@lemmy.ml on 12 Jul 2024 06:56
https://aussie.zone/post/11597071

I’m developing a program in C++ targeting flatpak, since I’m on an immutable system I’d rather develop for flatpak than try using a container (plus I can’t get SDL to open a window in a container anyway). Everything works with GNOME Builder but it’s not as nice to use as vscode: less syntax highlighting, doesn’t reopen where I left off, can’t debug multiple instances (Not to say I don’t like GNOME Builder - it’s really good and will only get better, it’s just slowing me down at this point). I managed to get the flatpak building and debugging from within code, using the vscode-flatpak extension the only thing not working properly is clangd. I am using the meson build system.

This is probably a bit of a long shot, but has anyone else tried to do this?

BTW I’m not talking about using clangd with the vscode flatpak package

#linux

threaded - newest

DieserTypMatthias@lemmy.ml on 12 Jul 2024 08:40 next collapse

Just make a build script and then write a flatpak build file that’ll package it as a flatpak. Here’s an example.

unionagainstdhmo@aussie.zone on 12 Jul 2024 13:13 collapse

Not sure I follow. I’m talking about using the clangd language server to give me code completion, etc. when developing a flatpak application. I’ve already got it making the package and running it through the vscode debugger

DieserTypMatthias@lemmy.ml on 12 Jul 2024 15:42 collapse
Arality@lemmy.world on 12 Jul 2024 14:32 next collapse

I’m not sure I understand what you’re asking. It seems like you’re asking why your clangd extension isn’t working? But then you say:

BTW I’m not talking about using clangd with the vscode flatpak package

unionagainstdhmo@aussie.zone on 13 Jul 2024 02:29 collapse

I was asking about getting the clangd extension to work when developing an application against the freedesktop sdk as a flatpak. I’ve worked it out now, thanks for your interest

unionagainstdhmo@aussie.zone on 13 Jul 2024 02:21 collapse

I’ve worked it out, thanks for the responses, maybe I didn’t word the question properly or something, but here’s what I did for anyone interested in the future:

You only need to do this once for every machine you want to work on.

Add the llvm freedesktop sdk extensions to get a clangd executable to your flatpak manifest:

"sdk-extensions": [
        "org.freedesktop.Sdk.Extension.llvm18"
    ],

Install these extensions:

  • Native Debug
  • Flatpak
  • Meson Build
  • clangd (optional)

Run the Flatpak: Build command in the command palette (Ctrl+Shift+P) this might take a minute. Make sure you have the required sdks installed (see the manifest for details).

There should now be two folders: .flatpak and _build. There should also be a script generated at .flatpak/meson.sh. Run:

python gen-flatpak-scripts.py

This will generate .flatpak/gdb.sh and .flatpak/clangd.sh. If you want to use the clangd vscode extension extension add this to .vscode/settings.json:

"clangd.path": "./.flatpak/clangd.sh"

Now run the clangd: Restart language server command in the command palette (Ctrl+Shift+P) and you should be good to go!

gen-flatpak-scripts.py:

# Simple script to generate scripts to make life easy when using flatpak with vscode

import subprocess;

def gen_script(outfile, exec):
    with open(".flatpak/meson.sh", "rt") as fin:
        with open(outfile, "wt") as fout:
            for line in fin:
                fout.write(line.replace("/usr/bin/meson", exec))
    subprocess.run(["chmod", "+x", outfile])

# GDB for debugging
gen_script(".flatpak/gdb.sh", "/usr/bin/gdb")
# clangd for suggestions
gen_script(".flatpak/clangd.sh", "/usr/lib/sdk/llvm18/bin/clangd")