aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.idea/misc.xml5
-rwxr-xr-xapp.js2
-rw-r--r--docs/API.md1
-rw-r--r--etc/config/ada.amazon.properties49
-rw-r--r--etc/config/c++.amazon.properties100
-rw-r--r--etc/config/c.amazon.properties104
-rw-r--r--etc/config/cppx_cppfront.amazon.properties11
-rw-r--r--etc/config/cppx_cppfront.defaults.properties11
-rw-r--r--etc/config/d.amazon.properties104
-rw-r--r--etc/config/fortran.amazon.properties96
-rw-r--r--etc/config/go.amazon.properties137
-rw-r--r--examples/cppx_cppfront/default.cpp217
-rw-r--r--lib/base-compiler.ts3
-rw-r--r--lib/compilers/_all.js1
-rw-r--r--lib/compilers/cppfront.ts78
-rw-r--r--lib/languages.ts10
-rwxr-xr-xlib/options-handler.js31
-rw-r--r--lib/tooling/_all.js1
-rwxr-xr-xlib/tooling/base-tool.interface.ts49
-rwxr-xr-xlib/tooling/base-tool.ts (renamed from lib/tooling/base-tool.js)83
-rw-r--r--lib/tooling/compiler-dropin-tool.js4
-rw-r--r--lib/tooling/llvm-cov-tool.ts108
-rw-r--r--lib/utils.ts9
-rw-r--r--static/panes/editor.js5
-rw-r--r--static/panes/tool.js1
-rw-r--r--test/options-handler.js2
-rw-r--r--types/compilation/compilation.interfaces.ts6
-rw-r--r--types/languages.interfaces.ts1
28 files changed, 904 insertions, 125 deletions
diff --git a/.idea/misc.xml b/.idea/misc.xml
index b02132aea..9e875d08b 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -4,9 +4,4 @@
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_3" project-jdk-name="Python 3.8" project-jdk-type="Python SDK" />
- <component name="SwUserDefinedSpecifications">
- <option name="specTypeByUrl">
- <map />
- </option>
- </component>
</project> \ No newline at end of file
diff --git a/app.js b/app.js
index 8643f8a6a..dfaa23f34 100755
--- a/app.js
+++ b/app.js
@@ -210,6 +210,8 @@ if (defArgs.wantedLanguages) {
}
}
}
+ // Always keep cmake for IDE mode, just in case
+ filteredLangs[languages.cmake.id] = languages.cmake;
languages = filteredLangs;
}
diff --git a/docs/API.md b/docs/API.md
index 5eaa2a844..df227fd39 100644
--- a/docs/API.md
+++ b/docs/API.md
@@ -317,3 +317,4 @@ Here are some examples of projects using the Compiler Explorer API:
- [CLion plugin by ogrebenyuk](https://github.com/ogrebenyuk/compilerexplorer) (Java)
- [QCompilerExplorer - frontend in Qt](https://github.com/Waqar144/QCompilerExplorer) (C++)
- [Emacs client - compiler-explorer.el](https://github.com/mkcms/compiler-explorer.el)
+- [compiler-explorer.nvim by krady21](https://github.com/krady21/compiler-explorer.nvim) (Lua)
diff --git a/etc/config/ada.amazon.properties b/etc/config/ada.amazon.properties
index dfb36be8e..0f03f9881 100644
--- a/etc/config/ada.amazon.properties
+++ b/etc/config/ada.amazon.properties
@@ -68,7 +68,7 @@ compiler.gnatriscv64112.adarts=/opt/compiler-explorer/riscv64/gnat-riscv64-elf-l
################################
# GNAT for s390x
-group.gnats390x.compilers=gnats390x1120:gnats390x1210
+group.gnats390x.compilers=gnats390x1120:gnats390x1210:gnats390x1220
group.gnats390x.groupName=s390x
group.gnats390x.instructionSet=s390x
group.gnats390x.baseName=s390x gnat
@@ -79,6 +79,11 @@ compiler.gnats390x1120.semver=11.2.0
compiler.gnats390x1210.exe=/opt/compiler-explorer/s390x/gcc-12.1.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-gnatmake
compiler.gnats390x1210.semver=12.1.0
+compiler.gnats390x1220.exe=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-gnatmake
+compiler.gnats390x1220.semver=12.2.0
+compiler.gnats390x1220.objdumper=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-objdump
+compiler.gnats390x1220.demangler=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-c++filt
+
################################
# GNAT for ppc
group.gnatppcs.compilers=&gnatppc:&gnatppc64:&gnatppc64le
@@ -86,7 +91,7 @@ group.gnatppcs.instructionSet=ppc
## POWER
group.gnatppc.groupName=power
-group.gnatppc.compilers=gnatppc1120:gnatppc1210
+group.gnatppc.compilers=gnatppc1120:gnatppc1210:gnatppc1220
group.gnatppc.baseName=powerpc gnat
compiler.gnatppc1120.exe=/opt/compiler-explorer/powerpc/gcc-11.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-gnatmake
@@ -97,9 +102,14 @@ compiler.gnatppc1210.exe=/opt/compiler-explorer/powerpc/gcc-12.1.0/powerpc-unkno
compiler.gnatppc1210.demangler=/opt/compiler-explorer/powerpc/gcc-12.1.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-c++filt
compiler.gnatppc1210.semver=12.1.0
+compiler.gnatppc1220.exe=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-gnatmake
+compiler.gnatppc1220.semver=12.2.0
+compiler.gnatppc1220.objdumper=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-objdump
+compiler.gnatppc1220.demangler=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-c++filt
+
## POWER64
group.gnatppc64.groupName=power64
-group.gnatppc64.compilers=gnatppc641120:gnatppc641210
+group.gnatppc64.compilers=gnatppc641120:gnatppc641210:gnatppc641220
group.gnatppc64.baseName=powerpc64 gnat
compiler.gnatppc641120.exe=/opt/compiler-explorer/powerpc64/gcc-11.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-gnatmake
@@ -110,9 +120,14 @@ compiler.gnatppc641210.exe=/opt/compiler-explorer/powerpc64/gcc-12.1.0/powerpc64
compiler.gnatppc641210.demangler=/opt/compiler-explorer/powerpc64/gcc-12.1.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-c++filt
compiler.gnatppc641210.semver=12.1.0
+compiler.gnatppc641220.exe=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-gnatmake
+compiler.gnatppc641220.semver=12.2.0
+compiler.gnatppc641220.objdumper=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-objdump
+compiler.gnatppc641220.demangler=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-c++filt
+
## POWER64LE
group.gnatppc64le.groupName=power64le
-group.gnatppc64le.compilers=gnatppc64le1120:gnatppc64le1210
+group.gnatppc64le.compilers=gnatppc64le1120:gnatppc64le1210:gnatppc64le1220
group.gnatppc64le.baseName=powerpc64le gnat
compiler.gnatppc64le1120.exe=/opt/compiler-explorer/powerpc64le/gcc-11.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gnatmake
@@ -123,6 +138,11 @@ compiler.gnatppc64le1210.exe=/opt/compiler-explorer/powerpc64le/gcc-12.1.0/power
compiler.gnatppc64le1210.demangler=/opt/compiler-explorer/powerpc64le/gcc-12.1.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-c++filt
compiler.gnatppc64le1210.semver=12.1.0
+compiler.gnatppc64le1220.exe=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gnatmake
+compiler.gnatppc64le1220.semver=12.2.0
+compiler.gnatppc64le1220.objdumper=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump
+compiler.gnatppc64le1220.demangler=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-c++filt
+
################################
# GNAT for MIPSs
## GNAT builds for mipsel and mips64el are broken on 12.1.0
@@ -131,7 +151,7 @@ group.gnatmipss.instructionSet=mips
## MIPS
group.gnatmips.groupName=mips
-group.gnatmips.compilers=gnatmips1120:gnatmips1210
+group.gnatmips.compilers=gnatmips1120:gnatmips1210:gnatmips1220
group.gnatmips.baseName=mips gnat
compiler.gnatmips1120.exe=/opt/compiler-explorer/mips/gcc-11.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-gnatmake
@@ -142,9 +162,14 @@ compiler.gnatmips1210.exe=/opt/compiler-explorer/mips/gcc-12.1.0/mips-unknown-li
compiler.gnatmips1210.semver=12.1.0
compiler.gnatmips1210.objdumper=/opt/compiler-explorer/mips/gcc-12.1.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-objdump
+compiler.gnatmips1220.exe=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-gnatmake
+compiler.gnatmips1220.semver=12.2.0
+compiler.gnatmips1220.objdumper=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-objdump
+compiler.gnatmips1220.demangler=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-c++filt
+
## MIPS64
group.gnatmips64.groupName=mips64
-group.gnatmips64.compilers=gnatmips641120:gnatmips641210
+group.gnatmips64.compilers=gnatmips641120:gnatmips641210:gnatmips641220
group.gnatmips64.baseName=mips64 gnat
compiler.gnatmips641120.exe=/opt/compiler-explorer/mips64/gcc-11.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-gnatmake
@@ -155,9 +180,14 @@ compiler.gnatmips641210.exe=/opt/compiler-explorer/mips64/gcc-12.1.0/mips64-unkn
compiler.gnatmips641210.demangler=/opt/compiler-explorer/mips64/gcc-12.1.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-c++filt
compiler.gnatmips641210.semver=12.1.0
+compiler.gnatmips641220.exe=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-gnatmake
+compiler.gnatmips641220.semver=12.2.0
+compiler.gnatmips641220.objdumper=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-objdump
+compiler.gnatmips641220.demangler=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-c++filt
+
################################
# GNAT for arm64
-group.gnatarm64.compilers=gnatarm641210
+group.gnatarm64.compilers=gnatarm641210:gnatarm641220
group.gnatarm64.groupName=arm64
group.gnatarm64.baseName=arm64 gnat
group.gnatarm64.instructionSet=arm64
@@ -166,6 +196,11 @@ compiler.gnatarm641210.exe=/opt/compiler-explorer/arm64/gcc-12.1.0/aarch64-unkno
compiler.gnatarm641210.semver=12.1.0
compiler.gnatarm641210.objdumper=/opt/compiler-explorer/arm64/gcc-12.1.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-objdump
+compiler.gnatarm641220.exe=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gnatmake
+compiler.gnatarm641220.semver=12.2.0
+compiler.gnatarm641220.objdumper=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-objdump
+compiler.gnatarm641220.demangler=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-c++filt
+
################################
# GNAT for arm
group.gnatarm.compilers=gnatarm112:gnatarm103
diff --git a/etc/config/c++.amazon.properties b/etc/config/c++.amazon.properties
index 98856e93b..de7e6f302 100644
--- a/etc/config/c++.amazon.properties
+++ b/etc/config/c++.amazon.properties
@@ -729,7 +729,7 @@ group.gccs390x.supportsBinary=true
group.gccs390x.supportsExecute=false
group.gccs390x.baseName=s390x gcc
group.gccs390x.groupName=s390x gcc
-group.gccs390x.compilers=gccs390x1120:s390xg1210
+group.gccs390x.compilers=gccs390x1120:s390xg1210:s390xg1220
group.gccs390x.isSemVer=true
group.gccs390x.objdumper=/opt/compiler-explorer/s390x/gcc-11.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-objdump
@@ -741,6 +741,11 @@ compiler.s390xg1210.exe=/opt/compiler-explorer/s390x/gcc-12.1.0/s390x-ibm-linux-
compiler.s390xg1210.semver=12.1.0
compiler.s390xg1210.objdumper=/opt/compiler-explorer/s390x/gcc-12.1.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-objdump
+compiler.s390xg1220.exe=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-g++
+compiler.s390xg1220.semver=12.2.0
+compiler.s390xg1220.objdumper=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-objdump
+compiler.s390xg1220.demangler=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-c++filt
+
###############################
# Cross compilers for PPC
group.ppcs.compilers=&ppc:&ppc64:&ppc64le
@@ -749,7 +754,7 @@ group.ppcs.supportsBinary=true
group.ppcs.supportsExecute=false
## POWER
-group.ppc.compilers=ppcg48:ppcg1120:ppcg1210
+group.ppc.compilers=ppcg48:ppcg1120:ppcg1210:ppcg1220
group.ppc.groupName=POWER
group.ppc.baseName=power gcc
@@ -765,10 +770,15 @@ compiler.ppcg1210.exe=/opt/compiler-explorer/powerpc/gcc-12.1.0/powerpc-unknown-
compiler.ppcg1210.semver=12.1.0
compiler.ppcg1210.objdumper=/opt/compiler-explorer/powerpc/gcc-12.1.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-objdump
+compiler.ppcg1220.exe=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-g++
+compiler.ppcg1220.semver=12.2.0
+compiler.ppcg1220.objdumper=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-objdump
+compiler.ppcg1220.demangler=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-c++filt
+
## POWER64
group.ppc64.groupName=POWER64
group.ppc64.baseName=power64 gcc
-group.ppc64.compilers=ppc64g8:ppc64g9:ppc64g1120:ppc64g1210:ppc64clang
+group.ppc64.compilers=ppc64g8:ppc64g9:ppc64g1120:ppc64g1210:ppc64clang:ppc64g1220
compiler.ppc64g8.exe=/opt/compiler-explorer/powerpc64/gcc-at12/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-g++
compiler.ppc64g8.objdumper=/opt/compiler-explorer/powerpc64/gcc-at12/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-objdump
@@ -789,6 +799,11 @@ compiler.ppc64g1210.exe=/opt/compiler-explorer/powerpc64/gcc-12.1.0/powerpc64-un
compiler.ppc64g1210.semver=12.1.0
compiler.ppc64g1210.objdumper=/opt/compiler-explorer/powerpc64/gcc-12.1.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-objdump
+compiler.ppc64g1220.exe=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-g++
+compiler.ppc64g1220.semver=12.2.0
+compiler.ppc64g1220.objdumper=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-objdump
+compiler.ppc64g1220.demangler=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-c++filt
+
compiler.ppc64clang.exe=/opt/compiler-explorer/clang-trunk/bin/clang++
compiler.ppc64clang.demangler=/opt/compiler-explorer/gcc-snapshot/bin/c++filt
compiler.ppc64clang.objdumper=/opt/compiler-explorer/gcc-11.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump
@@ -799,7 +814,7 @@ compiler.ppc64clang.semver=(snapshot)
## POWER64LE
group.ppc64le.groupName=POWER64LE
-group.ppc64le.compilers=ppc64leg630:ppc64leg8:ppc64leg9:ppc64leg1120:ppc64leg1210:ppc64leclang
+group.ppc64le.compilers=ppc64leg630:ppc64leg8:ppc64leg9:ppc64leg1120:ppc64leg1210:ppc64leclang:ppc64leg1220
group.ppc64le.baseName=power64le gcc
compiler.ppc64leg630.exe=/opt/compiler-explorer/powerpc64le/gcc-6.3.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-g++
@@ -827,6 +842,11 @@ compiler.ppc64leg1210.semver=12.1.0
compiler.ppc64leg1120.name=power64le gcc 12.1.0
compiler.ppc64leg1210.objdumper=/opt/compiler-explorer/powerpc64le/gcc-12.1.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump
+compiler.ppc64leg1220.exe=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-g++
+compiler.ppc64leg1220.semver=12.2.0
+compiler.ppc64leg1220.objdumper=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump
+compiler.ppc64leg1220.demangler=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-c++filt
+
compiler.ppc64leclang.exe=/opt/compiler-explorer/clang-trunk/bin/clang++
compiler.ppc64leclang.demangler=/opt/compiler-explorer/gcc-snapshot/bin/c++filt
compiler.ppc64leclang.objdumper=/opt/compiler-explorer/gcc-11.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump
@@ -844,7 +864,7 @@ group.gccarm.includeFlag=-I
# 32 bit
group.gcc32arm.groupName=Arm 32-bit GCC
-group.gcc32arm.compilers=armhfg54:arm541:armg454:armg464:armg630:arm710:armg640:armg730:armg750:armg820:armce820:arm831:armg850:arm921:arm930:arm1020:arm1021:arm1030:arm1031_07:arm1031_10:arm1100:arm1120:arm1121:arm1130:arm1210:armgtrunk
+group.gcc32arm.compilers=armhfg54:arm541:armg454:armg464:armg630:arm710:armg640:armg730:armg750:armg820:armce820:arm831:armg850:arm921:arm930:arm1020:arm1021:arm1030:arm1031_07:arm1031_10:arm1100:arm1120:arm1121:arm1130:arm1210:armgtrunk:armg1220
group.gcc32arm.isSemVer=true
group.gcc32arm.objdumper=/opt/compiler-explorer/arm/gcc-10.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-objdump
group.gcc32arm.instructionSet=arm32
@@ -887,6 +907,12 @@ compiler.armg820.semver=8.2.0
compiler.armg850.exe=/opt/compiler-explorer/arm/gcc-8.5.0/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-g++
compiler.armg850.name=ARM gcc 8.5 (linux)
compiler.armg850.semver=8.5.0
+
+compiler.armg1220.exe=/opt/compiler-explorer/arm/gcc-12.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-g++
+compiler.armg1220.semver=12.2.0
+compiler.armg1220.objdumper=/opt/compiler-explorer/arm/gcc-12.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-objdump
+compiler.armg1220.demangler=/opt/compiler-explorer/arm/gcc-12.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-c++filt
+compiler.armg1220.name=ARM gcc 12.2 (linux)
compiler.armce820.exe=/opt/compiler-explorer/arm-wince/gcc-ce-8.2.0/bin/arm-mingw32ce-g++
compiler.armce820.name=ARM gcc 8.2 (WinCE)
compiler.armce820.semver=8.2.0
@@ -943,7 +969,7 @@ compiler.armgtrunk.semver=trunk
# 64 bit
group.gcc64arm.groupName=Arm 64-bit GCC
-group.gcc64arm.compilers=aarchg54:arm64g630:arm64g640:arm64g730:arm64g750:arm64g820:arm64g850:arm64g930:arm64g1020:arm64g1030:arm64g1100:arm64g1120:arm64g1130:arm64g1210:arm64gtrunk
+group.gcc64arm.compilers=aarchg54:arm64g630:arm64g640:arm64g730:arm64g750:arm64g820:arm64g850:arm64g930:arm64g1020:arm64g1030:arm64g1100:arm64g1120:arm64g1130:arm64g1210:arm64gtrunk:arm64g1220
group.gcc64arm.isSemVer=true
group.gcc64arm.objdumper=/opt/compiler-explorer/arm64/gcc-10.2.0/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/bin/objdump
group.gcc64arm.instructionSet=aarch64
@@ -979,6 +1005,11 @@ compiler.arm64g1130.semver=11.3
compiler.arm64g1210.exe=/opt/compiler-explorer/arm64/gcc-12.1.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-g++
compiler.arm64g1210.objdumper=/opt/compiler-explorer/arm64/gcc-12.1.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-objdump
compiler.arm64g1210.semver=12.1
+
+compiler.arm64g1220.exe=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-g++
+compiler.arm64g1220.semver=12.2.0
+compiler.arm64g1220.objdumper=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-objdump
+compiler.arm64g1220.demangler=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-c++filt
compiler.arm64gtrunk.exe=/opt/compiler-explorer/arm64/gcc-trunk/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-g++
compiler.arm64gtrunk.semver=trunk
@@ -1076,7 +1107,7 @@ compiler.msp430g621.semver=6.2.1
################################
# GCC for AVR
-group.avr.compilers=avrg454:avrg464:avrg540:avrg920:avrg930:avrg1030:avrg1100:avrg1210
+group.avr.compilers=avrg454:avrg464:avrg540:avrg920:avrg930:avrg1030:avrg1100:avrg1210:avrg1220
group.avr.groupName=AVR GCC
group.avr.baseName=AVR gcc
group.avr.isSemVer=true
@@ -1114,6 +1145,11 @@ compiler.avrg1210.exe=/opt/compiler-explorer/avr/gcc-12.1.0/avr/bin/avr-g++
compiler.avrg1210.semver=12.1.0
compiler.avrg1210.objdumper=/opt/compiler-explorer/avr/gcc-12.1.0/avr/bin/avr-objdump
+compiler.avrg1220.exe=/opt/compiler-explorer/avr/gcc-12.2.0/avr/bin/avr-g++
+compiler.avrg1220.semver=12.2.0
+compiler.avrg1220.objdumper=/opt/compiler-explorer/avr/gcc-12.2.0/avr/bin/avr-objdump
+compiler.avrg1220.demangler=/opt/compiler-explorer/avr/gcc-12.2.0/avr/bin/avr-c++filt
+
###############################
# GCC for MIPS
group.mipss.compilers=&mips:&mipsel:&mips64:&mips64el
@@ -1124,7 +1160,7 @@ group.mipss.supportsExecute=false
## MIPS
group.mips.groupName=MIPS GCC
-group.mips.compilers=mips5:mips930:mips1120:mipsg1210
+group.mips.compilers=mips5:mips930:mips1120:mipsg1210:mipsg1220
group.mips.baseName=mips gcc
compiler.mips5.exe=/opt/compiler-explorer/mips/gcc-5.4.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-g++
@@ -1144,9 +1180,14 @@ compiler.mipsg1210.exe=/opt/compiler-explorer/mips/gcc-12.1.0/mips-unknown-linux
compiler.mipsg1210.semver=12.1.0
compiler.mipsg1210.objdumper=/opt/compiler-explorer/mips/gcc-12.1.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-objdump
+compiler.mipsg1220.exe=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-g++
+compiler.mipsg1220.semver=12.2.0
+compiler.mipsg1220.objdumper=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-objdump
+compiler.mipsg1220.demangler=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-c++filt
+
## MIPS 64
group.mips64.groupName=MIPS64 GCC
-group.mips64.compilers=mips564:mips112064:mips64g1210
+group.mips64.compilers=mips564:mips112064:mips64g1210:mips64g1220
group.mips64.baseName=mips64 gcc
compiler.mips564.exe=/opt/compiler-explorer/mips64/gcc-5.4.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-g++
@@ -1161,9 +1202,14 @@ compiler.mips64g1210.exe=/opt/compiler-explorer/mips64/gcc-12.1.0/mips64-unknown
compiler.mips64g1210.semver=12.1.0
compiler.mips64g1210.objdumper=/opt/compiler-explorer/mips64/gcc-12.1.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-objdump
+compiler.mips64g1220.exe=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-g++
+compiler.mips64g1220.semver=12.2.0
+compiler.mips64g1220.objdumper=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-objdump
+compiler.mips64g1220.demangler=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-c++filt
+
## MIPS EL
group.mipsel.groupName=MIPSEL GCC
-group.mipsel.compilers=mips5el:mipselg1210
+group.mipsel.compilers=mips5el:mipselg1210:mipselg1220
group.mipsel.baseName=mipsel gcc
compiler.mips5el.exe=/opt/compiler-explorer/mipsel/gcc-5.4.0/mipsel-unknown-linux-gnu/bin/mipsel-unknown-linux-gnu-g++
@@ -1174,9 +1220,14 @@ compiler.mipselg1210.exe=/opt/compiler-explorer/mipsel/gcc-12.1.0/mipsel-multili
compiler.mipselg1210.semver=12.1.0
compiler.mipselg1210.objdumper=/opt/compiler-explorer/mipsel/gcc-12.1.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-objdump
+compiler.mipselg1220.exe=/opt/compiler-explorer/mipsel/gcc-12.2.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-g++
+compiler.mipselg1220.semver=12.2.0
+compiler.mipselg1220.objdumper=/opt/compiler-explorer/mipsel/gcc-12.2.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-objdump
+compiler.mipselg1220.demangler=/opt/compiler-explorer/mipsel/gcc-12.2.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-c++filt
+
## MIPS 64 EL
group.mips64el.groupName=MIPS64EL GCC
-group.mips64el.compilers=mips564el:mips64elg1210
+group.mips64el.compilers=mips564el:mips64elg1210:mips64elg1220
group.mips64el.baseName=mips64 (el) gcc
compiler.mips564el.exe=/opt/compiler-explorer/mips64el/gcc-5.4.0/mips64el-unknown-linux-gnu/bin/mips64el-unknown-linux-gnu-g++
@@ -1187,6 +1238,11 @@ compiler.mips64elg1210.exe=/opt/compiler-explorer/mips64el/gcc-12.1.0/mips64el-m
compiler.mips64elg1210.semver=12.1.0
compiler.mips64elg1210.objdumper=/opt/compiler-explorer/mips64el/gcc-12.1.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-objdump
+compiler.mips64elg1220.exe=/opt/compiler-explorer/mips64el/gcc-12.2.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-g++
+compiler.mips64elg1220.semver=12.2.0
+compiler.mips64elg1220.objdumper=/opt/compiler-explorer/mips64el/gcc-12.2.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-objdump
+compiler.mips64elg1220.demangler=/opt/compiler-explorer/mips64el/gcc-12.2.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-c++filt
+
###############################
# GCC for nanoMIPS
group.nanomips.compilers=nanomips630
@@ -1210,7 +1266,7 @@ compiler.mrisc32-gcc-trunk.objdumper=/opt/compiler-explorer/mrisc32-trunk/mrisc3
###############################
# GCC for RISC-V
-group.rvgcc.compilers=rv64-gcc1210:rv64-gcc1130:rv64-gcc1120:rv64-gcc1030:rv64-gcc1020:rv64-gcc940:rv64-gcc850:rv64-gcc820:rv32-gcc1210:rv32-gcc1130:rv32-gcc1120:rv32-gcc1030:rv32-gcc1020:rv32-gcc940:rv32-gcc850:rv32-gcc820
+group.rvgcc.compilers=rv64-gcc1220:rv64-gcc1210:rv64-gcc1130:rv64-gcc1120:rv64-gcc1030:rv64-gcc1020:rv64-gcc940:rv64-gcc850:rv64-gcc820:rv32-gcc1220:rv32-gcc1210:rv32-gcc1130:rv32-gcc1120:rv32-gcc1030:rv32-gcc1020:rv32-gcc940:rv32-gcc850:rv32-gcc820
group.rvgcc.groupName=RISC-V GCC
group.rvgcc.supportsExecute=false
group.rvgcc.isSemVer=true
@@ -1256,6 +1312,13 @@ compiler.rv64-gcc1210.name=RISC-V rv64gc gcc 12.1.0
compiler.rv64-gcc1210.semver=12.1.0
compiler.rv64-gcc1210.objdumper=/opt/compiler-explorer/riscv64/gcc-12.1.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-objdump
+compiler.rv64-gcc1220.exe=/opt/compiler-explorer/riscv64/gcc-12.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-g++
+compiler.rv64-gcc1220.semver=12.2.0
+compiler.rv64-gcc1220.objdumper=/opt/compiler-explorer/riscv64/gcc-12.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-objdump
+compiler.rv64-gcc1220.demangler=/opt/compiler-explorer/riscv64/gcc-12.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-c++filt
+compiler.rv64-gcc1220.name=RISC-V rv64gc gcc 12.2.0
+
+
compiler.rv32-gcc820.exe=/opt/compiler-explorer/riscv32/gcc-8.2.0/riscv32-unknown-elf/bin/riscv32-unknown-elf-gcc
compiler.rv32-gcc820.name=RISC-V rv32gc gcc 8.2.0
compiler.rv32-gcc820.semver=8.2.0
@@ -1296,6 +1359,12 @@ compiler.rv32-gcc1210.name=RISC-V rv32gc gcc 12.1.0
compiler.rv32-gcc1210.semver=12.1.0
compiler.rv32-gcc1210.objdumper=/opt/compiler-explorer/riscv32/gcc-12.1.0/riscv32-unknown-elf/bin/riscv32-unknown-elf-objdump
+compiler.rv32-gcc1220.exe=/opt/compiler-explorer/riscv32/gcc-12.2.0/riscv32-unknown-linux-gnu/bin/riscv32-unknown-linux-gnu-g++
+compiler.rv32-gcc1220.semver=12.2.0
+compiler.rv32-gcc1220.objdumper=/opt/compiler-explorer/riscv32/gcc-12.2.0/riscv32-unknown-linux-gnu/bin/riscv32-unknown-linux-gnu-objdump
+compiler.rv32-gcc1220.demangler=/opt/compiler-explorer/riscv32/gcc-12.2.0/riscv32-unknown-linux-gnu/bin/riscv32-unknown-linux-gnu-c++filt
+compiler.rv32-gcc1220.name=RISC-V rv32gc gcc 12.2.0
+
################################
# GCC for Xtensa ESP32
group.xtensaesp32.compilers=esp32g2019r2:esp32g2020r1:esp32g2020r2:esp32g2020r3:esp32g2021r1:esp32g2021r2
@@ -2760,7 +2829,7 @@ libs.curl.versions.7831.path=/opt/compiler-explorer/libs/curl/7.83.1/include
#################################
#################################
# Installed tools
-tools=PVS-Studio:clangformattrunk:clangquerytrunk:clangtidytrunk:iwyu:ldd:llvm-mcatrunk:osacatrunk:pahole:readelf:strings:x86to6502
+tools=PVS-Studio:clangformattrunk:clangquerytrunk:clangtidytrunk:iwyu:ldd:llvm-covtrunk:llvm-mcatrunk:osacatrunk:pahole:readelf:strings:x86to6502
tools.PVS-Studio.name=PVS-Studio
tools.PVS-Studio.exe=/opt/compiler-explorer/pvs-studio-latest/bin/pvs-studio-analyzer
@@ -2805,6 +2874,11 @@ tools.ldd.class=readelf-tool
tools.ldd.exclude=djggp
tools.ldd.stdinHint=disabled
+tools.llvm-covtrunk.name=llvm-cov (trunk)
+tools.llvm-covtrunk.exe=/opt/compiler-explorer/clang-trunk/bin/llvm-cov
+tools.llvm-covtrunk.type=postcompilation
+tools.llvm-covtrunk.class=llvm-cov-tool
+
tools.llvm-mcatrunk.name=llvm-mca (trunk)
tools.llvm-mcatrunk.exe=/opt/compiler-explorer/clang-trunk/bin/llvm-mca
tools.llvm-mcatrunk.type=postcompilation
diff --git a/etc/config/c.amazon.properties b/etc/config/c.amazon.properties
index e4fab05d8..055c14225 100644
--- a/etc/config/c.amazon.properties
+++ b/etc/config/c.amazon.properties
@@ -634,7 +634,7 @@ group.ccross.groupName=Cross GCC
group.cs390x.compilers=&cgccs390x
# GCC for s390x
-group.cgccs390x.compilers=cgccs390x112:cs390xg1210
+group.cgccs390x.compilers=cgccs390x112:cs390xg1210:cs390xg1220
group.cgccs390x.supportsBinary=true
group.cgccs390x.supportsExecute=false
group.cgccs390x.baseName=s390x gcc
@@ -649,6 +649,11 @@ compiler.cs390xg1210.exe=/opt/compiler-explorer/s390x/gcc-12.1.0/s390x-ibm-linux
compiler.cs390xg1210.semver=12.1.0
compiler.cs390xg1210.objdumper=/opt/compiler-explorer/s390x/gcc-12.1.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-objdump
+compiler.cs390xg1220.exe=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-gcc
+compiler.cs390xg1220.semver=12.2.0
+compiler.cs390xg1220.objdumper=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-objdump
+compiler.cs390xg1220.demangler=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-c++filt
+
###############################
# Cross compilers for PPC
group.cppcs.compilers=&cppc:&cppc64:&cppc64le
@@ -656,7 +661,7 @@ group.cppcs.isSemVer=true
group.cppcs.supportsBinary=true
group.cppcs.supportsExecute=false
-group.cppc.compilers=cppcg1210:cppcg1120:cppcg48
+group.cppc.compilers=cppcg1210:cppcg1120:cppcg48:cppcg1220
group.cppc.groupName=POWER
group.cppc.baseName=power gcc
@@ -672,7 +677,12 @@ compiler.cppcg1210.exe=/opt/compiler-explorer/powerpc/gcc-12.1.0/powerpc-unknown
compiler.cppcg1210.objdumper=/opt/compiler-explorer/powerpc/gcc-12.1.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-objdump
compiler.cppcg1210.semver=12.1.0
-group.cppc64.compilers=cppc64g8:cppc64g9:cppc64g1120:cppc64g1210:cppc64clang
+compiler.cppcg1220.exe=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-gcc
+compiler.cppcg1220.semver=12.2.0
+compiler.cppcg1220.objdumper=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-objdump
+compiler.cppcg1220.demangler=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-c++filt
+
+group.cppc64.compilers=cppc64g8:cppc64g9:cppc64g1120:cppc64g1210:cppc64clang:cppc64g1220
group.cppc64.groupName=POWER64
compiler.cppc64g8.exe=/opt/compiler-explorer/powerpc64/gcc-at12/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-gcc
compiler.cppc64g8.objdumper=/opt/compiler-explorer/powerpc64/gcc-at12/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-objdump
@@ -692,6 +702,12 @@ compiler.cppc64g1210.objdumper=/opt/compiler-explorer/powerpc64/gcc-12.1.0/power
compiler.cppc64g1210.semver=power64 gcc 12.1.0
compiler.cppc64g1210.name=power64 gcc 12.1.0
+compiler.cppc64g1220.exe=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-gcc
+compiler.cppc64g1220.semver=12.2.0
+compiler.cppc64g1220.objdumper=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-objdump
+compiler.cppc64g1220.demangler=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-c++filt
+compiler.cppc64g1220.name=power64 gcc 12.2.0
+
compiler.cppc64clang.exe=/opt/compiler-explorer/clang-trunk/bin/clang
compiler.cppc64clang.demangler=/opt/compiler-explorer/gcc-snapshot/bin/c++filt
compiler.cppc64clang.objdumper=/opt/compiler-explorer/gcc-11.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump
@@ -700,7 +716,7 @@ compiler.cppc64clang.options=-target powerpc64
compiler.cppc64clang.supportsBinary=false
compiler.cppc64clang.semver=(snapshot)
-group.cppc64le.compilers=cppc64leg630:cppc64leg8:cppc64leg9:cppc64leg1120:cppc64leg1210:cppc64leclang
+group.cppc64le.compilers=cppc64leg630:cppc64leg8:cppc64leg9:cppc64leg1120:cppc64leg1210:cppc64leclang:cppc64leg1220
group.cppc64le.groupName=POWER64LE
compiler.cppc64leg630.exe=/opt/compiler-explorer/powerpc64le/gcc-6.3.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gcc
@@ -728,6 +744,12 @@ compiler.cppc64leg1210.objdumper=/opt/compiler-explorer/powerpc64le/gcc-12.1.0/p
compiler.cppc64leg1210.name=power64le gcc 12.1.0
compiler.cppc64leg1210.semver=12.1.0
+compiler.cppc64leg1220.exe=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gcc
+compiler.cppc64leg1220.semver=12.2.0
+compiler.cppc64leg1220.objdumper=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump
+compiler.cppc64leg1220.demangler=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-c++filt
+compiler.cppc64leg1220.name=power64le gcc 12.2.0
+
compiler.cppc64leclang.exe=/opt/compiler-explorer/clang-trunk/bin/clang
compiler.cppc64leclang.demangler=/opt/compiler-explorer/gcc-snapshot/bin/c++filt
compiler.cppc64leclang.objdumper=/opt/compiler-explorer/gcc-11.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump
@@ -747,7 +769,7 @@ group.cgccarm.includeFlag=-I
# 32 bit
group.cgcc32arm.groupName=Arm 32-bit GCC
-group.cgcc32arm.compilers=carmhfg54:carm541:carmg454:carmg464:carmg630:carm710:carmg640:carmg730:carmg750:carmg820:carmg850:carmce820:carm831:carm921:carm930:carm1020:carm1030:carm1031_07:carm1031_10:carm1021:carm1100:carm1120:carm1121:carm1130:carm1210:carmgtrunk
+group.cgcc32arm.compilers=carmhfg54:carm541:carmg454:carmg464:carmg630:carm710:carmg640:carmg730:carmg750:carmg820:carmg850:carmce820:carm831:carm921:carm930:carm1020:carm1030:carm1031_07:carm1031_10:carm1021:carm1100:carm1120:carm1121:carm1130:carm1210:carmgtrunk:carmg1220
group.cgcc32arm.isSemVer=true
group.cgcc32arm.objdumper=/opt/compiler-explorer/arm/gcc-10.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-objdump
group.cgcc32arm.instructionSet=arm32
@@ -787,6 +809,12 @@ compiler.carmg820.semver=8.2.0
compiler.carmg850.exe=/opt/compiler-explorer/arm/gcc-8.5.0/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc
compiler.carmg850.name=ARM gcc 8.5 (linux)
compiler.carmg850.semver=8.5.0
+
+compiler.carmg1220.exe=/opt/compiler-explorer/arm/gcc-12.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-gcc
+compiler.carmg1220.semver=12.2.0
+compiler.carmg1220.objdumper=/opt/compiler-explorer/arm/gcc-12.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-objdump
+compiler.carmg1220.demangler=/opt/compiler-explorer/arm/gcc-12.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-c++filt
+compiler.carmg1220.name=ARM gcc 12.2 (linux)
compiler.carmce820.exe=/opt/compiler-explorer/arm-wince/gcc-ce-8.2.0/bin/arm-mingw32ce-gcc
compiler.carmce820.name=ARM gcc 8.2 (WinCE)
compiler.carmce820.semver=8.2.0
@@ -843,7 +871,7 @@ compiler.carmgtrunk.semver=trunk
# 64 bit
group.cgcc64arm.groupName=Arm 64-bit GCC
-group.cgcc64arm.compilers=caarchg54:carm64g630:carm64g640:carm64g730:carm64g750:carm64g820:carm64g850:carm64g930:carm64g1020:carm64g1030:carm64g1100:carm64g1120:carm64g1130:carm64g1210:carm64gtrunk
+group.cgcc64arm.compilers=caarchg54:carm64g630:carm64g640:carm64g730:carm64g750:carm64g820:carm64g850:carm64g930:carm64g1020:carm64g1030:carm64g1100:carm64g1120:carm64g1130:carm64g1210:carm64gtrunk:carm64g1220
group.cgcc64arm.isSemVer=true
group.cgcc64arm.objdumper=/opt/compiler-explorer/arm64/gcc-10.2.0/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/bin/objdump
group.cgcc64arm.instructionSet=aarch64
@@ -891,6 +919,12 @@ compiler.carm64g1210.exe=/opt/compiler-explorer/arm64/gcc-12.1.0/aarch64-unknown
compiler.carm64g1210.objdumper=/opt/compiler-explorer/arm64/gcc-12.1.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-objdump
compiler.carm64g1210.name=ARM64 gcc 12.1
compiler.carm64g1210.semver=12.1.0
+
+compiler.carm64g1220.exe=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gcc
+compiler.carm64g1220.semver=12.2.0
+compiler.carm64g1220.objdumper=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-objdump
+compiler.carm64g1220.demangler=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-c++filt
+compiler.carm64g1220.name=ARM64 gcc 12.2
compiler.carm64gtrunk.exe=/opt/compiler-explorer/arm64/gcc-trunk/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gcc
compiler.carm64gtrunk.name=ARM64 gcc trunk
compiler.carm64gtrunk.semver=trunk
@@ -980,7 +1014,7 @@ compiler.carduinomega189.objdumper=/opt/compiler-explorer/avr/arduino-1.8.9/hard
################################
# GCC for MSP
-group.cmsp.compilers=cmsp430g453:cmsp430g530:cmsp430g621:cmsp430g1210
+group.cmsp.compilers=cmsp430g453:cmsp430g530:cmsp430g621:cmsp430g1210:cmsp430g1220
group.cmsp.groupName=MSP GCC
group.cmsp.baseName=MSP430 gcc
group.cmsp.isSemVer=true
@@ -997,9 +1031,14 @@ compiler.cmsp430g621.semver=6.2.1
compiler.cmsp430g1210.exe=/opt/compiler-explorer/gcc-12.1.0/msp430-unknown-elf/bin/msp430-unknown-elf-gcc
compiler.cmsp430g1210.semver=12.1.0
+compiler.cmsp430g1220.exe=/opt/compiler-explorer/msp430/gcc-12.2.0/msp430-unknown-elf/bin/msp430-unknown-elf-gcc
+compiler.cmsp430g1220.semver=12.2.0
+compiler.cmsp430g1220.objdumper=/opt/compiler-explorer/msp430/gcc-12.2.0/msp430-unknown-elf/bin/msp430-unknown-elf-objdump
+compiler.cmsp430g1220.demangler=/opt/compiler-explorer/msp430/gcc-12.2.0/msp430-unknown-elf/bin/msp430-unknown-elf-c++filt
+
################################
# GCC for AVR
-group.cavr.compilers=cavrg454:cavrg464:cavrg540:cavrg920:cavrg930:cavrg1030:cavrg1100:cavrg1210
+group.cavr.compilers=cavrg454:cavrg464:cavrg540:cavrg920:cavrg930:cavrg1030:cavrg1100:cavrg1210:cavrg1220
group.cavr.groupName=AVR GCC
group.cavr.baseName=AVR gcc
group.cavr.isSemVer=true
@@ -1033,6 +1072,11 @@ compiler.cavrg1210.exe=/opt/compiler-explorer/avr/gcc-12.1.0/bin/avr-gcc
compiler.cavrg1210.semver=12.1.0
compiler.cavrg1210.objdumper=/opt/compiler-explorer/avr/gcc-12.1.0/bin/avr-objdump
+compiler.cavrg1220.exe=/opt/compiler-explorer/avr/gcc-12.2.0/avr/bin/avr-gcc
+compiler.cavrg1220.semver=12.2.0
+compiler.cavrg1220.objdumper=/opt/compiler-explorer/avr/gcc-12.2.0/avr/bin/avr-objdump
+compiler.cavrg1220.demangler=/opt/compiler-explorer/avr/gcc-12.2.0/avr/bin/avr-c++filt
+
###############################
# GCC for MIPS
group.cmipss.compilers=&cmips:&cmipsel:&cmips64:&cmips64el
@@ -1042,7 +1086,7 @@ group.cmipss.supportsBinary=true
group.cmipss.supportsExecute=false
## MIPS
-group.cmips.compilers=cmips5:cmips930:cmips1120:cmipsg1210
+group.cmips.compilers=cmips5:cmips930:cmips1120:cmipsg1210:cmipsg1220
group.cmips.groupName=MIPS GCC
group.cmips.baseName=mips gcc
@@ -1063,9 +1107,14 @@ compiler.cmipsg1210.exe=/opt/compiler-explorer/mips/gcc-12.1.0/mips-unknown-linu
compiler.cmipsg1210.semver=12.1.0
compiler.cmipsg1210.objdumper=/opt/compiler-explorer/mips/gcc-12.1.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-objdump
+compiler.cmipsg1220.exe=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-gcc
+compiler.cmipsg1220.semver=12.2.0
+compiler.cmipsg1220.objdumper=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-objdump
+compiler.cmipsg1220.demangler=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-c++filt
+
## MIPS64
group.cmips64.groupName=MIPS64 GCC
-group.cmips64.compilers=cmips564:cmips112064:cmips64g1210
+group.cmips64.compilers=cmips564:cmips112064:cmips64g1210:cmips64g1220
group.cmips64.baseName=mips64 gcc
compiler.cmips564.exe=/opt/compiler-explorer/mips64/gcc-5.4.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-gcc
@@ -1080,9 +1129,14 @@ compiler.cmips64g1210.exe=/opt/compiler-explorer/mips64/gcc-12.1.0/mips64-unknow
compiler.cmips64g1210.semver=12.1.0
compiler.cmips64g1210.objdumper=/opt/compiler-explorer/mips64/gcc-12.1.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-objdump
+compiler.cmips64g1220.exe=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-gcc
+compiler.cmips64g1220.semver=12.2.0
+compiler.cmips64g1220.objdumper=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-objdump
+compiler.cmips64g1220.demangler=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-c++filt
+
## MIPS EL
group.cmipsel.groupName=MIPSEL GCC
-group.cmipsel.compilers=cmips5el:cmipselg1210
+group.cmipsel.compilers=cmips5el:cmipselg1210:cmipselg1220
group.cmipsel.baseName=mips (el) gcc
compiler.cmips5el.exe=/opt/compiler-explorer/mipsel/gcc-5.4.0/mipsel-unknown-linux-gnu/bin/mipsel-unknown-linux-gnu-gcc
@@ -1093,9 +1147,14 @@ compiler.cmipselg1210.exe=/opt/compiler-explorer/mipsel/gcc-12.1.0/mipsel-multil
compiler.cmipselg1210.semver=12.1.0
compiler.cmipselg1210.objdumper=/opt/compiler-explorer/mipsel/gcc-12.1.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-objdump
+compiler.cmipselg1220.exe=/opt/compiler-explorer/mipsel/gcc-12.2.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-gcc
+compiler.cmipselg1220.semver=12.2.0
+compiler.cmipselg1220.objdumper=/opt/compiler-explorer/mipsel/gcc-12.2.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-objdump
+compiler.cmipselg1220.demangler=/opt/compiler-explorer/mipsel/gcc-12.2.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-c++filt
+
## MIPS64 EL
group.cmips64el.groupName=MIPS64EL GCC
-group.cmips64el.compilers=cmips564el:cmips64elg1210
+group.cmips64el.compilers=cmips564el:cmips64elg1210:cmips64elg1220
group.cmips64el.baseName=mips64 (el) gcc
compiler.cmips564el.exe=/opt/compiler-explorer/mips64el/gcc-5.4.0/mips64el-unknown-linux-gnu/bin/mips64el-unknown-linux-gnu-gcc
@@ -1107,6 +1166,11 @@ compiler.cmips64elg1210.exe=/opt/compiler-explorer/mips64el/gcc-12.1.0/mips64el-
compiler.cmips64elg1210.semver=12.1.0
compiler.cmips64elg1210.objdumper=/opt/compiler-explorer/mips64el/gcc-12.1.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-objdump
+compiler.cmips64elg1220.exe=/opt/compiler-explorer/mips64el/gcc-12.2.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-gcc
+compiler.cmips64elg1220.semver=12.2.0
+compiler.cmips64elg1220.objdumper=/opt/compiler-explorer/mips64el/gcc-12.2.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-objdump
+compiler.cmips64elg1220.demangler=/opt/compiler-explorer/mips64el/gcc-12.2.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-c++filt
+
###############################
# GCC for nanoMIPS
group.cnanomips.compilers=cnanomips630
@@ -1132,7 +1196,7 @@ compiler.cmrisc32-gcc-trunk.instructionSet=mrisc32
###############################
# GCC for RISC-V
-group.rvcgcc.compilers=rv64-cgcc1210:rv64-cgcc1130:rv64-cgcc1120:rv64-cgcc1030:rv64-cgcc1020:rv64-cgcc940:rv64-cgcc850:rv64-cgcc820:rv32-cgcc1210:rv32-cgcc1130:rv32-cgcc1120:rv32-cgcc1030:rv32-cgcc1020:rv32-cgcc940:rv32-cgcc850:rv32-cgcc820
+group.rvcgcc.compilers=rv64-cgcc1210:rv64-cgcc1130:rv64-cgcc1220:rv64-cgcc1120:rv64-cgcc1030:rv64-cgcc1020:rv64-cgcc940:rv64-cgcc850:rv64-cgcc820:rv32-cgcc1220:rv32-cgcc1210:rv32-cgcc1130:rv32-cgcc1120:rv32-cgcc1030:rv32-cgcc1020:rv32-cgcc940:rv32-cgcc850:rv32-cgcc820
group.rvcgcc.groupName=RISC-V GCC
group.rvcgcc.supportsExecute=false
@@ -1173,6 +1237,13 @@ compiler.rv64-cgcc1120.semver=11.2.0
compiler.rv64-cgcc1120.objdumper=/opt/compiler-explorer/riscv64/gcc-11.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-objdump
compiler.rv64-cgcc1120.supportsBinary=true
+compiler.rv64-cgcc1220.exe=/opt/compiler-explorer/riscv64/gcc-12.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-gcc
+compiler.rv64-cgcc1220.semver=12.2.0
+compiler.rv64-cgcc1220.objdumper=/opt/compiler-explorer/riscv64/gcc-12.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-objdump
+compiler.rv64-cgcc1220.demangler=/opt/compiler-explorer/riscv64/gcc-12.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-c++filt
+compiler.rv64-cgcc1220.name=RISC-V rv64gc gcc 12.2.0
+compiler.rv64-cgcc1220.supportsBinary=true
+
compiler.rv64-cgcc1130.exe=/opt/compiler-explorer/riscv64/gcc-11.3.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-gcc
compiler.rv64-cgcc1130.name=RISC-V rv64gc gcc 11.3.0
compiler.rv64-cgcc1130.semver=11.3.0
@@ -1233,6 +1304,13 @@ compiler.rv32-cgcc1210.semver=12.1.0
compiler.rv32-cgcc1210.objdumper=/opt/compiler-explorer/riscv32/gcc-12.1.0/riscv32-unknown-elf/bin/riscv32-unknown-elf-objdump
compiler.rv32-cgcc1210.supportsBinary=true
+compiler.rv32-cgcc1220.exe=/opt/compiler-explorer/riscv32/gcc-12.2.0/riscv32-unknown-linux-gnu/bin/riscv32-unknown-linux-gnu-gcc
+compiler.rv32-cgcc1220.name=RISC-V rv32gc gcc 12.2.0
+compiler.rv32-cgcc1220.semver=12.2.0
+compiler.rv32-cgcc1220.demangler=/opt/compiler-explorer/riscv32/gcc-12.2.0/riscv32-unknown-linux-gnu/bin/riscv32-unknown-linux-gnu-c++filt
+compiler.rv32-cgcc1220.objdumper=/opt/compiler-explorer/riscv32/gcc-12.2.0/riscv32-unknown-linux-gnu/bin/riscv32-unknown-linux-gnu-objdump
+compiler.rv32-cgcc1220.supportsBinary=true
+
################################
# GCC for Xtensa ESP32
group.cxtensaesp32.compilers=cesp32g2019r2:cesp32g2020r1:cesp32g2020r2:cesp32g2020r3:cesp32g2021r1:cesp32g2021r2
diff --git a/etc/config/cppx_cppfront.amazon.properties b/etc/config/cppx_cppfront.amazon.properties
new file mode 100644
index 000000000..0d75086de
--- /dev/null
+++ b/etc/config/cppx_cppfront.amazon.properties
@@ -0,0 +1,11 @@
+# Default settings for cppx-cpp-front
+compilers=&cppfront
+
+group.cppfront.compilers=cppfront_trunk
+compiler.cppfront_trunk.exe=/opt/compiler-explorer/cppfront-trunk/cppfront
+compiler.cppfront_trunk.name=cppfront trunk
+defaultCompiler=cppfront_trunk
+supportsBinary=false
+supportsExecute=false
+compilerType=cppfront
+versionFlag=-version
diff --git a/etc/config/cppx_cppfront.defaults.properties b/etc/config/cppx_cppfront.defaults.properties
new file mode 100644
index 000000000..cfa3e1559
--- /dev/null
+++ b/etc/config/cppx_cppfront.defaults.properties
@@ -0,0 +1,11 @@
+# Default settings for cppx-cpp-front
+compilers=&cppfront
+
+group.cppfront.compilers=cppfront_trunk
+compiler.cppfront_trunk.exe=cppfront
+compiler.cppfront_trunk.name=cppfront trunk
+defaultCompiler=cppfront_trunk
+supportsBinary=false
+supportsExecute=false
+compilerType=cppfront
+versionFlag=-version
diff --git a/etc/config/d.amazon.properties b/etc/config/d.amazon.properties
index b9dc69004..46812c9a9 100644
--- a/etc/config/d.amazon.properties
+++ b/etc/config/d.amazon.properties
@@ -43,12 +43,65 @@ compiler.gdctrunk.objdumper=/opt/compiler-explorer/gcc-snapshot/bin/objdump
compiler.gdctrunk.semver=(trunk)
## CROSS GDC
-group.gdccross.compilers=&gdcs390x:&gdcppc:&gdcppc64:&gdcppc64le:&gdcmips64:&gdcmips:&gdcmipsel
+group.gdccross.compilers=&gdcs390x:&gdcppc:&gdcppc64:&gdcppc64le:&gdcmips64:&gdcmips:&gdcmipsel:&gdcarm:&gdcarm64:&gdcriscv:&gdcriscv64
group.gdccross.supportsExecute=false
group.gdccross.supportsBinary=true
+### GDC for RISCV
+group.gdcriscv.compilers=gdcriscv1220
+group.gdcriscv.groupName=GDC riscv
+group.gdcriscv.includeFlag=-isystem
+group.gdcriscv.isSemVer=true
+group.gdcriscv.baseName=gdc riscv
+
+compiler.gdcriscv1220.exe=/opt/compiler-explorer/riscv32/gcc-12.2.0/riscv32-unknown-linux-gnu/bin/riscv32-unknown-linux-gnu-gdc
+compiler.gdcriscv1220.semver=12.2.0
+compiler.gdcriscv1220.objdumper=/opt/compiler-explorer/riscv32/gcc-12.2.0/riscv32-unknown-linux-gnu/bin/riscv32-unknown-linux-gnu-objdump
+compiler.gdcriscv1220.demangler=/opt/compiler-explorer/riscv32/gcc-12.2.0/riscv32-unknown-linux-gnu/bin/riscv32-unknown-linux-gnu-c++filt
+compiler.gdcriscv1220.name=riscv32 12.2.0
+
+### GDC for RISCV64
+group.gdcriscv64.compilers=gdcriscv641220
+group.gdcriscv64.groupName=GDC riscv64
+group.gdcriscv64.includeFlag=-isystem
+group.gdcriscv64.isSemVer=true
+group.gdcriscv64.baseName=gdc riscv64
+
+compiler.gdcriscv641220.exe=/opt/compiler-explorer/riscv64/gcc-12.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-gdc
+compiler.gdcriscv641220.semver=12.2.0
+compiler.gdcriscv641220.objdumper=/opt/compiler-explorer/riscv64/gcc-12.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-objdump
+compiler.gdcriscv641220.demangler=/opt/compiler-explorer/riscv64/gcc-12.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-c++filt
+compiler.gdcriscv641220.name=riscv64 12.2.0
+
+
+### GDC for ARM64
+group.gdcarm64.compilers=gdcarm641220
+group.gdcarm64.groupName=GDC arm64
+group.gdcarm64.includeFlag=-isystem
+group.gdcarm64.isSemVer=true
+group.gdcarm64.baseName=gdc arm64
+
+compiler.gdcarm641220.exe=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gdc
+compiler.gdcarm641220.semver=12.2.0
+compiler.gdcarm641220.objdumper=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-objdump
+compiler.gdcarm641220.demangler=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-c++filt
+compiler.gdcarm641220.name=arm64 12.2.0
+
+### GDC for ARM 32-bits
+group.gdcarm.compilers=gdcarm1220
+group.gdcarm.groupName=GDC arm
+group.gdcarm.includeFlag=-isystem
+group.gdcarm.isSemVer=true
+group.gdcarm.baseName=gdc arm
+
+compiler.gdcarm1220.exe=/opt/compiler-explorer/arm/gcc-12.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-gdc
+compiler.gdcarm1220.semver=12.2.0
+compiler.gdcarm1220.objdumper=/opt/compiler-explorer/arm/gcc-12.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-objdump
+compiler.gdcarm1220.demangler=/opt/compiler-explorer/arm/gcc-12.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-c++filt
+compiler.gdcarm1220.name=arm 12.2.0
+
### GDC for s390x
-group.gdcs390x.compilers=gdcs390x1210
+group.gdcs390x.compilers=gdcs390x1210:gdcs390x1220
group.gdcs390x.groupName=GDC s390x
group.gdcs390x.includeFlag=-isystem
group.gdcs390x.isSemVer=true
@@ -58,8 +111,13 @@ compiler.gdcs390x1210.exe=/opt/compiler-explorer/s390x/gcc-12.1.0/s390x-ibm-linu
compiler.gdcs390x1210.semver=12.1.0
compiler.gdcs390x1210.objdumper=/opt/compiler-explorer/s390x/gcc-12.1.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-objdump
+compiler.gdcs390x1220.exe=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-gdc
+compiler.gdcs390x1220.semver=12.2.0
+compiler.gdcs390x1220.objdumper=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-objdump
+compiler.gdcs390x1220.demangler=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-c++filt
+
### GDC for powerpc
-group.gdcppc.compilers=gdcppc1210
+group.gdcppc.compilers=gdcppc1210:gdcppc1220
group.gdcppc.groupName=GDC powerpc
group.gdcppc.includeFlag=-isystem
group.gdcppc.isSemVer=true
@@ -69,8 +127,13 @@ compiler.gdcppc1210.exe=/opt/compiler-explorer/powerpc/gcc-12.1.0/powerpc-unknow
compiler.gdcppc1210.semver=12.1.0
compiler.gdcppc1210.objdumper=/opt/compiler-explorer/powerpc/gcc-12.1.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-objdump
+compiler.gdcppc1220.exe=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-gdc
+compiler.gdcppc1220.semver=12.2.0
+compiler.gdcppc1220.objdumper=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-objdump
+compiler.gdcppc1220.demangler=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-c++filt
+
### GDC for powerpc64
-group.gdcppc64.compilers=gdcppc641210
+group.gdcppc64.compilers=gdcppc641210:gdcppc641220
group.gdcppc64.groupName=GDC powerpc64
group.gdcppc64.includeFlag=-isystem
group.gdcppc64.isSemVer=true
@@ -80,8 +143,13 @@ compiler.gdcppc641210.exe=/opt/compiler-explorer/powerpc64/gcc-12.1.0/powerpc64-
compiler.gdcppc641210.semver=12.1.0
compiler.gdcppc641210.objdumper=/opt/compiler-explorer/powerpc64/gcc-12.1.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-objdump
+compiler.gdcppc641220.exe=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-gdc
+compiler.gdcppc641220.semver=12.2.0
+compiler.gdcppc641220.objdumper=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-objdump
+compiler.gdcppc641220.demangler=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-c++filt
+
### GDC for powerpc64le
-group.gdcppc64le.compilers=gdcppc64le1210
+group.gdcppc64le.compilers=gdcppc64le1210:gdcppc64le1220
group.gdcppc64le.groupName=GDC powerpc64le
group.gdcppc64le.includeFlag=-isystem
group.gdcppc64le.isSemVer=true
@@ -91,8 +159,13 @@ compiler.gdcppc64le1210.exe=/opt/compiler-explorer/powerpc64le/gcc-12.1.0/powerp
compiler.gdcppc64le1210.semver=12.1.0
compiler.gdcppc64le1210.objdumper=/opt/compiler-explorer/powerpc64le/gcc-12.1.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump
+compiler.gdcppc64le1220.exe=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gdc
+compiler.gdcppc64le1220.semver=12.2.0
+compiler.gdcppc64le1220.objdumper=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump
+compiler.gdcppc64le1220.demangler=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-c++filt
+
### GDC for mips64
-group.gdcmips64.compilers=gdcmips641210
+group.gdcmips64.compilers=gdcmips641210:gdcmips641220
group.gdcmips64.groupName=GDC mips64
group.gdcmips64.includeFlag=-isystem
group.gdcmips64.isSemVer=true
@@ -102,8 +175,13 @@ compiler.gdcmips641210.exe=/opt/compiler-explorer/mips64/gcc-12.1.0/mips64-unkno
compiler.gdcmips641210.semver=12.1.0
compiler.gdcmips641210.objdumper=/opt/compiler-explorer/mips64/gcc-12.1.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-objdump
+compiler.gdcmips641220.exe=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-gdc
+compiler.gdcmips641220.semver=12.2.0
+compiler.gdcmips641220.objdumper=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-objdump
+compiler.gdcmips641220.demangler=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-c++filt
+
### GDC for mips
-group.gdcmips.compilers=gdcmips1210
+group.gdcmips.compilers=gdcmips1210:gdcmips1220
group.gdcmips.groupName=GDC mips
group.gdcmips.includeFlag=-isystem
group.gdcmips.isSemVer=true
@@ -113,8 +191,13 @@ compiler.gdcmips1210.exe=/opt/compiler-explorer/mips/gcc-12.1.0/mips-unknown-lin
compiler.gdcmips1210.semver=12.1.0
compiler.gdcmips1210.objdumper=/opt/compiler-explorer/mips/gcc-12.1.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-objdump
+compiler.gdcmips1220.exe=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-gdc
+compiler.gdcmips1220.semver=12.2.0
+compiler.gdcmips1220.objdumper=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-objdump
+compiler.gdcmips1220.demangler=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-c++filt
+
### GDC for mipsel
-group.gdcmipsel.compilers=gdcmipsel1210
+group.gdcmipsel.compilers=gdcmipsel1210:gdcmipsel1220
group.gdcmipsel.groupName=GDC mipsel
group.gdcmipsel.includeFlag=-isystem
group.gdcmipsel.isSemVer=true
@@ -124,6 +207,11 @@ compiler.gdcmipsel1210.exe=/opt/compiler-explorer/mipsel/gcc-12.1.0/mipsel-multi
compiler.gdcmipsel1210.semver=12.1.0
compiler.gdcmipsel1210.objdumper=/opt/compiler-explorer/mipsel/gcc-12.1.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-objdump
+compiler.gdcmipsel1220.exe=/opt/compiler-explorer/mipsel/gcc-12.2.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-gdc
+compiler.gdcmipsel1220.semver=12.2.0
+compiler.gdcmipsel1220.objdumper=/opt/compiler-explorer/mipsel/gcc-12.2.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-objdump
+compiler.gdcmipsel1220.demangler=/opt/compiler-explorer/mipsel/gcc-12.2.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-c++filt
+
group.ldc.compilers=ldc017:ldc100:ldc110:ldc120:ldc130:ldc140:ldc150:ldc160:ldc170:ldc180:ldc190:ldc1_10:ldc1_11:ldc1_12:ldc1_13:ldc1_14:ldc1_15:ldc1_16:ldc1_17:ldc1_18:ldc1_19:ldc1_20:ldc1_21:ldc1_22:ldc1_23:ldc1_24:ldc1_25:ldc1_26:ldc1_27:ldc1_28:ldc1_29:ldc1_30:ldcbeta:ldclatestci
group.ldc.compilerType=ldc
group.ldc.isSemVer=true
diff --git a/etc/config/fortran.amazon.properties b/etc/config/fortran.amazon.properties
index ad8f988d6..6c8b3b216 100644
--- a/etc/config/fortran.amazon.properties
+++ b/etc/config/fortran.amazon.properties
@@ -157,14 +157,37 @@ compiler.ifx202210.semver=2022.1.0
###############################
# GCC Cross-Compilers
-group.cross.compilers=&gccarm:&gccaarch64:&ppcs:&gccrv32:&gccrv64:&gccmips:&gccmips64:&gccmipsel:&gccmips64el:&gccs390x
+group.cross.compilers=&gccarm:&gccaarch64:&ppcs:&gccrv32:&gccrv64:&gccmips:&gccmips64:&gccmipsel:&gccmips64el:&gccs390x:&gccriscv:&gccriscv64
group.cross.isSemVer=true
group.cross.supportsBinary=false
group.cross.groupName=Cross GCC
+
+###############################
+# GCC for RISCV64
+group.gccriscv64.compilers=friscv64g1220
+group.gccriscv64.groupName=RISCV64 gfortran
+group.gccriscv64.baseName=RISCV64 gfortran
+
+compiler.friscv64g1220.exe=/opt/compiler-explorer/riscv64/gcc-12.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-gfortran
+compiler.friscv64g1220.semver=12.2.0
+compiler.friscv64g1220.objdumper=/opt/compiler-explorer/riscv64/gcc-12.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-objdump
+compiler.friscv64g1220.demangler=/opt/compiler-explorer/riscv64/gcc-12.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-c++filt
+
+###############################
+# GCC for RISCV
+group.gccriscv.compilers=friscvg1220
+group.gccriscv.groupName=RISCV (32bit) gfortran
+group.gccriscv.baseName=RISCV (32bit) gfortran
+
+compiler.friscvg1220.exe=/opt/compiler-explorer/riscv32/gcc-12.2.0/riscv32-unknown-linux-gnu/bin/riscv32-unknown-linux-gnu-gfortran
+compiler.friscvg1220.semver=12.2.0
+compiler.friscvg1220.objdumper=/opt/compiler-explorer/riscv32/gcc-12.2.0/riscv32-unknown-linux-gnu/bin/riscv32-unknown-linux-gnu-objdump
+compiler.friscvg1220.demangler=/opt/compiler-explorer/riscv32/gcc-12.2.0/riscv32-unknown-linux-gnu/bin/riscv32-unknown-linux-gnu-c++filt
+
###############################
# GCC for ARM
-group.gccarm.compilers=farmg640:farmg730:farmg820:farmg1210
+group.gccarm.compilers=farmg640:farmg730:farmg820:farmg1210:farmg1220
group.gccarm.groupName=ARM (32bit) gfortran
group.gccarm.baseName=ARM (32bit) gfortran
@@ -180,9 +203,14 @@ compiler.farmg820.semver=8.2
compiler.farmg1210.exe=/opt/compiler-explorer/gcc-12.1.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-gfortran
compiler.farmg1210.semver=12.1.0
+compiler.farmg1220.exe=/opt/compiler-explorer/arm/gcc-12.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-gfortran
+compiler.farmg1220.semver=12.2.0
+compiler.farmg1220.objdumper=/opt/compiler-explorer/arm/gcc-12.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-objdump
+compiler.farmg1220.demangler=/opt/compiler-explorer/arm/gcc-12.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-c++filt
+
###############################
## GCC for s390x
-group.gccs390x.compilers=fs390xg1210
+group.gccs390x.compilers=fs390xg1210:fs390xg1220
group.gccs390x.groupName=s390x gfortran
group.gccs390x.baseName=s390x gfortran
@@ -190,6 +218,11 @@ compiler.fs390xg1210.exe=/opt/compiler-explorer/s390x/gcc-12.1.0/s390x-ibm-linux
compiler.fs390xg1210.semver=12.1.0
compiler.fs390xg1210.objdumper=/opt/compiler-explorer/s390x/gcc-12.1.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-objdump
+compiler.fs390xg1220.exe=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-gfortran
+compiler.fs390xg1220.semver=12.2.0
+compiler.fs390xg1220.objdumper=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-objdump
+compiler.fs390xg1220.demangler=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-c++filt
+
###############################
# LLVM Flang for X86
group.clang_llvmflang.compilers=flangtrunk:flangtrunknew
@@ -209,7 +242,7 @@ compiler.flangtrunknew.supportsBinary=false
###############################
# GCC for ARM 64bit
-group.gccaarch64.compilers=farm64g640:farm64g730:farm64g820:farm64g1210
+group.gccaarch64.compilers=farm64g640:farm64g730:farm64g820:farm64g1210:farm64g1220
group.gccaarch64.groupName=ARM (AARCH64) GCC
compiler.farm64g640.exe=/opt/compiler-explorer/arm64/gcc-6.4.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gfortran
compiler.farm64g640.name=AARCH64 gfortran 6.4
@@ -222,6 +255,12 @@ compiler.farm64g1210.exe=/opt/compiler-explorer/arm64/gcc-12.1.0/aarch64-unknown
compiler.farm64g1210.name=AARCH64 gfortran 12.1.0
compiler.farm64g1210.exe=/opt/compiler-explorer/arm64/gcc-12.1.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-objdump
+compiler.farm64g1220.exe=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gfortran
+compiler.farm64g1220.semver=12.2.0
+compiler.farm64g1220.objdumper=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-objdump
+compiler.farm64g1220.demangler=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-c++filt
+compiler.farm64g1220.name=AARCH64 gfortran 12.2.0
+
###############################
# GCC for PPCs
group.ppcs.compilers=&ppc64:&ppc64le:&ppc
@@ -229,7 +268,7 @@ group.ppcs.groupName=POWER Compilers
###############################
# GCC for PPC
-group.ppc.compilers=fppcg1210
+group.ppc.compilers=fppcg1210:fppcg1220
group.ppc.groupName=POWER gfortran
group.ppc.baseName=POWER gfortran
@@ -237,9 +276,14 @@ compiler.fppcg1210.exe=/opt/compiler-explorer/powerpc/gcc-12.1.0/powerpc-unknown
compiler.fppcg1210.semver=12.1.0
compiler.fppcg1210.objdumper=/opt/compiler-explorer/powerpc/gcc-12.1.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-objdump
+compiler.fppcg1220.exe=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-gfortran
+compiler.fppcg1220.semver=12.2.0
+compiler.fppcg1220.objdumper=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-objdump
+compiler.fppcg1220.demangler=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-c++filt
+
###############################
# GCC for PPC64
-group.ppc64.compilers=fppc64g8:fppc64g9:fppc64g1210
+group.ppc64.compilers=fppc64g8:fppc64g9:fppc64g1210:fppc64g1220
group.ppc64.groupName=POWER64 gfortran
group.ppc64.baseName=POWER64 gfortran
@@ -255,9 +299,14 @@ compiler.fppc64g1210.exe=/opt/compiler-explorer/powerpc64/gcc-12.1.0/powerpc64-u
compiler.fppc64g1210.semver=12.1.0
compiler.fppc64g1210.objdumper=/opt/compiler-explorer/powerpc64/gcc-12.1.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-objdump
+compiler.fppc64g1220.exe=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-gfortran
+compiler.fppc64g1220.semver=12.2.0
+compiler.fppc64g1220.objdumper=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-objdump
+compiler.fppc64g1220.demangler=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-c++filt
+
###############################
# GCC for PPC64LE
-group.ppc64le.compilers=fppc64leg8:fppc64leg9:fppc64leg1210
+group.ppc64le.compilers=fppc64leg8:fppc64leg9:fppc64leg1210:fppc64leg1220
group.ppc64le.groupName=POWER64le gfortran
group.ppc64le.baseName=POWER64le gfortran
@@ -273,6 +322,11 @@ compiler.fppc64leg1210.exe=/opt/compiler-explorer/powerpc64le/gcc-12.1.0/powerpc
compiler.fppc64leg1210.semver=12.1.0
compiler.fppc64leg1210.objdumper=/opt/compiler-explorer/powerpc64le/gcc-12.1.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump
+compiler.fppc64leg1220.exe=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gfortran
+compiler.fppc64leg1220.semver=12.2.0
+compiler.fppc64leg1220.objdumper=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump
+compiler.fppc64leg1220.demangler=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-c++filt
+
################################
# GCC for RISC-V 32-bits
group.gccrv32.compilers=frv32g1210
@@ -295,7 +349,7 @@ compiler.frv64g1210.exe=/opt/compiler-explorer/gcc-12.1.0/riscv64-unknown-elf/bi
################################
# GCC for MIPS
-group.gccmips.compilers=fmipsg1210
+group.gccmips.compilers=fmipsg1210:fmipsg1220
group.gccmips.groupName=MIPS gfortran
group.gccmips.baseName=MIPS gfortran
@@ -303,9 +357,14 @@ compiler.fmipsg1210.exe=/opt/compiler-explorer/mips/gcc-12.1.0/mips-unknown-linu
compiler.fmipsg1210.semver=12.1.0
compiler.fmipsg1210.objdumper=/opt/compiler-explorer/mips/gcc-12.1.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-objdump
+compiler.fmipsg1220.exe=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-gfortran
+compiler.fmipsg1220.semver=12.2.0
+compiler.fmipsg1220.objdumper=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-objdump
+compiler.fmipsg1220.demangler=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-c++filt
+
################################
# GCC for MIPS64
-group.gccmips64.compilers=fmips64g1210
+group.gccmips64.compilers=fmips64g1210:fmips64g1220
group.gccmips64.groupName=MIPS64 gfortran
group.gccmips64.baseName=MIPS64 gfortran
@@ -313,9 +372,14 @@ compiler.fmips64g1210.exe=/opt/compiler-explorer/mips64/gcc-12.1.0/mips64-unknow
compiler.fmips64g1210.semver=12.1.0
compiler.fmips64g1210.objdumper=/opt/compiler-explorer/mips64/gcc-12.1.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-objdump
+compiler.fmips64g1220.exe=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-gfortran
+compiler.fmips64g1220.semver=12.2.0
+compiler.fmips64g1220.objdumper=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-objdump
+compiler.fmips64g1220.demangler=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-c++filt
+
################################
# GCC for MIPSEL
-group.gccmipsel.compilers=fmipselg1210
+group.gccmipsel.compilers=fmipselg1210:fmipselg1220
group.gccmipsel.groupName=MIPSel gfortran
group.gccmipsel.baseName=MIPSel gfortran
@@ -323,9 +387,14 @@ compiler.fmipselg1210.exe=/opt/compiler-explorer/mipsel/gcc-12.1.0/mipsel-multil
compiler.fmipselg1210.semver=12.1.0
compiler.fmipselg1210.objdumper=/opt/compiler-explorer/mipsel/gcc-12.1.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-objdump
+compiler.fmipselg1220.exe=/opt/compiler-explorer/mipsel/gcc-12.2.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-gfortran
+compiler.fmipselg1220.semver=12.2.0
+compiler.fmipselg1220.objdumper=/opt/compiler-explorer/mipsel/gcc-12.2.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-objdump
+compiler.fmipselg1220.demangler=/opt/compiler-explorer/mipsel/gcc-12.2.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-c++filt
+
################################
# GCC for MIPS64el
-group.gccmips64el.compilers=fmips64elg1210
+group.gccmips64el.compilers=fmips64elg1210:fmips64elg1220
group.gccmips64el.groupName=MIPS64el gfortran
group.gccmips64el.baseName=MIPS64el gfortran
@@ -333,6 +402,11 @@ compiler.fmips64elg1210.exe=/opt/compiler-explorer/mips64el/gcc-12.1.0/mips64el-
compiler.fmips64elg1210.semver=12.1.0
compiler.fmips64elg1210.objdumper=/opt/compiler-explorer/mips64el/gcc-12.1.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-objdump
+compiler.fmips64elg1220.exe=/opt/compiler-explorer/mips64el/gcc-12.2.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-gfortran
+compiler.fmips64elg1220.semver=12.2.0
+compiler.fmips64elg1220.objdumper=/opt/compiler-explorer/mips64el/gcc-12.2.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-objdump
+compiler.fmips64elg1220.demangler=/opt/compiler-explorer/mips64el/gcc-12.2.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-c++filt
+
#################################
#################################
# Installed tools
diff --git a/etc/config/go.amazon.properties b/etc/config/go.amazon.properties
index 27de65c9b..17d718246 100644
--- a/etc/config/go.amazon.properties
+++ b/etc/config/go.amazon.properties
@@ -372,15 +372,144 @@ compiler.wasm_gltip.semver=(tip)
###############################
# Cross GO
-group.cross.compilers=&ppc
+group.cross.compilers=&gccgoppc:&gccgoppc64:&gccgoppc64le:&gccgoarm:&gccgoarm64:&gccgos390x:&gccgoriscv64:&gccgomipsel:&gccgomips64el:&gccgomips:&gccgomips64
group.cross.supportsBinary=false
group.cross.groupName=Cross Go
###############################
+# GCC for mips64el
+group.gccgomips64el.compilers=gccgomips64el1220
+group.gccgomips64el.groupName=GCCGO mips64el
+group.gccgomips64el.isSemVer=true
+
+compiler.gccgomips64el1220.exe=/opt/compiler-explorer/mips64el/gcc-12.2.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-gccgo
+compiler.gccgomips64el1220.semver=12.2.0
+compiler.gccgomips64el1220.objdumper=/opt/compiler-explorer/mips64el/gcc-12.2.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-objdump
+compiler.gccgomips64el1220.demangler=/opt/compiler-explorer/mips64el/gcc-12.2.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-c++filt
+compiler.gccgomips64el1220.name=mips64el 12.2.0
+
+###############################
+# GCC for mipsel
+group.gccgomipsel.compilers=gccgomipsel1220
+group.gccgomipsel.groupName=GCCGO mips64
+group.gccgomipsel.isSemVer=true
+
+compiler.gccgomipsel1220.exe=/opt/compiler-explorer/mipsel/gcc-12.2.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-gccgo
+compiler.gccgomipsel1220.semver=12.2.0
+compiler.gccgomipsel1220.objdumper=/opt/compiler-explorer/mipsel/gcc-12.2.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-objdump
+compiler.gccgomipsel1220.demangler=/opt/compiler-explorer/mipsel/gcc-12.2.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-c++filt
+compiler.gccgomipsel1220.name=mipsel 12.2.0
+
+###############################
+# GCC for riscv64
+group.gccgoriscv64.compilers=gccgoriscv641220
+group.gccgoriscv64.groupName=GCCGO riscv64
+group.gccgoriscv64.isSemVer=true
+
+compiler.gccgoriscv641220.exe=/opt/compiler-explorer/riscv64/gcc-12.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-gccgo
+compiler.gccgoriscv641220.semver=12.2.0
+compiler.gccgoriscv641220.objdumper=/opt/compiler-explorer/riscv64/gcc-12.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-objdump
+compiler.gccgoriscv641220.demangler=/opt/compiler-explorer/riscv64/gcc-12.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-c++filt
+compiler.gccgoriscv641220.name=riscv64 12.2.0
+
+###############################
+# GCC for s390x
+group.gccgos390x.compilers=gccgos390x1220
+group.gccgos390x.groupName=GCCGO s390x
+group.gccgos390x.isSemVer=true
+
+compiler.gccgos390x1220.exe=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-gccgo
+compiler.gccgos390x1220.semver=12.2.0
+compiler.gccgos390x1220.objdumper=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-objdump
+compiler.gccgos390x1220.demangler=/opt/compiler-explorer/s390x/gcc-12.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-c++filt
+compiler.gccgos390x1220.name=s390x 12.2.0
+
+###############################
+# GCC for MIPS
+group.gccgomips.compilers=gccgomips1220
+group.gccgomips.groupName=GCCGO mips
+group.gccgomips.isSemVer=true
+
+compiler.gccgomips1220.exe=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-gccgo
+compiler.gccgomips1220.semver=12.2.0
+compiler.gccgomips1220.objdumper=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-objdump
+compiler.gccgomips1220.demangler=/opt/compiler-explorer/mips/gcc-12.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-c++filt
+compiler.gccgomips1220.name=mips 12.2.0
+
+###############################
+# GCC for MIPS64
+group.gccgomips64.compilers=gccgomips641220
+group.gccgomips64.groupName=GCCGO mips64
+group.gccgomips64.isSemVer=true
+
+compiler.gccgomips641220.exe=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-gccgo
+compiler.gccgomips641220.semver=12.2.0
+compiler.gccgomips641220.objdumper=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-objdump
+compiler.gccgomips641220.demangler=/opt/compiler-explorer/mips64/gcc-12.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-c++filt
+compiler.gccgomips641220.name=mips64 12.2.0
+
+
+###############################
+# GCC for ARM64
+group.gccgoarm64.compilers=gccgoarm641220
+group.gccgoarm64.groupName=GCCGO arm64
+group.gccgoarm64.isSemVer=true
+
+compiler.gccgoarm641220.exe=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gccgo
+compiler.gccgoarm641220.semver=12.2.0
+compiler.gccgoarm641220.objdumper=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-objdump
+compiler.gccgoarm641220.demangler=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-c++filt
+compiler.gccgoarm641220.name=arm64 12.2.0
+
+###############################
+# GCC for ARM
+group.gccgoarm.compilers=gccgoarm1220
+group.gccgoarm.groupName=GCCGO arm
+group.gccgoarm.isSemVer=true
+
+compiler.gccgoarm1220.exe=/opt/compiler-explorer/arm/gcc-12.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-gccgo
+compiler.gccgoarm1220.semver=12.2.0
+compiler.gccgoarm1220.objdumper=/opt/compiler-explorer/arm/gcc-12.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-objdump
+compiler.gccgoarm1220.demangler=/opt/compiler-explorer/arm/gcc-12.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-c++filt
+compiler.gccgoarm1220.name=arm 12.2.0
+
+###############################
# GCC for PPC
-group.ppc.compilers=gppc64leg8:gppc64g8:gppc64leg9:gppc64g9
-group.ppc.groupName=POWER Compilers
-group.ppc.isSemVer=true
+group.gccgoppc.compilers=gccgoppc1220
+group.gccgoppc.groupName=GCCGO POWER
+group.gccgoppc.isSemVer=true
+
+compiler.gccgoppc1220.exe=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-gccgo
+compiler.gccgoppc1220.semver=12.2.0
+compiler.gccgoppc1220.objdumper=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-objdump
+compiler.gccgoppc1220.demangler=/opt/compiler-explorer/powerpc/gcc-12.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-c++filt
+compiler.gccgoppc1220.name=powerpc 12.2.0
+
+###############################
+# GCC for PPC64
+group.gccgoppc64le.compilers=gccgoppc64le1220
+group.gccgoppc64le.groupName=GCCGO POWER64LE
+group.gccgoppc64le.isSemVer=true
+
+compiler.gccgoppc64le1220.exe=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gccgo
+compiler.gccgoppc64le1220.semver=12.2.0
+compiler.gccgoppc64le1220.objdumper=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump
+compiler.gccgoppc64le1220.demangler=/opt/compiler-explorer/powerpc64le/gcc-12.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-c++filt
+compiler.gccgoppc64le1220.name=powerpc64le 12.2.0
+
+
+###############################
+# GCC for PPC64
+group.gccgoppc64.compilers=gppc64leg8:gppc64g8:gppc64leg9:gppc64g9:gccgoppc641220
+group.gccgoppc64.groupName=GCCGO POWER64
+group.gccgoppc64.isSemVer=true
+
+compiler.gccgoppc641220.exe=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-gccgo
+compiler.gccgoppc641220.semver=12.2.0
+compiler.gccgoppc641220.objdumper=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-objdump
+compiler.gccgoppc641220.demangler=/opt/compiler-explorer/powerpc64/gcc-12.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-c++filt
+compiler.gccgoppc641220.name=powerpc64 12.2.0
+
compiler.gppc64leg8.exe=/opt/compiler-explorer/powerpc64le/gcc-at12/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gccgo
compiler.gppc64leg8.name=power64le AT12.0
compiler.gppc64leg8.semver=(snapshot)
diff --git a/examples/cppx_cppfront/default.cpp2 b/examples/cppx_cppfront/default.cpp2
new file mode 100644
index 000000000..99fc51b6c
--- /dev/null
+++ b/examples/cppx_cppfront/default.cpp2
@@ -0,0 +1,17 @@
+#include <iostream>
+#include <string>
+
+name: () -> std::string = {
+ s: std::string = "world";
+ decorate(s);
+ return s;
+}
+
+decorate: (inout s: std::string) = {
+ s = "[" + s + "]";
+}
+
+auto main() -> int {
+ // name();
+ std::cout << "Hello " << name() << "\n";
+}
diff --git a/lib/base-compiler.ts b/lib/base-compiler.ts
index 00f72449e..46a9465cd 100644
--- a/lib/base-compiler.ts
+++ b/lib/base-compiler.ts
@@ -74,6 +74,7 @@ import {AsmParser} from './parsers/asm-parser';
import {IAsmParser} from './parsers/asm-parser.interfaces';
import {LlvmPassDumpParser} from './parsers/llvm-pass-dump-parser';
import {getToolchainPath} from './toolchain-utils';
+import {ToolTypeKey} from './tooling/base-tool.interface';
import * as utils from './utils';
export class BaseCompiler {
@@ -1303,7 +1304,7 @@ export class BaseCompiler {
return this.postProcess(asmResult, outputFilename, filters);
}
- runToolsOfType(tools, type, compilationInfo): Promise<ToolResult>[] {
+ runToolsOfType(tools, type: ToolTypeKey, compilationInfo): Promise<ToolResult>[] {
const tooling: Promise<ToolResult>[] = [];
if (tools) {
for (const tool of tools) {
diff --git a/lib/compilers/_all.js b/lib/compilers/_all.js
index ba13a2b57..d7c034966 100644
--- a/lib/compilers/_all.js
+++ b/lib/compilers/_all.js
@@ -36,6 +36,7 @@ export {ClangCudaCompiler} from './clang';
export {ClangHipCompiler} from './clang';
export {ClangIntelCompiler} from './clang';
export {CleanCompiler} from './clean';
+export {CppFrontCompiler} from './cppfront';
export {CprocCompiler} from './cproc';
export {CLSPVCompiler} from './clspv';
export {CrystalCompiler} from './crystal';
diff --git a/lib/compilers/cppfront.ts b/lib/compilers/cppfront.ts
new file mode 100644
index 000000000..ebbca43b9
--- /dev/null
+++ b/lib/compilers/cppfront.ts
@@ -0,0 +1,78 @@
+// Copyright (c) 2022, 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.
+
+import path from 'path';
+
+import {ExecutionOptions} from '../../types/compilation/compilation.interfaces';
+import {ParseFilters} from '../../types/features/filters.interfaces';
+import {BaseCompiler} from '../base-compiler';
+import * as exec from '../exec';
+
+export class CppFrontCompiler extends BaseCompiler {
+ static get key() {
+ return 'cppfront';
+ }
+
+ constructor(info, env) {
+ super(info, env);
+
+ this.outputFilebase = 'example';
+ }
+
+ override orderArguments(
+ options: string[],
+ inputFilename: string,
+ libIncludes: string[],
+ libOptions: string[],
+ libPaths: string[],
+ libLinks: string[],
+ userOptions: string[],
+ staticLibLinks: string[],
+ ) {
+ return options.concat(
+ userOptions,
+ ['example.cpp2'], // Grotesque hack to handle the fact we can't use abs filenames with current
+ libIncludes,
+ libOptions,
+ libPaths,
+ libLinks,
+ staticLibLinks,
+ );
+ }
+ override optionsForFilter(filters: ParseFilters, outputFilename: any) {
+ return [];
+ }
+
+ override getSharedLibraryPathsAsArguments(libraries, libDownloadPath) {
+ return [];
+ }
+
+ override getSharedLibraryLinks(libraries): string[] {
+ return [];
+ }
+
+ override getOutputFilename(dirPath: string, outputFilebase: string, key?: any): string {
+ return path.join(dirPath, `${outputFilebase}.cpp`);
+ }
+}
diff --git a/lib/languages.ts b/lib/languages.ts
index 8252aea45..15789c0f0 100644
--- a/lib/languages.ts
+++ b/lib/languages.ts
@@ -193,6 +193,16 @@ const definitions: Record<LanguageKey, LanguageDefinition> = {
formatter: null,
previewFilter: null,
},
+ cppx_cppfront: {
+ name: 'Cppx-cppfront',
+ monaco: 'cppx-cppfront',
+ extensions: ['.cpp2'],
+ alias: [],
+ logoUrl: 'c++.svg', // TODO: Find a better alternative
+ logoUrlDark: null,
+ formatter: null,
+ previewFilter: null,
+ },
crystal: {
name: 'Crystal',
monaco: 'crystal',
diff --git a/lib/options-handler.js b/lib/options-handler.js
index 953817c4f..21e754bec 100755
--- a/lib/options-handler.js
+++ b/lib/options-handler.js
@@ -31,7 +31,7 @@ import _ from 'underscore';
import {logger} from './logger';
import {getToolTypeByKey} from './tooling';
-import {asSafeVer, getHash, splitArguments} from './utils';
+import {asSafeVer, getHash, splitArguments, splitIntoArray} from './utils';
/***
* Handles the setup of the options object passed on each page request
@@ -143,7 +143,7 @@ export class ClientOptionsHandler {
name: this.compilerProps(lang, toolBaseName + '.name'),
type: this.compilerProps(lang, toolBaseName + '.type'),
exe: toolPath,
- exclude: this.compilerProps(lang, toolBaseName + '.exclude'),
+ exclude: splitIntoArray(this.compilerProps(lang, toolBaseName + '.exclude')),
includeKey: this.compilerProps(lang, toolBaseName + '.includeKey'),
options: splitArguments(this.compilerProps(lang, toolBaseName + '.options')),
args: this.compilerProps(lang, toolBaseName + '.args'),
@@ -168,14 +168,6 @@ export class ClientOptionsHandler {
return tools;
}
- splitIntoArray(value, defaultArr) {
- if (value) {
- return value.split(':');
- } else {
- return defaultArr;
- }
- }
-
parseLibraries(baseLibs) {
const libraries = {};
for (const [lang, forLang] of Object.entries(baseLibs)) {
@@ -187,14 +179,11 @@ export class ClientOptionsHandler {
name: this.compilerProps(lang, libBaseName + '.name'),
url: this.compilerProps(lang, libBaseName + '.url'),
description: this.compilerProps(lang, libBaseName + '.description'),
- staticliblink: this.splitIntoArray(
- this.compilerProps(lang, libBaseName + '.staticliblink'),
- [],
- ),
- liblink: this.splitIntoArray(this.compilerProps(lang, libBaseName + '.liblink'), []),
- dependencies: this.splitIntoArray(this.compilerProps(lang, libBaseName + '.dependencies'), []),
+ staticliblink: splitIntoArray(this.compilerProps(lang, libBaseName + '.staticliblink')),
+ liblink: splitIntoArray(this.compilerProps(lang, libBaseName + '.liblink')),
+ dependencies: splitIntoArray(this.compilerProps(lang, libBaseName + '.dependencies')),
versions: {},
- examples: this.splitIntoArray(this.compilerProps(lang, libBaseName + '.examples'), []),
+ examples: splitIntoArray(this.compilerProps(lang, libBaseName + '.examples')),
options: splitArguments(this.compilerProps(lang, libBaseName + '.options', '')),
};
const listedVersions = `${this.compilerProps(lang, libBaseName + '.versions')}`;
@@ -203,18 +192,18 @@ export class ClientOptionsHandler {
const libVersionName = libBaseName + `.versions.${version}`;
const versionObject = {
version: this.compilerProps(lang, libVersionName + '.version'),
- staticliblink: this.splitIntoArray(
+ staticliblink: splitIntoArray(
this.compilerProps(lang, libVersionName + '.staticliblink'),
libraries[lang][lib].staticliblink,
),
- alias: this.splitIntoArray(this.compilerProps(lang, libVersionName + '.alias'), []),
- dependencies: this.splitIntoArray(
+ alias: splitIntoArray(this.compilerProps(lang, libVersionName + '.alias')),
+ dependencies: splitIntoArray(
this.compilerProps(lang, libVersionName + '.dependencies'),
libraries[lang][lib].dependencies,
),
path: [],
libpath: [],
- liblink: this.splitIntoArray(
+ liblink: splitIntoArray(
this.compilerProps(lang, libVersionName + '.liblink'),
libraries[lang][lib].liblink,
),
diff --git a/lib/tooling/_all.js b/lib/tooling/_all.js
index c6779c369..074516bd9 100644
--- a/lib/tooling/_all.js
+++ b/lib/tooling/_all.js
@@ -27,6 +27,7 @@ export {ClangQueryTool} from './clang-query-tool';
export {ClangTidyTool} from './clang-tidy-tool';
export {CompilerDropinTool} from './compiler-dropin-tool';
export {LLVMMcaTool} from './llvm-mca-tool';
+export {LLVMCovTool} from './llvm-cov-tool';
export {MicrosoftAnalysisTool} from './microsoft-analysis-tool';
export {OSACATool} from './osaca-tool';
export {PaholeTool} from './pahole-tool';
diff --git a/lib/tooling/base-tool.interface.ts b/lib/tooling/base-tool.interface.ts
new file mode 100755
index 000000000..afc092d21
--- /dev/null
+++ b/lib/tooling/base-tool.interface.ts
@@ -0,0 +1,49 @@
+// Copyright (c) 2022, 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.
+
+import {LanguageKey} from '../../types/languages.interfaces';
+
+export type ToolTypeKey = 'independent' | 'postcompilation';
+
+export type ToolInfo = {
+ id: string;
+ name?: string;
+ type?: ToolTypeKey;
+ exe: string;
+ exclude: string[];
+ includeKey?: string;
+ options: string[];
+ args?: string;
+ languageId?: LanguageKey;
+ stdinHint?: string;
+ monacoStdin?: string;
+ icon?: string;
+ darkIcon?: string;
+ compilerLanguage: LanguageKey;
+};
+
+export type ToolEnv = {
+ ceProps: (key: string, defaultValue?: any) => string | boolean | number | undefined;
+ compilerProps: (key: string, defaultValue?: any) => string | boolean | number | undefined;
+};
diff --git a/lib/tooling/base-tool.js b/lib/tooling/base-tool.ts
index b31bc2787..057492603 100755
--- a/lib/tooling/base-tool.js
+++ b/lib/tooling/base-tool.ts
@@ -27,9 +27,15 @@ import path from 'path';
import PromClient from 'prom-client';
import _ from 'underscore';
+import {ExecutionOptions, ToolResult} from '../../types/compilation/compilation.interfaces';
+import {UnprocessedExecResult} from '../../types/execution/execution.interfaces';
+import {Library, SelectedLibraryVersion} from '../../types/libraries/libraries.interfaces';
+import {ResultLine} from '../../types/resultline/resultline.interfaces';
import * as exec from '../exec';
import {logger} from '../logger';
-import * as utils from '../utils';
+import {parseOutput} from '../utils';
+
+import {ToolEnv, ToolInfo, ToolTypeKey} from './base-tool.interface';
const toolCounter = new PromClient.Counter({
name: 'tool_invocations_total',
@@ -38,19 +44,21 @@ const toolCounter = new PromClient.Counter({
});
export class BaseTool {
- constructor(toolInfo, env) {
+ protected tool: ToolInfo;
+ private env: ToolEnv;
+ private addOptionsToToolArgs = true;
+
+ constructor(toolInfo: ToolInfo, env: ToolEnv) {
this.tool = toolInfo;
this.env = env;
- this.tool.exclude = this.tool.exclude ? this.tool.exclude.split(':') : [];
this.addOptionsToToolArgs = true;
- this.parseOutput = utils.parseOutput;
}
getId() {
return this.tool.id;
}
- getType() {
+ getType(): ToolTypeKey {
return this.tool.type || 'independent';
}
@@ -60,7 +68,7 @@ export class BaseTool {
return this.tool.id.replace(/[^\da-z]/gi, '_') + timestamp_str + '_';
}
- isCompilerExcluded(compilerId, compilerProps) {
+ isCompilerExcluded(compilerId: string, compilerProps: ToolEnv['compilerProps']): boolean {
if (this.tool.includeKey) {
// If the includeKey is set, we only support compilers that have a truthy 'includeKey'.
if (!compilerProps(this.tool.includeKey)) {
@@ -68,34 +76,39 @@ export class BaseTool {
}
// Even if the include key is truthy, we fall back to the exclusion list.
}
- return this.tool.exclude.find(excl => compilerId.includes(excl));
+ return this.tool.exclude.find(excl => compilerId.includes(excl)) !== undefined;
}
- exec(toolExe, args, options) {
+ exec(toolExe: string, args: string[], options: ExecutionOptions) {
return exec.execute(toolExe, args, options);
}
- getDefaultExecOptions() {
+ getDefaultExecOptions(): ExecutionOptions {
return {
- timeoutMs: this.env.ceProps('compileTimeoutMs', 7500),
- maxErrorOutput: this.env.ceProps('max-error-output', 5000),
+ timeoutMs: this.env.ceProps('compileTimeoutMs', 7500) as number,
+ maxErrorOutput: this.env.ceProps('max-error-output', 5000) as number,
wrapper: this.env.compilerProps('compiler-wrapper'),
};
}
- createErrorResponse(message) {
+ // By default calls utils.parseOutput, but lets subclasses override their output processing
+ protected parseOutput(lines: string, inputFilename?: string, pathPrefix?: string): ResultLine[] {
+ return parseOutput(lines, inputFilename, pathPrefix);
+ }
+
+ createErrorResponse(message: string): ToolResult {
return {
id: this.tool.id,
name: this.tool.name,
code: -1,
languageId: 'stderr',
stdout: [],
- stderr: utils.parseOutput(message),
+ stderr: this.parseOutput(message),
};
}
// mostly copy&paste from base-compiler.js
- findLibVersion(selectedLib, supportedLibraries) {
+ findLibVersion(selectedLib: SelectedLibraryVersion, supportedLibraries: Record<string, Library>) {
const foundLib = _.find(supportedLibraries, (o, libId) => libId === selectedLib.id);
if (!foundLib) return false;
@@ -103,38 +116,40 @@ export class BaseTool {
}
// mostly copy&paste from base-compiler.js
- getIncludeArguments(libraries, supportedLibraries) {
+ getIncludeArguments(libraries: SelectedLibraryVersion[], supportedLibraries: Record<string, Library>): string[] {
const includeFlag = '-I';
- return _.flatten(
- _.map(libraries, selectedLib => {
- const foundVersion = this.findLibVersion(selectedLib, supportedLibraries);
- if (!foundVersion) return false;
+ return libraries.flatMap(selectedLib => {
+ const foundVersion = this.findLibVersion(selectedLib, supportedLibraries);
+ if (!foundVersion) return [];
- return _.map(foundVersion.path, path => includeFlag + path);
- }),
- );
+ return foundVersion.path.map(path => includeFlag + path);
+ });
}
- getLibraryOptions(libraries, supportedLibraries) {
- return _.flatten(
- _.map(libraries, selectedLib => {
- const foundVersion = this.findLibVersion(selectedLib, supportedLibraries);
- if (!foundVersion) return false;
+ getLibraryOptions(libraries: SelectedLibraryVersion[], supportedLibraries: Record<string, Library>): string[] {
+ return libraries.flatMap(selectedLib => {
+ const foundVersion = this.findLibVersion(selectedLib, supportedLibraries);
+ if (!foundVersion) return [];
- return foundVersion.options;
- }),
- );
+ return foundVersion.options;
+ });
}
- async runTool(compilationInfo, inputFilepath, args, stdin /*, supportedLibraries*/) {
+ async runTool(
+ compilationInfo: Record<any, any>,
+ inputFilepath?: string,
+ args?: string[],
+ stdin?: string,
+ supportedLibraries?: Record<string, Library>,
+ ) {
if (this.tool.name) {
toolCounter.inc({
language: compilationInfo.compiler.lang,
name: this.tool.name,
});
}
- let execOptions = this.getDefaultExecOptions();
+ const execOptions = this.getDefaultExecOptions();
if (inputFilepath) execOptions.customCwd = path.dirname(inputFilepath);
execOptions.input = stdin;
@@ -153,8 +168,8 @@ export class BaseTool {
}
}
- convertResult(result, inputFilepath, exeDir) {
- const transformedFilepath = result.filenameTransform(inputFilepath);
+ convertResult(result: UnprocessedExecResult, inputFilepath?: string, exeDir?: string): ToolResult {
+ const transformedFilepath = inputFilepath ? result.filenameTransform(inputFilepath) : undefined;
return {
id: this.tool.id,
name: this.tool.name,
diff --git a/lib/tooling/compiler-dropin-tool.js b/lib/tooling/compiler-dropin-tool.js
index ab7be7c33..31a52b1a1 100644
--- a/lib/tooling/compiler-dropin-tool.js
+++ b/lib/tooling/compiler-dropin-tool.js
@@ -101,8 +101,8 @@ export class CompilerDropinTool extends BaseTool {
async runTool(compilationInfo, inputFilepath, args, stdin, supportedLibraries) {
const sourcefile = inputFilepath;
- const includeflags = super.getIncludeArguments(compilationInfo.libraries, supportedLibraries);
- const libOptions = super.getLibraryOptions(compilationInfo.libraries, supportedLibraries);
+ const includeflags = this.getIncludeArguments(compilationInfo.libraries, supportedLibraries);
+ const libOptions = this.getLibraryOptions(compilationInfo.libraries, supportedLibraries);
const compileFlags = this.getOrderedArguments(compilationInfo, includeflags, libOptions, args, sourcefile);
if (!compileFlags) {
diff --git a/lib/tooling/llvm-cov-tool.ts b/lib/tooling/llvm-cov-tool.ts
new file mode 100644
index 000000000..adf12ffe5
--- /dev/null
+++ b/lib/tooling/llvm-cov-tool.ts
@@ -0,0 +1,108 @@
+// Copyright (c) 2022, 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.
+
+import path from 'path';
+
+import {ExecutionOptions} from '../../types/compilation/compilation.interfaces';
+
+import {BaseTool} from './base-tool';
+
+export class LLVMCovTool extends BaseTool {
+ static get key() {
+ return 'llvm-cov-tool';
+ }
+
+ override async runTool(compilationInfo, inputFilepath, args, stdin) {
+ const compilationExecOptions = this.getDefaultExecOptions();
+ compilationExecOptions.customCwd = path.dirname(inputFilepath);
+ compilationExecOptions.input = stdin;
+ try {
+ const generatedExecutableName = this.getUniqueFilePrefix() + '-coverage.a';
+ const compilationResult = await this.exec(
+ compilationInfo.compiler.exe,
+ [
+ '-fprofile-instr-generate',
+ '-fcoverage-mapping',
+ '-g',
+ '-O0',
+ inputFilepath,
+ '-o',
+ generatedExecutableName,
+ ],
+ compilationExecOptions,
+ );
+
+ if (compilationResult.code !== 0) {
+ return this.createErrorResponse(
+ `<Compilation error>\n${compilationResult.stdout}\n${compilationResult.stderr}`,
+ );
+ }
+
+ const runExecOptions = this.getDefaultExecOptions() as ExecutionOptions;
+ runExecOptions.customCwd = path.dirname(inputFilepath);
+
+ await this.exec('./' + generatedExecutableName, [], {
+ ...runExecOptions,
+ input: stdin,
+ });
+
+ const folder = path.dirname(this.tool.exe);
+ const profdataPath = path.join(folder, 'llvm-profdata');
+
+ const generatedProfdataName = this.getUniqueFilePrefix() + '.profdata';
+ const profdataResult = await this.exec(
+ profdataPath,
+ ['merge', '-sparse', './default.profraw', '-o', './' + generatedProfdataName],
+ runExecOptions,
+ );
+ if (profdataResult.code !== 0) {
+ return this.createErrorResponse(
+ `<llvm-profdata error>\n${profdataResult.stdout}\n${profdataResult.stderr}`,
+ );
+ }
+
+ const covResult = await this.exec(
+ this.tool.exe,
+ [
+ 'show',
+ './' + generatedExecutableName,
+ '-instr-profile=./' + generatedProfdataName,
+ '-format',
+ 'text',
+ '-use-color',
+ '-compilation-dir=./',
+ ...args,
+ ],
+ runExecOptions,
+ );
+ if (covResult.code === 0) {
+ return this.convertResult(covResult, inputFilepath, path.dirname(this.tool.exe));
+ } else {
+ return this.createErrorResponse(`<llvm-cov error>\n${covResult.stdout}\n${covResult.stderr}`);
+ }
+ } catch (e) {
+ return this.createErrorResponse(`<Tool error: ${e}>`);
+ }
+ }
+}
diff --git a/lib/utils.ts b/lib/utils.ts
index c8aba0235..7fe456d10 100644
--- a/lib/utils.ts
+++ b/lib/utils.ts
@@ -368,6 +368,15 @@ export function base32Encode(buffer: Buffer): string {
return output;
}
+// Splits a : separated list into its own array, or to default if input is undefined
+export function splitIntoArray(input?: string, defaultArray: string[] = []): string[] {
+ if (input !== undefined) {
+ return input.split(':');
+ } else {
+ return defaultArray;
+ }
+}
+
export function splitArguments(options = ''): string[] {
// escape hashes first, otherwise they're interpreted as comments
const escapedOptions = options.replaceAll(/#/g, '\\#');
diff --git a/static/panes/editor.js b/static/panes/editor.js
index 209c33ae7..efc79124f 100644
--- a/static/panes/editor.js
+++ b/static/panes/editor.js
@@ -1521,8 +1521,9 @@ Editor.prototype.onCompileResponse = function (compilerId, compiler, result) {
Editor.prototype.onExecuteResponse = function (executorId, compiler, result) {
var output = this.getAllOutputAndErrors(result, compiler.name, 'Execution ' + executorId);
- output = output.concat(this.getAllOutputAndErrors(result.buildResult, compiler.name, 'Executor ' + executorId));
-
+ if (result.buildResult) {
+ output = output.concat(this.getAllOutputAndErrors(result.buildResult, compiler.name, 'Executor ' + executorId));
+ }
this.setDecorationTags(this.collectOutputWidgets(output).widgets, 'Executor '+ executorId);
this.numberUsedLines();
diff --git a/static/panes/tool.js b/static/panes/tool.js
index d407efe6b..7827965e0 100644
--- a/static/panes/tool.js
+++ b/static/panes/tool.js
@@ -491,6 +491,7 @@ Tool.prototype.onCompileResult = function (id, compiler, result) {
if (toolResult.languageId) {
this.setEditorContent(_.pluck(toolResult.stdout, 'text').join('\n'));
} else {
+ this.plainContentRoot.empty();
_.each(
(toolResult.stdout || []).concat(toolResult.stderr || []),
function (obj) {
diff --git a/test/options-handler.js b/test/options-handler.js
index 80ab8c80a..fd8253ced 100644
--- a/test/options-handler.js
+++ b/test/options-handler.js
@@ -511,7 +511,6 @@ describe('Options handler', () => {
fake: {
faketool: {
addOptionsToToolArgs: true,
- parseOutput: parseOutput,
tool: {
args: undefined,
compilerLanguage: 'fake',
@@ -531,7 +530,6 @@ describe('Options handler', () => {
},
someothertool: {
addOptionsToToolArgs: true,
- parseOutput: parseOutput,
tool: {
args: undefined,
compilerLanguage: 'fake',
diff --git a/types/compilation/compilation.interfaces.ts b/types/compilation/compilation.interfaces.ts
index f8ace17fa..1a4f77d94 100644
--- a/types/compilation/compilation.interfaces.ts
+++ b/types/compilation/compilation.interfaces.ts
@@ -24,6 +24,8 @@
import {BuildEnvDownloadInfo} from '../../lib/buildenvsetup/buildenv.interfaces';
import {IAsmParser} from '../../lib/parsers/asm-parser.interfaces';
+
+import {LanguageKey} from '../languages.interfaces';
import {ResultLine} from '../resultline/resultline.interfaces';
export type CompilationResult = {
@@ -115,9 +117,9 @@ export type Artifact = {
export type ToolResult = {
id: string;
- name: string;
+ name?: string;
code: number;
- languageId: string;
+ languageId?: LanguageKey | 'stderr';
stderr: ResultLine[];
stdout: ResultLine[];
artifact?: Artifact;
diff --git a/types/languages.interfaces.ts b/types/languages.interfaces.ts
index bea70b040..699289295 100644
--- a/types/languages.interfaces.ts
+++ b/types/languages.interfaces.ts
@@ -37,6 +37,7 @@ export type LanguageKey =
| 'cppx'
| 'cppx_blue'
| 'cppx_gold'
+ | 'cppx_cppfront'
| 'crystal'
| 'csharp'
| 'cuda'