Skip Navigation

[SOLVED] Using clangd with vscode to develop a flatpak

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

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

  • 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")
    
  • 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

    • 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

You've viewed 6 comments.