vscode-extensions.ms-vscode-cpptools: Fix Aarch64 support

This commit is contained in:
Rowan Goemans
2024-07-29 17:47:19 +02:00
parent 8b41014ce0
commit db583718cc
@@ -40,6 +40,7 @@
let
gdbDefaultsTo = if gdbUseFixed then "${gdb}/bin/gdb" else "gdb";
isx86Linux = stdenv.hostPlatform.system == "x86_64-linux";
supported = {
x86_64-linux = {
hash = "sha256-arTBt3UWA5zoo0dL044Sx/NT1LUS76XfGIS96NOMvJk=";
@@ -51,7 +52,9 @@ let
};
};
base = supported.${stdenv.system} or (throw "unsupported platform ${stdenv.system}");
base =
supported.${stdenv.hostPlatform.system}
or (throw "unsupported platform ${stdenv.hostPlatform.system}");
in
vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = base // {
@@ -73,35 +76,40 @@ vscode-utils.buildVscodeMarketplaceExtension {
stdenv.cc.cc.lib
];
dontAutoPatchelf = true;
dontAutoPatchelf = isx86Linux;
postPatch = ''
mv ./package.json ./package_orig.json
# 1. Add activation events so that the extension is functional. This listing is empty when unpacking the extension but is filled at runtime.
# 2. Patch `package.json` so that nix's *gdb* is used as default value for `miDebuggerPath`.
cat ./package_orig.json | \
jq --slurpfile actEvts ${./package-activation-events.json} '(.activationEvents) = $actEvts[0]' | \
jq '(.contributes.debuggers[].configurationAttributes | .attach , .launch | .properties.miDebuggerPath | select(. != null) | select(.default == "/usr/bin/gdb") | .default) = "${gdbDefaultsTo}"' > \
./package.json
# Prevent download/install of extensions
touch "./install.lock"
# Clang-format from nix package.
rm -rf ./LLVM
mkdir "./LLVM/"
find "${clang-tools}" -mindepth 1 -maxdepth 1 | xargs ln -s -t "./LLVM"
# Patching binaries
chmod +x bin/cpptools bin/cpptools-srv bin/cpptools-wordexp bin/libc.so debugAdapters/bin/OpenDebugAD7
patchelf --replace-needed liblttng-ust.so.0 liblttng-ust.so.1 ./debugAdapters/bin/libcoreclrtraceptprovider.so
'';
postFixup =
postPatch =
''
autoPatchelf $out/share/vscode/extensions/ms-vscode.cpptools/debugAdapters
mv ./package.json ./package_orig.json
# 1. Add activation events so that the extension is functional. This listing is empty when unpacking the extension but is filled at runtime.
# 2. Patch `package.json` so that nix's *gdb* is used as default value for `miDebuggerPath`.
cat ./package_orig.json | \
jq --slurpfile actEvts ${./package-activation-events.json} '(.activationEvents) = $actEvts[0]' | \
jq '(.contributes.debuggers[].configurationAttributes | .attach , .launch | .properties.miDebuggerPath | select(. != null) | select(.default == "/usr/bin/gdb") | .default) = "${gdbDefaultsTo}"' > \
./package.json
# Prevent download/install of extensions
touch "./install.lock"
# Clang-format from nix package.
rm -rf ./LLVM
mkdir "./LLVM/"
find "${clang-tools}" -mindepth 1 -maxdepth 1 | xargs ln -s -t "./LLVM"
# Patching binaries
chmod +x bin/cpptools bin/cpptools-srv bin/cpptools-wordexp debugAdapters/bin/OpenDebugAD7
patchelf --replace-needed liblttng-ust.so.0 liblttng-ust.so.1 ./debugAdapters/bin/libcoreclrtraceptprovider.so
''
+ lib.optionalString isx86Linux ''
chmod +x bin/libc.so
'';
# On aarch64 the binaries are statically linked
# but on x86 they are not.
postFixup =
lib.optionalString isx86Linux ''
autoPatchelf $out/share/vscode/extensions/ms-vscode.cpptools/debugAdapters
# cpptools* are distributed by the extension and need to be run through the distributed musl interpretter
patchelf --set-interpreter $out/share/vscode/extensions/ms-vscode.cpptools/bin/libc.so $out/share/vscode/extensions/ms-vscode.cpptools/bin/cpptools
patchelf --set-interpreter $out/share/vscode/extensions/ms-vscode.cpptools/bin/libc.so $out/share/vscode/extensions/ms-vscode.cpptools/bin/cpptools-srv