Files
compiler-explorer/lib/compilers/_all.ts
Matt Godbolt (bot acct) b34b873577 Add the aburi compiler (#9019)
Supersedes #8872. Thanks to @likecrazy1, whose `AburiCompiler` class is
taken from that PR unchanged and who is credited as co-author — the
reason this is a new PR rather than an edit is that the properties
needed rewriting from scratch once upstream changed direction.

@serjective has
[confirmed](https://github.com/compiler-explorer/compiler-explorer/pull/8872#issuecomment-)
that `godbolt` is the live branch and the pinned `atta-mills` classic
version is abandoned, so this configures the nightly built from
`godbolt`.

## What changed from #8872, and why

**It is not an aarch64 Darwin cross compiler any more.** The new build
reports `Target: x86_64-unknown-linux-gnu`, so the group is plain
`aburi` with `instructionSet=amd64` rather than "Aburi (aarch64 Apple
Darwin)".

**No `--sysroot`.** This is the important one. On Linux, aburi's
`resolve_effective_stdlib` treats an explicit `--sysroot` as a different
root filesystem and **switches off Adinkra**, its own C++ standard
library. That is exactly why the previous configuration compiled CE's
header-free `square` example byte-perfectly and then failed on the first
`#include`. For a Linux target aburi takes its C headers from the host
root and its C++ headers from Adinkra, so it wants no sysroot at all.

**`-std=c++20` is required**, not optional — Adinkra `#error`s below
C++20, so a bare C++ compile fails outright.

**Nightly shape:** `isNightly=true` and `semver=(trunk)` instead of a
pinned `0.1.1`, since it now tracks a moving branch.

**Binary, binary object and execution are off.** Linking does work (I
built and ran a C++ executable against the shipped artifact), but
nothing has exercised those paths on the site, and they need
`-L`/`-Wl,-rpath` pointing at the bundled libc++abi to link at all.
Advertising a control that hard-fails is the exact trap this compiler
fell into last time, so I would rather turn them on as a follow-up once
someone can try them for real.

## Testing

Everything below was run against the artifact that is actually on S3
(`aburi-godbolt-20260814.tar.xz`), installed through the infra
installable:

- `--version` and `--help` both exit 0 (a non-zero version command
silently drops a compiler from the dropdown)
- C++ `-S` emits x86-64 assembly
- C compiles, links and runs
- `--emit-llvm` alone emits valid LLVM IR, which is what `AburiCompiler`
uses for the IR view. Note it rejects `--emit-llvm` combined with `-S`,
and the class already strips `-S` on that path
- `-g` is accepted, which the class always passes
- a TU using `<vector>`, `<string>` and a thrown-and-caught exception
compiles, links and runs — the case the old `--sysroot` broke

`npm run test:props` (90 passed), `npm run ts-check` and `npm run
lint-check` all clean.

## Merge order

This should land after, and only after, the compiler is installed:

- compiler-explorer/misc-builder#142, #143 (builder) — merged
- compiler-explorer/infra#2294 (nightly installable)
- compiler-explorer/compiler-workflows#76 (daily build)

Co-Authored-By: likecrazy1
<157763655+likecrazy1@users.noreply.github.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: mattgodbolt-molty <mattgodbolt-molty@users.noreply.github.com>
Co-authored-by: likecrazy1 <157763655+likecrazy1@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 21:03:40 -05:00

201 lines
8.6 KiB
TypeScript

// Copyright (c) 2021, Compiler Explorer Authors
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
export {AburiCompiler} from './aburi.js';
export {AdaCompiler} from './ada.js';
export {AMDRGACompiler} from './amd-rga.js';
export {AnalysisTool} from './analysis-tool.js';
export {AssemblyCompiler} from './assembly.js';
export {AvrGcc6502Compiler} from './avrgcc6502.js';
export {BeebAsmCompiler} from './beebasm.js';
export {C2RustCompiler} from './c2rust.js';
export {C3Compiler} from './c3c.js';
export {Ca65Compiler} from './ca65.js';
export {CarbonCompiler, CarbonExplorerCompiler} from './carbon.js';
export {Cc65Compiler} from './cc65.js';
export {CerberusCompiler} from './cerberus.js';
export {CircleCompiler} from './circle.js';
export {CIRCTCompiler} from './circt.js';
export {CL430Compiler} from './cl430.js';
export {
ClangCompiler,
ClangCudaCompiler,
ClangDxcCompiler,
ClangHexagonCompiler,
ClangHipCompiler,
ClangIntelCompiler,
TIClangCompiler,
Z80ClangCompiler,
} from './clang.js';
export {ClangCLCompiler} from './clangcl.js';
export {CleanCompiler} from './clean.js';
export {ClojureCompiler} from './clojure.js';
export {CLSPVCompiler} from './clspv.js';
export {CMakeScriptCompiler} from './cmakescript.js';
export {Co2ccCompiler, Co2RustcCompiler} from './co2.js';
export {CoccinelleCCompiler, CoccinelleCPlusPlusCompiler} from './coccinelle.js';
export {CodonCompiler} from './codon.js';
export {CompCertCompiler} from './compcert.js';
export {CppFrontCompiler} from './cppfront.js';
export {CprocCompiler} from './cproc.js';
export {CrystalCompiler} from './crystal.js';
export {CuteDslCompiler} from './cutedsl.js';
export {D8Compiler} from './d8.js';
export {DartCompiler} from './dart.js';
export {DefaultCompiler} from './default.js';
export {Dex2OatCompiler} from './dex2oat.js';
export {DMDCompiler} from './dmd.js';
export {
DotNetCoreClrCompiler,
DotNetCrossgen2Compiler,
DotNetIlDasmCompiler,
DotNetIlSpyCompiler,
DotNetLegacyCompiler,
DotNetMonoCompiler,
DotNetNativeAotCompiler,
} from './dotnet.js';
export {EDGCompiler} from './edg.js';
export {ElixirCompiler} from './elixir.js';
export {ElixirAsmCompiler} from './elixirasm.js';
export {EllccCompiler} from './ellcc.js';
export {ErlangCompiler} from './erlang.js';
export {ErlangAsmCompiler} from './erlangasm.js';
export {EWARMCompiler} from './ewarm.js';
export {EWAVRCompiler} from './ewavr.js';
export {FakeCompiler} from './fake-for-test.js';
export {FlangCompiler} from './flang.js';
export {FlangFC1Compiler} from './flang-fc1.js';
export {FortranCompiler} from './fortran.js';
export {FXCCompiler} from './fxc.js';
export {GA68Compiler} from './ga68.js';
export {GCCCompiler} from './gcc.js';
export {GCCCobolCompiler} from './gcccobol.js';
export {GCCRSCompiler} from './gccrs.js';
export {GCCGimpleCompiler} from './gimple.js';
export {GLSLCompiler} from './glsl.js';
export {GM2Compiler} from './gm2.js';
export {GnuCobolCompiler} from './gnucobol.js';
export {GolangCompiler} from './golang.js';
export {HaskellCompiler} from './haskell.js';
export {HelionCompiler} from './helion.js';
export {HLSLCompiler} from './hlsl.js';
export {HookCompiler} from './hook.js';
export {HyloCompiler} from './hylo.js';
export {ISPCCompiler} from './ispc.js';
export {JaktCompiler} from './jakt.js';
export {JavaCompiler} from './java.js';
export {JuliaCompiler} from './julia.js';
export {KotlinCompiler} from './kotlin.js';
export {LDCCompiler} from './ldc.js';
export {LeanCompiler} from './lean.js';
export {LFortranCompiler} from './lfortran.js';
export {LLCCompiler} from './llc.js';
export {LLVMmcaTool} from './llvm-mca.js';
export {LLVMMOSCompiler} from './llvm-mos.js';
export {LuaCompiler} from './lua.js';
export {M68kCompiler} from './m68k.js';
export {MadPascalCompiler} from './madpascal.js';
export {MicroPythonCompiler} from './micropython.js';
export {MLIRCompiler} from './mlir.js';
export {MojoCompiler} from './mojo.js';
export {MovfuscatorCompiler} from './movfuscator.js';
export {MrustcCompiler} from './mrustc.js';
export {Msp430Compiler} from './msp430.js';
export {NasmCompiler} from './nasm.js';
export {NimCompiler} from './nim.js';
export {NixCompiler} from './nix.js';
export {NorcroftCompiler} from './norcroft.js';
export {NumbaCompiler} from './numba.js';
export {NvccCompiler} from './nvcc.js';
export {NvcppCompiler} from './nvcpp.js';
export {NvrtcCompiler} from './nvrtc.js';
export {OCamlCompiler} from './ocaml.js';
export {OdinCompiler} from './odin.js';
export {OptCompiler} from './opt.js';
export {ORCACompiler} from './orca.js';
export {OSACATool} from './osaca.js';
export {FPCCompiler} from './pascal.js';
export {PascalWinCompiler} from './pascal-win.js';
export {PerlCompiler} from './perl.js';
export {PonyCompiler} from './pony.js';
export {PPCICompiler} from './ppci.js';
export {PtxAssembler} from './ptxas.js';
export {PythonCompiler} from './python.js';
export {PythranCompiler} from './pythran.js';
export {QNXCompiler} from './qnx.js';
export {R8Compiler} from './r8.js';
export {RacketCompiler} from './racket.js';
export {RakuCompiler} from './raku.js';
export {RazorForgeCompiler} from './razorforge.js';
export {ResolcCompiler} from './resolc.js';
export {RGACompiler} from './rga.js';
export {RubyCompiler} from './ruby.js';
export {RustCompiler} from './rust.js';
export {RustcCgCraneliftCompiler} from './rustc-cg-cranelift.js';
export {RustcCgGCCCompiler} from './rustc-cg-gcc.js';
export {SailCompiler} from './sail.js';
export {ScalaCompiler} from './scala.js';
export {ScaleNvccAMDCompiler} from './scale-nvcc-amd.js';
export {ScaleNvccNvidiaCompiler} from './scale-nvcc-nvidia.js';
export {SdccCompiler} from './sdcc.js';
export {SfpiCompiler} from './sfpi.js';
export {ShaderExplorerCompiler} from './shader-explorer.js';
export {SlangCompiler} from './slang.js';
export {SnowballCompiler} from './snowball.js';
export {SolidityCompiler} from './solidity.js';
export {SolidityZKsyncCompiler} from './solidity-zksync.js';
export {SolxCompiler} from './solx.js';
export {SpiceCompiler} from './spice.js';
export {SPIRVCompiler} from './spirv.js';
export {SPIRVToolsCompiler} from './spirv-tools.js';
export {SwayCompiler} from './sway.js';
export {SwiftCompiler} from './swift.js';
export {TableGenCompiler} from './tablegen.js';
export {TenDRACompiler} from './tendra.js';
export {TIC2000} from './tic2000.js';
export {TinyCCompiler} from './tinyc.js';
export {TinyGoCompiler} from './tinygo.js';
export {ToitCompiler} from './toit.js';
export {TritonCompiler} from './triton.js';
export {TurboCCompiler} from './turboc.js';
export {TypeScriptNativeCompiler} from './typescript-native.js';
export {VCompiler} from './v.js';
export {V8Compiler} from './v8.js';
export {ValaCompiler} from './vala.js';
export {VyperCompiler} from './vyper.js';
export {WasmtimeCompiler} from './wasmtime.js';
export {Win32Compiler} from './win32.js';
export {Win32MingWClang} from './win32-mingw-clang.js';
export {Win32MingWGcc} from './win32-mingw-gcc.js';
export {Win32VcCompiler} from './win32-vc.js';
export {Win32Vc6Compiler} from './win32-vc6.js';
export {WineVcCompiler} from './wine-vc.js';
export {WslVcCompiler} from './wsl-vc.js';
export {WyrmCompiler} from './wyrm.js';
export {YLCCompiler} from './ylc.js';
export {z88dkCompiler} from './z88dk.js';
export {ZigCompiler} from './zig.js';
export {ZigCC} from './zigcc.js';
export {ZigCXX} from './zigcxx.js';