diff options
author | Patrick Quist <partouf@gmail.com> | 2022-08-25 21:52:09 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-25 21:52:09 +0200 |
commit | 5b485d36e3708e192b63400d3bc30bb22cf33330 (patch) | |
tree | a6db770b803b7b6e82fa7224f331b38b7797f220 | |
parent | 098e0abc4dc870278f1ab4c060c420a5999b54b3 (diff) | |
parent | 16dca9d307220229b80327ea0998c4cecec9137b (diff) | |
download | compiler-explorer-gh-4023.tar.gz compiler-explorer-gh-4023.zip |
Merge branch 'main' into z88dkgh-4023
44 files changed, 1081 insertions, 274 deletions
diff --git a/.idea/scopes/Client.xml b/.idea/scopes/Client.xml index e656f0ee6..59a4d3044 100644 --- a/.idea/scopes/Client.xml +++ b/.idea/scopes/Client.xml @@ -1,3 +1,3 @@ <component name="DependencyValidationManager"> - <scope name="Client" pattern="file[compiler-explorer]:static/*||file[compiler-explorer]:static/themes/*||file[compiler-explorer]:static/assets/*||file[compiler-explorer]:views/*||file[compiler-explorer]:static/modes/*||file[compiler-explorer]:static/panes/*||file[compiler-explorer]:static/generated/*" /> + <scope name="Client" pattern="file[compiler-explorer]:static/*||file[compiler-explorer]:static/styles/themes/*||file[compiler-explorer]:static/assets/*||file[compiler-explorer]:views/*||file[compiler-explorer]:static/modes/*||file[compiler-explorer]:static/panes/*||file[compiler-explorer]:static/generated/*" /> </component>
\ No newline at end of file diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 245f7bd16..b39dfe33c 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -121,3 +121,4 @@ From oldest to newest contributor, we would like to thank: - [Ofek Shilon](https://github.com/ofekshilon) - [Ross Smyth](https://github.com/RossSmyth) - [Mike Urbach](https://github.com/mikeurbach) +- [J. Ryan Stinnett](https://github.com/jryans) @@ -300,7 +300,10 @@ async function setupWebPackDevMiddleware(router) { router.use( webpackDevMiddleware(webpackCompiler, { publicPath: '/static', - stats: 'errors-only', + stats: { + preset: 'errors-only', + timings: true, + }, }), ); diff --git a/etc/config/ada.amazon.properties b/etc/config/ada.amazon.properties index 6fae62608..dfb36be8e 100644 --- a/etc/config/ada.amazon.properties +++ b/etc/config/ada.amazon.properties @@ -1,20 +1,21 @@ # Default settings for Ada -compilers=&gnat:&gnatriscv64:&gnatarm:&gnats390x:&gnatmipss:&gnatppcs -defaultCompiler=gnat121 +compilers=&gnat:&gnatcross +defaultCompiler=gnat122 versionFlag=--version compilerType=ada + ############################### # GCC (as in GNU Compiler Collection) for x86 -group.gnat.compilers=gnat82:gnat95:gnat102:gnat104:gnat111:gnat112:gnat113:gnat121:gnatsnapshot +group.gnat.compilers=gnat82:gnat95:gnat102:gnat104:gnat111:gnat112:gnat113:gnat121:gnat122:gnatsnapshot group.gnat.intelAsm=-masm=intel group.gnat.groupName=x86-64 -group.gnat.isSemVer=true group.gnat.baseName=x86-64 gnat group.gnat.supportsBinary=true group.gnat.supportsExecute=true -group.gnat.objdumper=/opt/compiler-explorer/gcc-12.1.0/bin/objdump -group.gnat.demangler=/opt/compiler-explorer/gcc-12.1.0/bin/c++filt +group.gnat.objdumper=/opt/compiler-explorer/gcc-12.2.0/bin/objdump +group.gnat.demangler=/opt/compiler-explorer/gcc-12.2.0/bin/c++filt +group.gnat.isSemVer=true compiler.gnat82.exe=/opt/compiler-explorer/gcc-8.2.0/bin/gnatmake compiler.gnat82.semver=8.2 @@ -32,6 +33,8 @@ compiler.gnat113.exe=/opt/compiler-explorer/gcc-11.3.0/bin/gnatmake compiler.gnat113.semver=11.3 compiler.gnat121.exe=/opt/compiler-explorer/gcc-12.1.0/bin/gnatmake compiler.gnat121.semver=12.1 +compiler.gnat122.exe=/opt/compiler-explorer/gcc-12.2.0/bin/gnatmake +compiler.gnat122.semver=12.2 compiler.gnatsnapshot.exe=/opt/compiler-explorer/gcc-snapshot/bin/gnatmake compiler.gnatsnapshot.demangler=/opt/compiler-explorer/gcc-snapshot/bin/c++filt compiler.gnatsnapshot.objdumper=/opt/compiler-explorer/gcc-snapshot/bin/objdump @@ -39,13 +42,17 @@ compiler.gnatsnapshot.name=x86-64 gnat (trunk) compiler.gnatsnapshot.semver=(trunk) ################################ +# Cross GNAT +group.gnatcross.compilers=&gnatriscv64:&gnatarm:&gnatarm64:&gnats390x:&gnatmipss:&gnatppcs +group.gnatcross.supportsExecute=false +group.gnatcross.supportsBinary=false +group.gnatcross.isSemVer=true + +################################ # GNAT for riscv64 group.gnatriscv64.compilers=gnatriscv64112:gnatriscv64103 group.gnatriscv64.groupName=riscv64 group.gnatriscv64.instructionSet=riscv -group.gnatriscv64.isSemVer=true -group.gnatriscv64.supportsBinary=false -group.gnatriscv64.supportsExecute=false compiler.gnatriscv64103.exe=/opt/compiler-explorer/riscv64/gnat-riscv64-elf-linux64-10.3.0-2/bin/riscv64-elf-gnatmake compiler.gnatriscv64103.demangler=/opt/compiler-explorer/riscv64/gnat-riscv64-elf-linux64-10.3.0-2/bin/riscv64-elf-c++filt @@ -61,83 +68,109 @@ compiler.gnatriscv64112.adarts=/opt/compiler-explorer/riscv64/gnat-riscv64-elf-l ################################ # GNAT for s390x -group.gnats390x.compilers=gnats390x1120 +group.gnats390x.compilers=gnats390x1120:gnats390x1210 group.gnats390x.groupName=s390x group.gnats390x.instructionSet=s390x group.gnats390x.baseName=s390x gnat -group.gnats390x.isSemVer=true -group.gnats390x.supportsBinary=false -group.gnats390x.supportsExecute=false compiler.gnats390x1120.exe=/opt/compiler-explorer/s390x/gcc-11.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-gnatmake compiler.gnats390x1120.demangler=/opt/compiler-explorer/s390x/gcc-11.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-c++filt 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 ################################ # GNAT for ppc group.gnatppcs.compilers=&gnatppc:&gnatppc64:&gnatppc64le group.gnatppcs.instructionSet=ppc -group.gnatppcs.isSemVer=true -group.gnatppcs.supportsBinary=false -group.gnatppcs.supportsExecute=false ## POWER group.gnatppc.groupName=power -group.gnatppc.compilers=gnatppc1120 +group.gnatppc.compilers=gnatppc1120:gnatppc1210 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 compiler.gnatppc1120.demangler=/opt/compiler-explorer/powerpc/gcc-11.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-c++filt compiler.gnatppc1120.semver=11.2.0 +compiler.gnatppc1210.exe=/opt/compiler-explorer/powerpc/gcc-12.1.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-gnatmake +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 + ## POWER64 group.gnatppc64.groupName=power64 -group.gnatppc64.compilers=gnatppc641120 +group.gnatppc64.compilers=gnatppc641120:gnatppc641210 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 compiler.gnatppc641120.demangler=/opt/compiler-explorer/powerpc64/gcc-11.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-c++filt compiler.gnatppc641120.semver=11.2.0 +compiler.gnatppc641210.exe=/opt/compiler-explorer/powerpc64/gcc-12.1.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-gnatmake +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 + ## POWER64LE group.gnatppc64le.groupName=power64le -group.gnatppc64le.compilers=gnatppc64le1120 +group.gnatppc64le.compilers=gnatppc64le1120:gnatppc64le1210 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 compiler.gnatppc64le1120.demangler=/opt/compiler-explorer/powerpc64le/gcc-11.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-c++filt compiler.gnatppc64le1120.semver=11.2.0 +compiler.gnatppc64le1210.exe=/opt/compiler-explorer/powerpc64le/gcc-12.1.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gnatmake +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 + ################################ -# GNAT for MIPS +# GNAT for MIPSs +## GNAT builds for mipsel and mips64el are broken on 12.1.0 group.gnatmipss.compilers=&gnatmips:&gnatmips64 group.gnatmipss.instructionSet=mips -group.gnatmipss.isSemVer=true -group.gnatmipss.supportsBinary=false -group.gnatmipss.supportsExecute=false ## MIPS group.gnatmips.groupName=mips -group.gnatmips.compilers=gnatmips1120 +group.gnatmips.compilers=gnatmips1120:gnatmips1210 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 compiler.gnatmips1120.demangler=/opt/compiler-explorer/mips/gcc-11.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-c++filt compiler.gnatmips1120.semver=11.2.0 +compiler.gnatmips1210.exe=/opt/compiler-explorer/mips/gcc-12.1.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-gnatmake +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 + ## MIPS64 group.gnatmips64.groupName=mips64 -group.gnatmips64.compilers=gnatmips641120 +group.gnatmips64.compilers=gnatmips641120:gnatmips641210 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 compiler.gnatmips641120.demangler=/opt/compiler-explorer/mips64/gcc-11.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-c++filt compiler.gnatmips641120.semver=11.2.0 +compiler.gnatmips641210.exe=/opt/compiler-explorer/mips64/gcc-12.1.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-gnatmake +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 + +################################ +# GNAT for arm64 +group.gnatarm64.compilers=gnatarm641210 +group.gnatarm64.groupName=arm64 +group.gnatarm64.baseName=arm64 gnat +group.gnatarm64.instructionSet=arm64 + +compiler.gnatarm641210.exe=/opt/compiler-explorer/arm64/gcc-12.1.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gnatmake +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 + ################################ # GNAT for arm group.gnatarm.compilers=gnatarm112:gnatarm103 group.gnatarm.groupName=arm group.gnatarm.instructionSet=arm32 -group.gnatarm.isSemVer=true -group.gnatarm.supportsBinary=false -group.gnatarm.supportsExecute=false compiler.gnatarm103.exe=/opt/compiler-explorer/arm/gnat-arm-elf-linux64-10.3.0-2/bin/arm-eabi-gnatmake compiler.gnatarm103.demangler=/opt/compiler-explorer/arm/gnat-arm-elf-linux64-10.3.0-2/bin/arm-eabi-c++filt diff --git a/etc/config/c++.amazon.properties b/etc/config/c++.amazon.properties index 48ae23f59..5fac61bdb 100644 --- a/etc/config/c++.amazon.properties +++ b/etc/config/c++.amazon.properties @@ -1,7 +1,7 @@ compilers=&gcc86:&icc:&icx:&clang:&clangx86trunk:&rvclang:&wasmclang:&cl:&cross:&ellcc:&zapcc:&djggp:www.godbolt.ms@443:&armclang32:&armclang64:&zigcxx:&cxx6502 -defaultCompiler=g121 -demangler=/opt/compiler-explorer/gcc-12.1.0/bin/c++filt -objdumper=/opt/compiler-explorer/gcc-12.1.0/bin/objdump +defaultCompiler=g122 +demangler=/opt/compiler-explorer/gcc-12.2.0/bin/c++filt +objdumper=/opt/compiler-explorer/gcc-12.2.0/bin/objdump needsMulti=false buildenvsetup=ceconan @@ -12,7 +12,7 @@ externalparser.exe=/usr/local/bin/asm-parser ############################### # GCC for x86 -group.gcc86.compilers=g412:g447:g453:g464:g471:g472:g473:g474:g481:g482:g483:g484:g485:g490:g491:g492:g493:g494:g510:g520:g530:g540:g550:g6:g62:g63:g64:g71:g72:g73:g74:g75:g81:g82:g83:g84:g85:g91:g92:g93:g94:g95:g101:g102:g103:g104:g111:g112:g113:g121:gsnapshot:gcontracts-trunk:gcontract-labels-trunk:gcxx-modules-trunk:gcxx-coroutines-trunk:gcc-embed-trunk:gcc-static-analysis-trunk +group.gcc86.compilers=g412:g447:g453:g464:g471:g472:g473:g474:g481:g482:g483:g484:g485:g490:g491:g492:g493:g494:g510:g520:g530:g540:g550:g6:g62:g63:g64:g71:g72:g73:g74:g75:g81:g82:g83:g84:g85:g91:g92:g93:g94:g95:g101:g102:g103:g104:g111:g112:g113:g121:g122:gsnapshot:gcontracts-trunk:gcontract-labels-trunk:gcxx-modules-trunk:gcxx-coroutines-trunk:gcc-embed-trunk:gcc-static-analysis-trunk group.gcc86.groupName=GCC x86-64 group.gcc86.instructionSet=amd64 group.gcc86.baseName=x86-64 gcc @@ -132,6 +132,9 @@ compiler.g113.exe=/opt/compiler-explorer/gcc-11.3.0/bin/g++ compiler.g113.semver=11.3 compiler.g121.exe=/opt/compiler-explorer/gcc-12.1.0/bin/g++ compiler.g121.semver=12.1 +compiler.g122.exe=/opt/compiler-explorer/gcc-12.2.0/bin/g++ +compiler.g122.semver=12.2 + compiler.gsnapshot.exe=/opt/compiler-explorer/gcc-snapshot/bin/g++ compiler.gsnapshot.demangler=/opt/compiler-explorer/gcc-snapshot/bin/c++filt compiler.gsnapshot.objdumper=/opt/compiler-explorer/gcc-snapshot/bin/objdump @@ -701,9 +704,9 @@ group.s390x.compilers=&gccs390x # GCC for s390x group.gccs390x.supportsBinary=true group.gccs390x.supportsExecute=false - -group.gccs390x.groupName=s390x G++ -group.gccs390x.compilers=gccs390x1120 +group.gccs390x.baseName=s390x gcc +group.gccs390x.groupName=s390x gcc +group.gccs390x.compilers=gccs390x1120:s390xg1210 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 @@ -711,6 +714,10 @@ compiler.gccs390x1120.exe=/opt/compiler-explorer/s390x/gcc-11.2.0/s390x-ibm-linu compiler.gccs390x1120.name=s390x gcc 11.2.0 compiler.gccs390x1120.semver=11.2.0 +compiler.s390xg1210.exe=/opt/compiler-explorer/s390x/gcc-12.1.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-g++ +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 + ############################### # Cross compilers for PPC group.ppcs.compilers=&ppc:&ppc64:&ppc64le @@ -719,32 +726,46 @@ group.ppcs.supportsBinary=true group.ppcs.supportsExecute=false ## POWER -group.ppc.compilers=ppcg1120:ppcg48 +group.ppc.compilers=ppcg48:ppcg1120:ppcg1210 group.ppc.groupName=POWER group.ppc.baseName=power gcc compiler.ppcg48.exe=/opt/compiler-explorer/powerpc/gcc-4.8.5/bin/powerpc-unknown-linux-gnu-g++ compiler.ppcg48.objdumper=/opt/compiler-explorer/powerpc/gcc-4.8.5/bin/powerpc-unknown-linux-gnu-objdump compiler.ppcg48.semver=4.8.5 + compiler.ppcg1120.exe=/opt/compiler-explorer/powerpc/gcc-11.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-g++ compiler.ppcg1120.objdumper=/opt/compiler-explorer/powerpc/gcc-11.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-objdump compiler.ppcg1120.semver=11.2.0 +compiler.ppcg1210.exe=/opt/compiler-explorer/powerpc/gcc-12.1.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-g++ +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 + ## POWER64 group.ppc64.groupName=POWER64 -group.ppc64.compilers=ppc64g8:ppc64g9:ppc64g1120:ppc64clang +group.ppc64.baseName=power64 gcc +group.ppc64.compilers=ppc64g8:ppc64g9:ppc64g1120:ppc64g1210:ppc64clang + 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 compiler.ppc64g8.name=power64 AT12.0 (gcc8) compiler.ppc64g8.semver=(snapshot) + compiler.ppc64g9.exe=/opt/compiler-explorer/powerpc64/gcc-at13/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-g++ compiler.ppc64g9.objdumper=/opt/compiler-explorer/powerpc64/gcc-at13/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-objdump compiler.ppc64g9.name=power64 AT13.0 (gcc9) compiler.ppc64g9.semver=(snapshot) + compiler.ppc64g1120.exe=/opt/compiler-explorer/powerpc64/gcc-11.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-g++ compiler.ppc64g1120.objdumper=/opt/compiler-explorer/powerpc64/gcc-11.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-objdump compiler.ppc64g1120.semver=power64 gcc 11.2.0 compiler.ppc64g1120.name=power64 gcc 11.2.0 + +compiler.ppc64g1210.exe=/opt/compiler-explorer/powerpc64/gcc-12.1.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-g++ +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.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 @@ -755,23 +776,34 @@ compiler.ppc64clang.semver=(snapshot) ## POWER64LE group.ppc64le.groupName=POWER64LE -group.ppc64le.compilers=ppc64leg630:ppc64leg8:ppc64leg9:ppc64leg1120:ppc64leclang +group.ppc64le.compilers=ppc64leg630:ppc64leg8:ppc64leg9:ppc64leg1120:ppc64leg1210:ppc64leclang +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++ compiler.ppc64leg630.objdumper=/opt/compiler-explorer/powerpc64le/gcc-6.3.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump compiler.ppc64leg630.name=power64le gcc 6.3.0 compiler.ppc64leg630.semver=6.3.0 + compiler.ppc64leg8.exe=/opt/compiler-explorer/powerpc64le/gcc-at12/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-g++ compiler.ppc64leg8.name=power64le AT12.0 (gcc8) compiler.ppc64leg8.objdumper=/opt/compiler-explorer/powerpc64le/gcc-at12/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump compiler.ppc64leg8.semver=(snapshot) + compiler.ppc64leg9.exe=/opt/compiler-explorer/powerpc64le/gcc-at13/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-g++ compiler.ppc64leg9.objdumper=/opt/compiler-explorer/powerpc64le/gcc-at13/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump compiler.ppc64leg9.name=power64le AT13.0 (gcc9) compiler.ppc64leg9.semver=(snapshot) + compiler.ppc64leg1120.exe=/opt/compiler-explorer/powerpc64le/gcc-11.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-g++ compiler.ppc64leg1120.objdumper=/opt/compiler-explorer/powerpc64le/gcc-11.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump compiler.ppc64leg1120.name=power64le gcc 11.2.0 compiler.ppc64leg1120.semver=11.2.0 + +compiler.ppc64leg1210.exe=/opt/compiler-explorer/powerpc64le/gcc-12.1.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-g++ +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.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 @@ -879,6 +911,7 @@ compiler.arm1130.exe=/opt/compiler-explorer/arm/gcc-11.3.0/arm-unknown-linux-gnu compiler.arm1130.name=ARM gcc 11.3 (linux) compiler.arm1130.semver=11.3.0 compiler.arm1210.exe=/opt/compiler-explorer/arm/gcc-12.1.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-g++ +compiler.arm1210.objdumper=/opt/compiler-explorer/arm/gcc-12.1.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-objdump compiler.arm1210.name=ARM gcc 12.1 (linux) compiler.arm1210.semver=12.1.0 compiler.armgtrunk.exe=/opt/compiler-explorer/arm/gcc-trunk/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-g++ @@ -921,6 +954,7 @@ compiler.arm64g1120.semver=11.2 compiler.arm64g1130.exe=/opt/compiler-explorer/arm64/gcc-11.3.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-g++ 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.arm64gtrunk.exe=/opt/compiler-explorer/arm64/gcc-trunk/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-g++ compiler.arm64gtrunk.semver=trunk @@ -1019,7 +1053,7 @@ compiler.msp430g621.semver=6.2.1 ################################ # GCC for AVR -group.avr.compilers=avrg454:avrg464:avrg540:avrg920:avrg930:avrg1030:avrg1100 +group.avr.compilers=avrg454:avrg464:avrg540:avrg920:avrg930:avrg1030:avrg1100:avrg1210 group.avr.groupName=AVR GCC group.avr.baseName=AVR gcc group.avr.isSemVer=true @@ -1028,25 +1062,35 @@ compiler.avrg454.exe=/opt/compiler-explorer/avr/gcc-4.5.4/bin/avr-g++ compiler.avrg454.alias=avrg453 compiler.avrg454.semver=4.5.4 compiler.avrg454.supportsBinary=false + compiler.avrg464.exe=/opt/compiler-explorer/avr/gcc-4.6.4/bin/avr-g++ compiler.avrg464.semver=4.6.4 compiler.avrg464.objdumper=/opt/compiler-explorer/avr/gcc-4.6.4/bin/avr-objdump + compiler.avrg540.exe=/opt/compiler-explorer/avr/arduino-1.8.9/hardware/tools/avr/bin/avr-g++ compiler.avrg540.semver=5.4.0 compiler.avrg540.objdumper=/opt/compiler-explorer/avr/arduino-1.8.9/hardware/tools/avr/bin/avr-objdump + compiler.avrg920.exe=/opt/compiler-explorer/avr/gcc-9.2.0/bin/avr-g++ compiler.avrg920.semver=9.2.0 compiler.avrg920.objdumper=/opt/compiler-explorer/avr/gcc-9.2.0/bin/avr-objdump + compiler.avrg930.exe=/opt/compiler-explorer/avr/gcc-9.3.0/bin/avr-g++ compiler.avrg930.semver=9.3.0 compiler.avrg930.objdumper=/opt/compiler-explorer/avr/gcc-9.3.0/bin/avr-objdump + compiler.avrg1030.exe=/opt/compiler-explorer/avr/gcc-10.3.0/bin/avr-g++ compiler.avrg1030.semver=10.3.0 compiler.avrg1030.objdumper=/opt/compiler-explorer/avr/gcc-10.3.0/bin/avr-objdump + compiler.avrg1100.exe=/opt/compiler-explorer/avr/gcc-11.1.0/bin/avr-g++ compiler.avrg1100.semver=11.1.0 compiler.avrg1100.objdumper=/opt/compiler-explorer/avr/gcc-11.1.0/bin/avr-objdump +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 + ############################### # GCC for MIPS group.mipss.compilers=&mips:&mipsel:&mips64:&mips64el @@ -1057,46 +1101,69 @@ group.mipss.supportsExecute=false ## MIPS group.mips.groupName=MIPS GCC -group.mips.compilers=mips5:mips930:mips1120 +group.mips.compilers=mips5:mips930:mips1120:mipsg1210 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++ compiler.mips5.semver=5.4 compiler.mips5.objdumper=/opt/compiler-explorer/mips/gcc-5.4.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-objdump + compiler.mips930.exe=/opt/compiler-explorer/mips/mips-mti-elf/2020.06-01/bin/mips-mti-elf-g++ compiler.mips930.name=mips gcc 9.3.0 (codescape) compiler.mips930.semver=9.3.0 compiler.mips930.objdumper=/opt/compiler-explorer/mips/mips-mti-elf/2020.06-01/bin/mips-mti-elf-objdump + compiler.mips1120.exe=/opt/compiler-explorer/mips/gcc-11.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-g++ compiler.mips1120.semver=11.2.0 compiler.mips1120.objdumper=/opt/compiler-explorer/mips/gcc-11.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-objdump +compiler.mipsg1210.exe=/opt/compiler-explorer/mips/gcc-12.1.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-g++ +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 + ## MIPS 64 group.mips64.groupName=MIPS64 GCC -group.mips64.compilers=mips564:mips112064 +group.mips64.compilers=mips564:mips112064:mips64g1210 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++ compiler.mips564.semver=5.4 compiler.mips564.objdumper=/opt/compiler-explorer/mips64/gcc-5.4.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-objdump + compiler.mips112064.exe=/opt/compiler-explorer/mips64/gcc-11.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-g++ compiler.mips112064.semver=11.2.0 compiler.mips112064.objdumper=/opt/compiler-explorer/mips64/gcc-11.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-objdump +compiler.mips64g1210.exe=/opt/compiler-explorer/mips64/gcc-12.1.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-g++ +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 + ## MIPS EL group.mipsel.groupName=MIPSEL GCC -group.mipsel.compilers=mips5el +group.mipsel.compilers=mips5el:mipselg1210 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++ compiler.mips5el.semver=5.4 compiler.mips5el.objdumper=/opt/compiler-explorer/mipsel/gcc-5.4.0/mipsel-unknown-linux-gnu/mipsel-unknown-linux-gnu/bin/objdump +compiler.mipselg1210.exe=/opt/compiler-explorer/mipsel/gcc-12.1.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-g++ +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 + ## MIPS 64 EL group.mips64el.groupName=MIPS64EL GCC -group.mips64el.compilers=mips564el +group.mips64el.compilers=mips564el:mips64elg1210 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++ compiler.mips564el.semver=5.4 compiler.mips564el.objdumper=/opt/compiler-explorer/mips64el/gcc-5.4.0/mips64el-unknown-linux-gnu/bin/mips64el-unknown-linux-gnu-objdump +compiler.mips64elg1210.exe=/opt/compiler-explorer/mips64el/gcc-12.1.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-g++ +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 + ############################### # GCC for nanoMIPS group.nanomips.compilers=nanomips630 diff --git a/etc/config/c.amazon.properties b/etc/config/c.amazon.properties index d38f67533..10986347d 100644 --- a/etc/config/c.amazon.properties +++ b/etc/config/c.amazon.properties @@ -1,7 +1,7 @@ compilers=&cgcc86:&cclang:&armcclang32:&armcclang64:&rvcclang:&wasmcclang:&ppci:&cicc:&cicx:&ccl:&ccross:&cgcc-classic:&cc65:&sdcc:&ctendra:&tinycc:&zigcc:&cproc86:&chibicc:&z88dk:www.godbolt.ms@443 -defaultCompiler=cg121 -demangler=/opt/compiler-explorer/gcc-12.1.0/bin/c++filt -objdumper=/opt/compiler-explorer/gcc-12.1.0/bin/objdump +defaultCompiler=cg122 +demangler=/opt/compiler-explorer/gcc-12.2.0/bin/c++filt +objdumper=/opt/compiler-explorer/gcc-12.2.0/bin/objdump needsMulti=false buildenvsetup=ceconan @@ -12,7 +12,7 @@ externalparser.exe=/usr/local/bin/asm-parser ############################### # GCC for x86 -group.cgcc86.compilers=cg412:cg447:cg453:cg464:cg471:cg472:cg473:cg474:cg481:cg482:cg483:cg484:cg485:cg490:cg491:cg492:cg493:cg494:cg510:cg520:cg530:cg540:cg6:cg62:cg63:cg71:cg72:cg73:cg74:cg81:cg82:cg83:cg84:cg85:cg91:cg92:cg93:cg94:cg95:cg101:cg102:cg103:cg104:cg111:cg112:cg113:cg121:cgsnapshot:cgstatic-analysis +group.cgcc86.compilers=cg412:cg447:cg453:cg464:cg471:cg472:cg473:cg474:cg481:cg482:cg483:cg484:cg485:cg490:cg491:cg492:cg493:cg494:cg510:cg520:cg530:cg540:cg6:cg62:cg63:cg71:cg72:cg73:cg74:cg81:cg82:cg83:cg84:cg85:cg91:cg92:cg93:cg94:cg95:cg101:cg102:cg103:cg104:cg111:cg112:cg113:cg121:cg122:cgsnapshot:cgstatic-analysis group.cgcc86.groupName=GCC x86-64 group.cgcc86.instructionSet=amd64 group.cgcc86.isSemVer=true @@ -113,6 +113,9 @@ compiler.cg113.exe=/opt/compiler-explorer/gcc-11.3.0/bin/gcc compiler.cg113.semver=11.3 compiler.cg121.exe=/opt/compiler-explorer/gcc-12.1.0/bin/gcc compiler.cg121.semver=12.1 +compiler.cg122.exe=/opt/compiler-explorer/gcc-12.2.0/bin/gcc +compiler.cg122.semver=12.2 + compiler.cgsnapshot.exe=/opt/compiler-explorer/gcc-snapshot/bin/gcc compiler.cgsnapshot.demangler=/opt/compiler-explorer/gcc-snapshot/bin/c++filt compiler.cgsnapshot.objdumper=/opt/compiler-explorer/gcc-snapshot/bin/objdump @@ -609,17 +612,20 @@ group.ccross.groupName=Cross GCC group.cs390x.compilers=&cgccs390x # GCC for s390x +group.cgccs390x.compilers=cgccs390x112:cs390xg1210 group.cgccs390x.supportsBinary=true group.cgccs390x.supportsExecute=false - +group.cgccs390x.baseName=s390x gcc group.cgccs390x.groupName=s390x GCC -group.cgccs390x.compilers=cgccs390x112 group.cgccs390x.isSemVer=true -group.cgccs390x.objdumper=/opt/compiler-explorer/s390x/gcc-11.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-objdump compiler.cgccs390x112.exe=/opt/compiler-explorer/s390x/gcc-11.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-gcc -compiler.cgccs390x112.name=s390x GCC 11.2.0 compiler.cgccs390x112.semver=11.2.0 +compiler.cgccs390x112.objdumper=/opt/compiler-explorer/s390x/gcc-11.2.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-objdump + +compiler.cs390xg1210.exe=/opt/compiler-explorer/s390x/gcc-12.1.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-gcc +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 ############################### # Cross compilers for PPC @@ -628,18 +634,23 @@ group.cppcs.isSemVer=true group.cppcs.supportsBinary=true group.cppcs.supportsExecute=false -group.cppc.compilers=cppcg1120:cppcg48 +group.cppc.compilers=cppcg1210:cppcg1120:cppcg48 group.cppc.groupName=POWER group.cppc.baseName=power gcc compiler.cppcg48.exe=/opt/compiler-explorer/powerpc/gcc-4.8.5/bin/powerpc-unknown-linux-gnu-gcc compiler.cppcg48.objdumper=/opt/compiler-explorer/powerpc/gcc-4.8.5/bin/powerpc-unknown-linux-gnu-objdump compiler.cppcg48.semver=4.8.5 + compiler.cppcg1120.exe=/opt/compiler-explorer/powerpc/gcc-11.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-gcc compiler.cppcg1120.objdumper=/opt/compiler-explorer/powerpc/gcc-11.2.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-objdump compiler.cppcg1120.semver=11.2.0 -group.cppc64.compilers=cppc64g8:cppc64g9:cppc64g1120:cppc64clang +compiler.cppcg1210.exe=/opt/compiler-explorer/powerpc/gcc-12.1.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-gcc +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 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 @@ -653,6 +664,12 @@ compiler.cppc64g1120.exe=/opt/compiler-explorer/powerpc64/gcc-11.2.0/powerpc64-u compiler.cppc64g1120.objdumper=/opt/compiler-explorer/powerpc64/gcc-11.2.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-objdump compiler.cppc64g1120.semver=power64 gcc 11.2.0 compiler.cppc64g1120.name=power64 gcc 11.2.0 + +compiler.cppc64g1210.exe=/opt/compiler-explorer/powerpc64/gcc-12.1.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-gcc +compiler.cppc64g1210.objdumper=/opt/compiler-explorer/powerpc64/gcc-12.1.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-objdump +compiler.cppc64g1210.semver=power64 gcc 12.1.0 +compiler.cppc64g1210.name=power64 gcc 12.1.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 @@ -661,24 +678,34 @@ compiler.cppc64clang.options=-target powerpc64 compiler.cppc64clang.supportsBinary=false compiler.cppc64clang.semver=(snapshot) -group.cppc64le.compilers=cppc64leg630:cppc64leg8:cppc64leg9:cppc64leg1120:cppc64leclang +group.cppc64le.compilers=cppc64leg630:cppc64leg8:cppc64leg9:cppc64leg1120:cppc64leg1210:cppc64leclang 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 compiler.cppc64leg630.objdumper=/opt/compiler-explorer/powerpc64le/gcc-6.3.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump compiler.cppc64leg630.name=power64le gcc 6.3.0 compiler.cppc64leg630.semver=6.3.0 + compiler.cppc64leg8.exe=/opt/compiler-explorer/powerpc64le/gcc-at12/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gcc compiler.cppc64leg8.name=power64le AT12.0 (gcc8) compiler.cppc64leg8.objdumper=/opt/compiler-explorer/powerpc64le/gcc-at12/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump compiler.cppc64leg8.semver=(snapshot) + compiler.cppc64leg9.exe=/opt/compiler-explorer/powerpc64le/gcc-at13/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gcc compiler.cppc64leg9.objdumper=/opt/compiler-explorer/powerpc64le/gcc-at13/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump compiler.cppc64leg9.name=power64le AT13.0 (gcc9) compiler.cppc64leg9.semver=(snapshot) + compiler.cppc64leg1120.exe=/opt/compiler-explorer/powerpc64le/gcc-11.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gcc compiler.cppc64leg1120.objdumper=/opt/compiler-explorer/powerpc64le/gcc-11.2.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump compiler.cppc64leg1120.name=power64le gcc 11.2.0 compiler.cppc64leg1120.semver=11.2.0 + +compiler.cppc64leg1210.exe=/opt/compiler-explorer/powerpc64le/gcc-12.1.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gcc +compiler.cppc64leg1210.objdumper=/opt/compiler-explorer/powerpc64le/gcc-12.1.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-objdump +compiler.cppc64leg1210.name=power64le gcc 12.1.0 +compiler.cppc64leg1210.semver=12.1.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 @@ -785,6 +812,7 @@ compiler.carm1130.exe=/opt/compiler-explorer/arm/gcc-11.3.0/arm-unknown-linux-gn compiler.carm1130.name=ARM gcc 11.3 (linux) compiler.carm1130.semver=11.3.0 compiler.carm1210.exe=/opt/compiler-explorer/arm/gcc-12.1.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-gcc +compiler.carm1210.objdumper=/opt/compiler-explorer/arm/gcc-12.1.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-objdump compiler.carm1210.name=ARM gcc 12.1 (linux) compiler.carm1210.semver=12.1.0 compiler.carmgtrunk.exe=/opt/compiler-explorer/arm/gcc-trunk/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-gcc @@ -838,6 +866,7 @@ compiler.carm64g1130.exe=/opt/compiler-explorer/arm64/gcc-11.3.0/aarch64-unknown compiler.carm64g1130.name=ARM64 gcc 11.3 compiler.carm64g1130.semver=11.3.0 compiler.carm64g1210.exe=/opt/compiler-explorer/arm64/gcc-12.1.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gcc +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.carm64gtrunk.exe=/opt/compiler-explorer/arm64/gcc-trunk/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gcc @@ -929,44 +958,59 @@ compiler.carduinomega189.objdumper=/opt/compiler-explorer/avr/arduino-1.8.9/hard ################################ # GCC for MSP -group.cmsp.compilers=cmsp430g453:cmsp430g530:cmsp430g621 +group.cmsp.compilers=cmsp430g453:cmsp430g530:cmsp430g621:cmsp430g1210 group.cmsp.groupName=MSP GCC group.cmsp.baseName=MSP430 gcc group.cmsp.isSemVer=true + compiler.cmsp430g453.exe=/opt/compiler-explorer/msp430/gcc-4.5.3/bin/msp430-gcc compiler.cmsp430g453.semver=4.5.3 + compiler.cmsp430g530.exe=/opt/compiler-explorer/msp430-gcc-5.3.0.219_linux32/bin/msp430-elf-gcc compiler.cmsp430g530.semver=5.3.0 + compiler.cmsp430g621.exe=/opt/compiler-explorer/msp430-gcc-6.2.1.16_linux64/bin/msp430-elf-gcc 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 + ################################ # GCC for AVR -group.cavr.compilers=cavrg454:cavrg464:cavrg540:cavrg920:cavrg930:cavrg1030:cavrg1100 +group.cavr.compilers=cavrg454:cavrg464:cavrg540:cavrg920:cavrg930:cavrg1030:cavrg1100:cavrg1210 group.cavr.groupName=AVR GCC group.cavr.baseName=AVR gcc group.cavr.isSemVer=true + compiler.cavrg454.exe=/opt/compiler-explorer/avr/gcc-4.5.4/bin/avr-gcc compiler.cavrg454.semver=4.5.4 compiler.cavrg464.exe=/opt/compiler-explorer/avr/gcc-4.6.4/bin/avr-gcc compiler.cavrg464.semver=4.6.4 + compiler.cavrg540.exe=/opt/compiler-explorer/avr/arduino-1.8.9/hardware/tools/avr/bin/avr-gcc compiler.cavrg540.semver=5.4.0 -compiler.cavrg540.supportsBinary=false compiler.cavrg540.objdumper=/opt/compiler-explorer/avr/arduino-1.8.9/hardware/tools/avr/bin/avr-objdump + compiler.cavrg920.exe=/opt/compiler-explorer/avr/gcc-9.2.0/bin/avr-gcc compiler.cavrg920.semver=9.2.0 compiler.cavrg920.objdumper=/opt/compiler-explorer/avr/gcc-9.2.0/bin/avr-objdump + compiler.cavrg930.exe=/opt/compiler-explorer/avr/gcc-9.3.0/bin/avr-gcc compiler.cavrg930.semver=9.3.0 compiler.cavrg930.objdumper=/opt/compiler-explorer/avr/gcc-9.3.0/bin/avr-objdump + compiler.cavrg1030.exe=/opt/compiler-explorer/avr/gcc-10.3.0/bin/avr-gcc compiler.cavrg1030.semver=10.3.0 compiler.cavrg1030.objdumper=/opt/compiler-explorer/avr/gcc-10.3.0/bin/avr-objdump + compiler.cavrg1100.exe=/opt/compiler-explorer/avr/gcc-11.1.0/bin/avr-gcc compiler.cavrg1100.semver=11.1.0 compiler.cavrg1100.objdumper=/opt/compiler-explorer/avr/gcc-11.1.0/bin/avr-objdump +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 + ############################### # GCC for MIPS group.cmipss.compilers=&cmips:&cmipsel:&cmips64:&cmips64el @@ -976,48 +1020,71 @@ group.cmipss.supportsBinary=true group.cmipss.supportsExecute=false ## MIPS -group.cmips.compilers=cmips5:cmips930:cmips1120 +group.cmips.compilers=cmips5:cmips930:cmips1120:cmipsg1210 group.cmips.groupName=MIPS GCC group.cmips.baseName=mips gcc + compiler.cmips5.exe=/opt/compiler-explorer/mips/gcc-5.4.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-gcc compiler.cmips5.semver=5.4 compiler.cmips5.objdumper=/opt/compiler-explorer/mips/gcc-5.4.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-objdump + compiler.cmips930.exe=/opt/compiler-explorer/mips/mips-mti-elf/2020.06-01/bin/mips-mti-elf-gcc compiler.cmips930.name=mips gcc 9.3.0 (codescape) compiler.cmips930.semver=9.3.0 compiler.cmips930.objdumper=/opt/compiler-explorer/mips/mips-mti-elf/2020.06-01/bin/mips-mti-elf-objdump + compiler.cmips1120.exe=/opt/compiler-explorer/mips/gcc-11.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-gcc compiler.cmips1120.semver=11.2.0 compiler.cmips1120.objdumper=/opt/compiler-explorer/mips/gcc-11.2.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-objdump +compiler.cmipsg1210.exe=/opt/compiler-explorer/mips/gcc-12.1.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-gcc +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 + ## MIPS64 group.cmips64.groupName=MIPS64 GCC -group.cmips64.compilers=cmips564:cmips112064 +group.cmips64.compilers=cmips564:cmips112064:cmips64g1210 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 compiler.cmips564.semver=5.4 compiler.cmips564.objdumper=/opt/compiler-explorer/mips64/gcc-5.4.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-objdump + compiler.cmips112064.exe=/opt/compiler-explorer/mips64/gcc-11.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-gcc compiler.cmips112064.semver=11.2.0 compiler.cmips112064.objdumper=/opt/compiler-explorer/mips64/gcc-11.2.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-objdump +compiler.cmips64g1210.exe=/opt/compiler-explorer/mips64/gcc-12.1.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-gcc +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 + ## MIPS EL group.cmipsel.groupName=MIPSEL GCC -group.cmipsel.compilers=cmips5el +group.cmipsel.compilers=cmips5el:cmipselg1210 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 compiler.cmips5el.semver=5.4 compiler.cmips5el.objdumper=/opt/compiler-explorer/mipsel/gcc-5.4.0/mipsel-unknown-linux-gnu/mipsel-unknown-linux-gnu/bin/objdump +compiler.cmipselg1210.exe=/opt/compiler-explorer/mipsel/gcc-12.1.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-gcc +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 + ## MIPS64 EL group.cmips64el.groupName=MIPS64EL GCC -group.cmips64el.compilers=cmips564el +group.cmips64el.compilers=cmips564el:cmips64elg1210 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 compiler.cmips564el.name=MIPS64 gcc 5.4 (el) compiler.cmips564el.semver=5.4 compiler.cmips564el.objdumper=/opt/compiler-explorer/mips64el/gcc-5.4.0/mips64el-unknown-linux-gnu/bin/mips64el-unknown-linux-gnu-objdump +compiler.cmips64elg1210.exe=/opt/compiler-explorer/mips64el/gcc-12.1.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-gcc +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 + ############################### # GCC for nanoMIPS group.cnanomips.compilers=cnanomips630 diff --git a/etc/config/cppx_blue.default.properties b/etc/config/cppx_blue.defaults.properties index d3e9c1253..d3e9c1253 100644 --- a/etc/config/cppx_blue.default.properties +++ b/etc/config/cppx_blue.defaults.properties diff --git a/etc/config/d.amazon.properties b/etc/config/d.amazon.properties index 55a343352..b9dc69004 100644 --- a/etc/config/d.amazon.properties +++ b/etc/config/d.amazon.properties @@ -1,13 +1,15 @@ -compilers=&gdc:&ldc:&dmd +compilers=&gdc:&ldc:&dmd:&gdccross defaultCompiler=ldc1_30 -objdumper=/opt/compiler-explorer/gcc-12.1.0/bin/objdump -demangler=/opt/compiler-explorer/ldc1.30.0/ldc2-1.30.0-linux-x86_64/bin/ddemangle -llvmSymbolizer=/opt/compiler-explorer/clang-14.0.0/bin/llvm-symbolizer -group.gdc.compilers=gdc48:gdc49:gdc52:gdc92:gdc93:gdc95:gdc101:gdc102:gdc111:gdc113:gdc121:gdctrunk +group.gdc.compilers=gdc48:gdc49:gdc52:gdc92:gdc93:gdc95:gdc101:gdc102:gdc111:gdc113:gdc121:gdc122:gdctrunk +group.gdc.groupName=GDC x86-64 group.gdc.includeFlag=-isystem group.gdc.isSemVer=true group.gdc.baseName=gdc +group.gdc.demangler=/opt/compiler-explorer/ldc1.30.0/ldc2-1.30.0-linux-x86_64/bin/ddemangle +group.gdc.objdumper=/opt/compiler-explorer/gcc-12.2.0/bin/objdump +group.gdc.llvmSymbolizer=/opt/compiler-explorer/clang-14.0.0/bin/llvm-symbolizer + compiler.gdc49.exe=/opt/compiler-explorer/gdc4.9.3/x86_64-pc-linux-gnu/bin/gdc compiler.gdc49.alias=/opt/x86_64-gdcproject-linux-gnu/bin/gdc compiler.gdc49.semver=4.9.3 @@ -34,14 +36,102 @@ compiler.gdc113.exe=/opt/compiler-explorer/gcc-11.3.0/bin/gdc compiler.gdc113.semver=11.3 compiler.gdc121.exe=/opt/compiler-explorer/gcc-12.1.0/bin/gdc compiler.gdc121.semver=12.1 +compiler.gdc122.exe=/opt/compiler-explorer/gcc-12.2.0/bin/gdc +compiler.gdc122.semver=12.2 compiler.gdctrunk.exe=/opt/compiler-explorer/gcc-snapshot/bin/gdc 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.supportsExecute=false +group.gdccross.supportsBinary=true + +### GDC for s390x +group.gdcs390x.compilers=gdcs390x1210 +group.gdcs390x.groupName=GDC s390x +group.gdcs390x.includeFlag=-isystem +group.gdcs390x.isSemVer=true +group.gdcs390x.baseName=gdc s390x + +compiler.gdcs390x1210.exe=/opt/compiler-explorer/s390x/gcc-12.1.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-gdc +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 + +### GDC for powerpc +group.gdcppc.compilers=gdcppc1210 +group.gdcppc.groupName=GDC powerpc +group.gdcppc.includeFlag=-isystem +group.gdcppc.isSemVer=true +group.gdcppc.baseName=gdc powerpc + +compiler.gdcppc1210.exe=/opt/compiler-explorer/powerpc/gcc-12.1.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-gdc +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 + +### GDC for powerpc64 +group.gdcppc64.compilers=gdcppc641210 +group.gdcppc64.groupName=GDC powerpc64 +group.gdcppc64.includeFlag=-isystem +group.gdcppc64.isSemVer=true +group.gdcppc64.baseName=gdc powerpc64 + +compiler.gdcppc641210.exe=/opt/compiler-explorer/powerpc64/gcc-12.1.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-gdc +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 + +### GDC for powerpc64le +group.gdcppc64le.compilers=gdcppc64le1210 +group.gdcppc64le.groupName=GDC powerpc64le +group.gdcppc64le.includeFlag=-isystem +group.gdcppc64le.isSemVer=true +group.gdcppc64le.baseName=gdc powerpc64le + +compiler.gdcppc64le1210.exe=/opt/compiler-explorer/powerpc64le/gcc-12.1.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gdc +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 + +### GDC for mips64 +group.gdcmips64.compilers=gdcmips641210 +group.gdcmips64.groupName=GDC mips64 +group.gdcmips64.includeFlag=-isystem +group.gdcmips64.isSemVer=true +group.gdcmips64.baseName=gdc mips64 + +compiler.gdcmips641210.exe=/opt/compiler-explorer/mips64/gcc-12.1.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-gdc +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 + +### GDC for mips +group.gdcmips.compilers=gdcmips1210 +group.gdcmips.groupName=GDC mips +group.gdcmips.includeFlag=-isystem +group.gdcmips.isSemVer=true +group.gdcmips.baseName=gdc mips + +compiler.gdcmips1210.exe=/opt/compiler-explorer/mips/gcc-12.1.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-gdc +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 + +### GDC for mipsel +group.gdcmipsel.compilers=gdcmipsel1210 +group.gdcmipsel.groupName=GDC mipsel +group.gdcmipsel.includeFlag=-isystem +group.gdcmipsel.isSemVer=true +group.gdcmipsel.baseName=gdc mipsel + +compiler.gdcmipsel1210.exe=/opt/compiler-explorer/mipsel/gcc-12.1.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-gdc +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 + 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 group.ldc.baseName=ldc +group.ldc.demangler=/opt/compiler-explorer/ldc1.30.0/ldc2-1.30.0-linux-x86_64/bin/ddemangle +group.ldc.objdumper=/opt/compiler-explorer/gcc-12.1.0/bin/objdump +group.ldc.llvmSymbolizer=/opt/compiler-explorer/clang-14.0.0/bin/llvm-symbolizer + compiler.ldc017.exe=/opt/compiler-explorer/ldc0.17.2/ldc2-0.17.2-linux-x86_64/bin/ldc2 compiler.ldc017.semver=0.17.2 compiler.ldc100.exe=/opt/compiler-explorer/ldc1.0.0/ldc2-1.0.0-linux-x86_64/bin/ldc2 diff --git a/etc/config/fortran.amazon.properties b/etc/config/fortran.amazon.properties index e088087d7..3369f9c7f 100644 --- a/etc/config/fortran.amazon.properties +++ b/etc/config/fortran.amazon.properties @@ -1,12 +1,12 @@ compilers=&gfortran_86:&ifort:&ifx:&cross:&clang_llvmflang -defaultCompiler=gfortran121 -demangler=/opt/compiler-explorer/gcc-12.1.0/bin/c++filt -objdumper=/opt/compiler-explorer/gcc-12.1.0/bin/objdump +defaultCompiler=gfortran122 +demangler=/opt/compiler-explorer/gcc-12.2.0/bin/c++filt +objdumper=/opt/compiler-explorer/gcc-12.2.0/bin/objdump compilerType=fortran ############################### # GCC (as in GNU Compiler Collection) for x86 -group.gfortran_86.compilers=gfortran494:gfortran550:gfortran63:gfortran71:gfortran72:gfortran73:gfortran81:gfortran82:gfortran83:gfortran84:gfortran85:gfortran91:gfortran92:gfortran93:gfortran94:gfortran101:gfortran102:gfortran103:gfortran104:gfortran111:gfortran112:gfortran113:gfortran121:gfortransnapshot +group.gfortran_86.compilers=gfortran494:gfortran550:gfortran63:gfortran71:gfortran72:gfortran73:gfortran81:gfortran82:gfortran83:gfortran84:gfortran85:gfortran91:gfortran92:gfortran93:gfortran94:gfortran101:gfortran102:gfortran103:gfortran104:gfortran111:gfortran112:gfortran113:gfortran121:gfortran122:gfortransnapshot group.gfortran_86.groupName=GFORTRAN x86-64 group.gfortran_86.isSemVer=true group.gfortran_86.baseName=x86-64 gfortran @@ -56,6 +56,8 @@ compiler.gfortran113.exe=/opt/compiler-explorer/gcc-11.3.0/bin/gfortran compiler.gfortran113.semver=11.3 compiler.gfortran121.exe=/opt/compiler-explorer/gcc-12.1.0/bin/gfortran compiler.gfortran121.semver=12.1 +compiler.gfortran122.exe=/opt/compiler-explorer/gcc-12.2.0/bin/gfortran +compiler.gfortran122.semver=12.2 compiler.gfortransnapshot.exe=/opt/compiler-explorer/gcc-snapshot/bin/gfortran compiler.gfortransnapshot.demangler=/opt/compiler-explorer/gcc-snapshot/bin/c++filt compiler.gfortransnapshot.objdumper=/opt/compiler-explorer/gcc-snapshot/bin/objdump @@ -144,20 +146,38 @@ compiler.ifx202200.semver=2022.0.0 ############################### # GCC Cross-Compilers -group.cross.compilers=&gccarm:&gccaarch64:&ppc +group.cross.compilers=&gccarm:&gccaarch64:&ppcs:&gccrv32:&gccrv64:&gccmips:&gccmips64:&gccmipsel:&gccmips64el:&gccs390x +group.cross.isSemVer=true group.cross.supportsBinary=false group.cross.groupName=Cross GCC ############################### # GCC for ARM -group.gccarm.compilers=farmg640:farmg730:farmg820 -group.gccarm.groupName=ARM (32bit) GCC +group.gccarm.compilers=farmg640:farmg730:farmg820:farmg1210 +group.gccarm.groupName=ARM (32bit) gfortran +group.gccarm.baseName=ARM (32bit) gfortran + compiler.farmg640.exe=/opt/compiler-explorer/arm/gcc-6.4.0/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gfortran -compiler.farmg640.name=ARM gfortran 6.4 +compiler.farmg640.semver=6.4 + compiler.farmg730.exe=/opt/compiler-explorer/arm/gcc-7.3.0/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gfortran -compiler.farmg730.name=ARM gfortran 7.3 +compiler.farmg730.semver=7.3 + compiler.farmg820.exe=/opt/compiler-explorer/arm/gcc-8.2.0/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gfortran -compiler.farmg820.name=ARM gfortran 8.2 +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 + +############################### +## GCC for s390x +group.gccs390x.compilers=fs390xg1210 +group.gccs390x.groupName=s390x gfortran +group.gccs390x.baseName=s390x gfortran + +compiler.fs390xg1210.exe=/opt/compiler-explorer/s390x/gcc-12.1.0/s390x-ibm-linux-gnu/bin/s390x-ibm-linux-gnu-gfortran +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 ############################### # LLVM Flang for X86 @@ -178,7 +198,7 @@ compiler.flangtrunknew.supportsBinary=false ############################### # GCC for ARM 64bit -group.gccaarch64.compilers=farm64g640:farm64g730:farm64g820 +group.gccaarch64.compilers=farm64g640:farm64g730:farm64g820:farm64g1210 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 @@ -187,24 +207,121 @@ compiler.farm64g730.name=AARCH64 gfortran 7.3 compiler.farm64g820.exe=/opt/compiler-explorer/arm64/gcc-8.2.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gfortran compiler.farm64g820.name=AARCH64 gfortran 8.2 +compiler.farm64g1210.exe=/opt/compiler-explorer/arm64/gcc-12.1.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gfortran +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 + +############################### +# GCC for PPCs +group.ppcs.compilers=&ppc64:&ppc64le:&ppc +group.ppcs.groupName=POWER Compilers + ############################### # GCC for PPC -group.ppc.compilers=fppc64leg8:fppc64g8:fppc64leg9:fppc64g9 -group.ppc.groupName=POWER Compilers -group.ppc.isSemVer=true -compiler.fppc64leg8.exe=/opt/compiler-explorer/powerpc64le/gcc-at12/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gfortran -compiler.fppc64leg8.name=power64le AT12.0 -compiler.fppc64leg8.semver=(snapshot) +group.ppc.compilers=fppcg1210 +group.ppc.groupName=POWER gfortran +group.ppc.baseName=POWER gfortran + +compiler.fppcg1210.exe=/opt/compiler-explorer/powerpc/gcc-12.1.0/powerpc-unknown-linux-gnu/bin/powerpc-unknown-linux-gnu-gfortran +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 + +############################### +# GCC for PPC64 +group.ppc64.compilers=fppc64g8:fppc64g9:fppc64g1210 +group.ppc64.groupName=POWER64 gfortran +group.ppc64.baseName=POWER64 gfortran + compiler.fppc64g8.exe=/opt/compiler-explorer/powerpc64/gcc-at12/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-gfortran compiler.fppc64g8.name=power64 AT12.0 compiler.fppc64g8.semver=(snapshot) -compiler.fppc64leg9.exe=/opt/compiler-explorer/powerpc64le/gcc-at13/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gfortran -compiler.fppc64leg9.name=power64le AT13.0 -compiler.fppc64leg9.semver=(snapshot) + compiler.fppc64g9.exe=/opt/compiler-explorer/powerpc64/gcc-at13/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-gfortran compiler.fppc64g9.name=power64 AT13.0 compiler.fppc64g9.semver=(snapshot) +compiler.fppc64g1210.exe=/opt/compiler-explorer/powerpc64/gcc-12.1.0/powerpc64-unknown-linux-gnu/bin/powerpc64-unknown-linux-gnu-gfortran +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 + +############################### +# GCC for PPC64LE +group.ppc64le.compilers=fppc64leg8:fppc64leg9:fppc64leg1210 +group.ppc64le.groupName=POWER64le gfortran +group.ppc64le.baseName=POWER64le gfortran + +compiler.fppc64leg8.exe=/opt/compiler-explorer/powerpc64le/gcc-at12/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gfortran +compiler.fppc64leg8.name=power64le AT12.0 +compiler.fppc64leg8.semver=(snapshot) + +compiler.fppc64leg9.exe=/opt/compiler-explorer/powerpc64le/gcc-at13/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gfortran +compiler.fppc64leg9.name=power64le AT13.0 +compiler.fppc64leg9.semver=(snapshot) + +compiler.fppc64leg1210.exe=/opt/compiler-explorer/powerpc64le/gcc-12.1.0/powerpc64le-unknown-linux-gnu/bin/powerpc64le-unknown-linux-gnu-gfortran +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 + +################################ +# GCC for RISC-V 32-bits +group.gccrv32.compilers=frv32g1210 +group.gccrv32.groupName=RISC-V 32-bits gfortran +group.gccrv32.baseName=RISC-V 32-bits gfortran + +compiler.frv32g1210.exe=/opt/compiler-explorer/gcc-12.1.0/riscv32-unknown-elf/bin/riscv32-unknown-elf-gfortran +compiler.frv32g1210.semver=12.1.0 +compiler.frv32g1210.objdumper=/opt/compiler-explorer/riscv32/gcc-12.1.0/riscv32-unknown-elf/bin/riscv32-unknown-elf-objdump + +################################ +# GCC for RISC-V 64-bits +group.gccrv64.compilers=frv64g1210 +group.gccrv64.groupName=RISC-V 64-bits gfortran +group.gccrv64.baseName=RISC-V 64-bits gfortran + +compiler.frv64g1210.exe=/opt/compiler-explorer/gcc-12.1.0/riscv64-unknown-elf/bin/riscv64-unknown-elf-gfortran +compiler.frv64g1210.semver=12.1.0 +compiler.frv64g1210.exe=/opt/compiler-explorer/gcc-12.1.0/riscv64-unknown-elf/bin/riscv64-unknown-elf-objdump + +################################ +# GCC for MIPS +group.gccmips.compilers=fmipsg1210 +group.gccmips.groupName=MIPS gfortran +group.gccmips.baseName=MIPS gfortran + +compiler.fmipsg1210.exe=/opt/compiler-explorer/mips/gcc-12.1.0/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-gfortran +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 + +################################ +# GCC for MIPS64 +group.gccmips64.compilers=fmips64g1210 +group.gccmips64.groupName=MIPS64 gfortran +group.gccmips64.baseName=MIPS64 gfortran + +compiler.fmips64g1210.exe=/opt/compiler-explorer/mips64/gcc-12.1.0/mips64-unknown-linux-gnu/bin/mips64-unknown-linux-gnu-gfortran +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 + +################################ +# GCC for MIPSEL +group.gccmipsel.compilers=fmipselg1210 +group.gccmipsel.groupName=MIPSel gfortran +group.gccmipsel.baseName=MIPSel gfortran + +compiler.fmipselg1210.exe=/opt/compiler-explorer/mipsel/gcc-12.1.0/mipsel-multilib-linux-gnu/bin/mipsel-multilib-linux-gnu-gfortran +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 + +################################ +# GCC for MIPS64el +group.gccmips64el.compilers=fmips64elg1210 +group.gccmips64el.groupName=MIPS64el gfortran +group.gccmips64el.baseName=MIPS64el gfortran + +compiler.fmips64elg1210.exe=/opt/compiler-explorer/mips64el/gcc-12.1.0/mips64el-multilib-linux-uclibc/bin/mips64el-multilib-linux-uclibc-gfortran +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 + ################################# ################################# # Installed tools diff --git a/etc/config/go.amazon.properties b/etc/config/go.amazon.properties index 9c12eca03..27de65c9b 100644 --- a/etc/config/go.amazon.properties +++ b/etc/config/go.amazon.properties @@ -2,7 +2,7 @@ compilers=&gccgo:&gl:&cross defaultCompiler=gl1190 objdumper=/opt/compiler-explorer/gcc-12.1.0/bin/objdump -group.gccgo.compilers=gccgo494:gccgo630:gccgo720:gccgo830:gccgo930:gccgo950:gccgo102:gccgo111:gccgo112:gccgo113:gccgo121 +group.gccgo.compilers=gccgo494:gccgo630:gccgo720:gccgo830:gccgo930:gccgo950:gccgo102:gccgo111:gccgo112:gccgo113:gccgo121:gccgo122 group.gccgo.isSemVer=true group.gccgo.baseName=x86 gccgo compiler.gccgo494.exe=/opt/compiler-explorer/gcc-4.9.4/bin/gccgo @@ -29,6 +29,8 @@ compiler.gccgo113.exe=/opt/compiler-explorer/gcc-11.3.0/bin/gccgo compiler.gccgo113.semver=11.3.0 compiler.gccgo121.exe=/opt/compiler-explorer/gcc-12.1.0/bin/gccgo compiler.gccgo121.semver=12.1.0 +compiler.gccgo122.exe=/opt/compiler-explorer/gcc-12.2.0/bin/gccgo +compiler.gccgo122.semver=12.2.0 group.gl.compilers=&x86gl:&armgl:&mipsgl:&ppcgl:&riscvgl:&s390xgl:&wasmgl diff --git a/etc/config/hlsl.amazon.properties b/etc/config/hlsl.amazon.properties index 04b3cd56a..a66f7baaa 100644 --- a/etc/config/hlsl.amazon.properties +++ b/etc/config/hlsl.amazon.properties @@ -1,8 +1,4 @@ -compilers=&dxc -supportsBinary=false -defaultCompiler=dxc_1_7_2207 -compilerType=hlsl - +compilers=&dxc:&rga group.dxc.compilers=dxc_trunk:dxc_1_6_2112:dxc_1_7_2207 group.dxc.groupName=DXC @@ -15,3 +11,37 @@ compiler.dxc_1_6_2112.exe=/opt/compiler-explorer/dxc-1.6.2112/bin/dxc compiler.dxc_1_6_2112.semver=1.6.2112 compiler.dxc_1_7_2207.exe=/opt/compiler-explorer/dxc-1.7.2207/bin/dxc compiler.dxc_1_7_2207.semver=1.7.2207 + +group.rga.compilers=rga262_dxctrunk:rga262_dxc172207:rga262_dxc162112:rga261_dxc172207:rga261_dxc162112 +group.rga.groupName=RGA +group.rga.isSemVer=true +group.rga.compilerType=rga + +compiler.rga262_dxctrunk.exe=/opt/compiler-explorer/rga-2.6.2.38/rga +compiler.rga262_dxctrunk.semver=2.6.2 +compiler.rga262_dxctrunk.dxcPath=/opt/compiler-explorer/dxc-trunk/bin/dxc +compiler.rga262_dxctrunk.name=RGA 2.6.2 (DXC trunk) + +compiler.rga262_dxc172207.exe=/opt/compiler-explorer/rga-2.6.2.38/rga +compiler.rga262_dxc172207.semver=2.6.2 +compiler.rga262_dxc172207.dxcPath=/opt/compiler-explorer/dxc-1.7.2207/bin/dxc +compiler.rga262_dxc172207.name=RGA 2.6.2 (DXC 1.7.2207) + +compiler.rga262_dxc162112.exe=/opt/compiler-explorer/rga-2.6.2.38/rga +compiler.rga262_dxc162112.semver=2.6.2 +compiler.rga262_dxc162112.dxcPath=/opt/compiler-explorer/dxc-1.6.2112/bin/dxc +compiler.rga262_dxc162112.name=RGA 2.6.2 (DXC 1.6.2112) + +compiler.rga261_dxc172207.exe=/opt/compiler-explorer/rga-2.6.1.23/rga +compiler.rga261_dxc172207.semver=2.6.1 +compiler.rga261_dxc172207.dxcPath=/opt/compiler-explorer/dxc-1.7.2207/bin/dxc +compiler.rga261_dxc172207.name=RGA 2.6.1 (DXC 1.7.2207) + +compiler.rga261_dxc162112.exe=/opt/compiler-explorer/rga-2.6.1.23/rga +compiler.rga261_dxc162112.semver=2.6.1 +compiler.rga261_dxc162112.dxcPath=/opt/compiler-explorer/dxc-1.6.2112/bin/dxc +compiler.rga261_dxc162112.name=RGA 2.6.1 (DXC 1.6.2112) + +supportsBinary=false +defaultCompiler=dxc_1_7_2207 +compilerType=hlsl diff --git a/etc/config/hlsl.defaults.properties b/etc/config/hlsl.defaults.properties index ed717c820..8cfcb4a4d 100644 --- a/etc/config/hlsl.defaults.properties +++ b/etc/config/hlsl.defaults.properties @@ -1,7 +1,15 @@ -compilers=dxc_default -defaultCompiler=dxc_default -supportsBinary=false -compilerType=hlsl +compilers=&dxc:&rga +group.dxc.compilers=dxc_default compiler.dxc_default.exe=/usr/dxc-artifacts/bin/dxc compiler.dxc_default.name=DXC + +group.rga.compilers=rga_default +group.rga.compilerType=rga + +compiler.rga_default.exe=/usr/rga/rga +compiler.rga_default.dxcPath=/usr/dxc-artifacts/bin/dxc + +defaultCompiler=dxc +supportsBinary=false +compilerType=hlsl diff --git a/etc/config/sponsors.yaml b/etc/config/sponsors.yaml index 92f3864eb..9d1257589 100644 --- a/etc/config/sponsors.yaml +++ b/etc/config/sponsors.yaml @@ -379,3 +379,6 @@ levels: - Unstillable - cedric chanoine - Cristian Kocza + - Benji Smith + - John Mertus + - Nick Darnell diff --git a/etc/scripts/util/propscheck.py b/etc/scripts/util/propscheck.py index bc6b633dd..7d7a623e9 100644 --- a/etc/scripts/util/propscheck.py +++ b/etc/scripts/util/propscheck.py @@ -32,15 +32,15 @@ PROP_RE = re.compile(r'[^#]*=.*') COMPILERS_LIST_RE = re.compile(r'compilers=(.*)') ALIAS_LIST_RE = re.compile(r'alias=(.*)') GROUP_NAME_RE = re.compile(r'group\.(.*?)\.') -COMPILER_EXE_RE = re.compile(r'compiler\.(.*?)\.exe') +COMPILER_EXE_RE = re.compile(r'compiler\.(.*?)\.exe=(.*)') DEFAULT_COMPILER_RE = re.compile(r'defaultCompiler=(.*)') FORMATTERS_LIST_RE = re.compile(r'formatters=(.*)') -FORMATTER_EXE_RE = re.compile(r'formatter\.(.*?)\.exe') +FORMATTER_EXE_RE = re.compile(r'formatter\.(.*?)\.exe=(.*)') LIBS_LIST_RE = re.compile(r'libs=(.+)') LIB_VERSIONS_LIST_RE = re.compile(r'libs\.(.*?)\.versions=(.*)') LIB_VERSION_RE = re.compile(r'libs\.(.*?)\.versions\.(.*?)\.version') TOOLS_LIST_RE = re.compile(r'tools=(.+)') -TOOL_EXE_RE = re.compile(r'tools\.(.*?)\.exe') +TOOL_EXE_RE = re.compile(r'tools\.(.*?)\.exe=(.*)') EMPTY_LIST_RE = re.compile(r'.*(compilers|formatters|versions|tools|alias|exclude|libPath)=((.*::.*)|(:.*)|(.*:))$') DISABLED_RE = re.compile(r'^# Disabled?:?\s*(.*)') @@ -94,7 +94,13 @@ def process_file(file: str): seen_lines = set() duplicate_lines = set() - disabled = set() + duplicated_compiler_references = set() + duplicated_group_references = set() + + suspicious_path = set() + + # By default, consider this one valid as it's in several configs. + disabled = set({'/usr/bin/ldd'}) with open(file) as f: for line_number, text in enumerate(f, start=1): @@ -122,8 +128,12 @@ def process_file(file: str): ids = match_compilers.group(1).split(':') for elem_id in ids: if elem_id.startswith('&'): + if elem_id[1:] in listed_groups: + duplicated_group_references.add (elem_id[1:]) listed_groups.add(elem_id[1:]) elif '@' not in elem_id: + if elem_id in listed_compilers: + duplicated_compiler_references.add (elem_id) listed_compilers.add(elem_id) match_libs_versions = LIB_VERSIONS_LIST_RE.match(line.text) @@ -141,9 +151,18 @@ def process_file(file: str): match_and_add(line, DEFAULT_COMPILER_RE, default_compiler) match_and_add(line, GROUP_NAME_RE, seen_groups) - match_and_add(line, COMPILER_EXE_RE, seen_compilers) - match_and_add(line, FORMATTER_EXE_RE, seen_formatters) - match_and_add(line, TOOL_EXE_RE, seen_tools) + m = match_and_add(line, COMPILER_EXE_RE, seen_compilers) + if m and not m.group(2).startswith('/opt/compiler-explorer'): + suspicious_path.add(m.group(2)) + + m = match_and_add(line, FORMATTER_EXE_RE, seen_formatters) + if m and not m.group(2).startswith('/opt/compiler-explorer'): + suspicious_path.add(m.group(2)) + + m = match_and_add(line, TOOL_EXE_RE, seen_tools) + if m and not m.group(2).startswith('/opt/compiler-explorer'): + suspicious_path.add(m.group(2)) + match_and_update(line, ALIAS_LIST_RE, seen_compilers) match_and_update(line, FORMATTERS_LIST_RE, listed_formatters) match_and_update(line, TOOLS_LIST_RE, listed_tools) @@ -166,7 +185,10 @@ def process_file(file: str): "bad_tools": bad_tools - disabled, "bad_default": bad_default, "empty_separators": empty_separators, - "duplicate_lines": duplicate_lines + "duplicate_lines": duplicate_lines, + "duplicated_compiler_references": duplicated_compiler_references, + "duplicated_group_references": duplicated_group_references, + "suspicious_path": suspicious_path - disabled } diff --git a/etc/scripts/util/propschecktest.py b/etc/scripts/util/propschecktest.py index 4eed2fbbd..c709c58cc 100644 --- a/etc/scripts/util/propschecktest.py +++ b/etc/scripts/util/propschecktest.py @@ -53,6 +53,18 @@ class PropsCheckTests(unittest.TestCase): self.run_test("./test/cases/duplicate_lines.properties", "duplicate_lines", {str(Line(5, "duplicated.prop=true"))}) + def test_duplicated_compiler(self): + self.run_test("./test/cases/bad_duplicated_compiler.properties", "duplicated_compiler_references", + {"duplicatedname"}) + + def test_duplicated_group(self): + self.run_test("./test/cases/bad_duplicated_group.properties", "duplicated_group_references", + {"dupgroup"}) + + def test_suspicious_path(self): + self.run_test("./test/cases/suspicious_path.properties", "suspicious_path", + {"/wrong/path/bin/gcc"}) + def test_good_file(self): result = process_file('../../config/c++.amazon.properties') for k in result: diff --git a/etc/scripts/util/test/cases/bad_duplicated_compiler.properties b/etc/scripts/util/test/cases/bad_duplicated_compiler.properties new file mode 100644 index 000000000..0584d7846 --- /dev/null +++ b/etc/scripts/util/test/cases/bad_duplicated_compiler.properties @@ -0,0 +1,4 @@ +compilers=&g1:&g2 + +g1.compilers=c1:duplicatedname +g2.compilers=c3:c4:duplicatedname diff --git a/etc/scripts/util/test/cases/bad_duplicated_group.properties b/etc/scripts/util/test/cases/bad_duplicated_group.properties new file mode 100644 index 000000000..a205177fe --- /dev/null +++ b/etc/scripts/util/test/cases/bad_duplicated_group.properties @@ -0,0 +1,4 @@ +compilers=&g1:&g2 + +g1.compilers=&dupgroup +g2.compilers=&dupgroup diff --git a/etc/scripts/util/test/cases/suspicious_path.properties b/etc/scripts/util/test/cases/suspicious_path.properties new file mode 100644 index 000000000..c48c61337 --- /dev/null +++ b/etc/scripts/util/test/cases/suspicious_path.properties @@ -0,0 +1,3 @@ +compilers=a:b +compiler.a.exe=/opt/compiler-explorer/some/bin/gcc +compiler.b.exe=/wrong/path/bin/gcc diff --git a/lib/base-compiler.ts b/lib/base-compiler.ts index b8c9ac10d..f6a6c7af5 100644 --- a/lib/base-compiler.ts +++ b/lib/base-compiler.ts @@ -451,7 +451,7 @@ export class BaseCompiler { return fn; } - getGccDumpFileName(outputFilename) { + getGccDumpFileName(outputFilename: string) { return outputFilename.replace(path.extname(outputFilename), '.dump'); } @@ -523,7 +523,7 @@ export class BaseCompiler { // Returns a list of additional options that may be required by some backend options. // Meant to be overloaded by compiler classes. // Default handles the GCC compiler with some debug dump enabled. - optionsForBackend(backendOptions, outputFilename) { + optionsForBackend(backendOptions: Record<string, any>, outputFilename: string): string[] { let addOpts: string[] = []; if (backendOptions.produceGccDump && backendOptions.produceGccDump.opened && this.compiler.supportsGccDump) { @@ -533,7 +533,7 @@ export class BaseCompiler { return addOpts; } - protected optionsForFilter(filters: ParseFilters, outputFilename, userOptions?) { + protected optionsForFilter(filters: ParseFilters, outputFilename: string, userOptions?: string[]): string[] { let options = ['-g', '-o', this.filename(outputFilename)]; if (this.compiler.intelAsm && filters.intel && !filters.binary) { options = options.concat(this.compiler.intelAsm.split(' ')); @@ -563,8 +563,8 @@ export class BaseCompiler { return result; } - findAutodetectStaticLibLink(linkname): SelectedLibraryVersion | false { - const foundLib = _.findKey(this.supportedLibraries as object, lib => { + findAutodetectStaticLibLink(linkname: string): SelectedLibraryVersion | false { + const foundLib = _.findKey(this.supportedLibraries as Record<string, Library>, lib => { return ( lib.versions.autodetect && lib.versions.autodetect.staticliblink && @@ -751,31 +751,34 @@ export class BaseCompiler { ); } - getIncludeArguments(libraries) { + getIncludeArguments(libraries: SelectedLibraryVersion[]): string[] { const includeFlag = this.compiler.includeFlag || '-I'; + return libraries.flatMap(selectedLib => { + const foundVersion = this.findLibVersion(selectedLib); + if (!foundVersion) return []; - return _.flatten( - _.map(libraries, selectedLib => { - const foundVersion = this.findLibVersion(selectedLib); - if (!foundVersion) return false; - - return _.map(foundVersion.path, path => includeFlag + path); - }), - ); + return foundVersion.path.map(path => includeFlag + path); + }); } - getLibraryOptions(libraries) { - return _.flatten( - _.map(libraries, selectedLib => { - const foundVersion = this.findLibVersion(selectedLib); - if (!foundVersion) return false; - - return foundVersion.options; - }), - ); + getLibraryOptions(libraries: SelectedLibraryVersion[]): string[] { + return libraries.flatMap(selectedLib => { + const foundVersion = this.findLibVersion(selectedLib); + if (!foundVersion) return []; + return foundVersion.options; + }); } - orderArguments(options, inputFilename, libIncludes, libOptions, libPaths, libLinks, userOptions, staticLibLinks) { + orderArguments( + options: string[], + inputFilename: string, + libIncludes: string[], + libOptions: string[], + libPaths: string[], + libLinks: string[], + userOptions: string[], + staticLibLinks: string[], + ) { return options.concat( userOptions, [this.filename(inputFilename)], @@ -787,7 +790,14 @@ export class BaseCompiler { ); } - prepareArguments(userOptions, filters: ParseFilters, backendOptions, inputFilename, outputFilename, libraries) { + prepareArguments( + userOptions: string[], + filters: ParseFilters, + backendOptions: Record<string, any>, + inputFilename: string, + outputFilename: string, + libraries, + ) { let options = this.optionsForFilter(filters, outputFilename, userOptions); backendOptions = backendOptions || {}; @@ -831,7 +841,7 @@ export class BaseCompiler { return options; } - filterUserOptions(userOptions) { + filterUserOptions(userOptions: string[]): string[] { return userOptions; } @@ -2359,7 +2369,7 @@ but nothing was dumped. Possible causes are: return source; } - async postProcess(result, outputFilename, filters) { + async postProcess(result, outputFilename: string, filters: ParseFilters) { const postProcess = _.compact(this.compiler.postProcess); const maxSize = this.env.ceProps('max-asm-size', 64 * 1024 * 1024); const optPromise = result.hasOptOutput ? this.processOptOutput(result.optPath) : ''; diff --git a/lib/compilers/_all.js b/lib/compilers/_all.js index 9abb0e5ef..3224acc03 100644 --- a/lib/compilers/_all.js +++ b/lib/compilers/_all.js @@ -75,6 +75,7 @@ export {PonyCompiler} from './pony'; export {PPCICompiler} from './ppci'; export {PtxAssembler} from './ptxas'; export {PythonCompiler} from './python'; +export {RGACompiler} from './rga'; export {RubyCompiler} from './ruby'; export {RustcCgGCCCompiler} from './rustc-cg-gcc'; export {RustCompiler} from './rust'; diff --git a/lib/compilers/golang.js b/lib/compilers/golang.ts index 8aa0fd985..b0abb1498 100644 --- a/lib/compilers/golang.js +++ b/lib/compilers/golang.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2016, Compiler Explorer Authors +// Copyright (c) 2022, Compiler Explorer Authors // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -24,6 +24,7 @@ import _ from 'underscore'; +import {ResultLine} from '../../types/resultline/resultline.interfaces'; import {BaseCompiler} from '../base-compiler'; import * as utils from '../utils'; @@ -34,40 +35,61 @@ import {ClangParser} from './argument-parsers'; // x86 -> j, b // arm -> cb, tb // s390x -> cmpb, cmpub -const jumpRe = /^(j|b|cb|tb|cmpb|cmpub).*/i; +const JUMP_RE = /^(j|b|cb|tb|cmpb|cmpub).*/i; +const LINE_RE = /^\s+(0[Xx]?[\dA-Za-z]+)?\s?(\d+)\s*\(([^:]+):(\d+)\)\s*([A-Z]+)(.*)/; +const UNKNOWN_RE = /^\s+(0[Xx]?[\dA-Za-z]+)?\s?(\d+)\s*\(<unknown line number>\)\s*([A-Z]+)(.*)/; +const FUNC_RE = /TEXT\s+[".]*(\S+)\(SB\)/; +const LOGGING_RE = /^[^:]+:\d+:(\d+:)?\s.*/; +const DECIMAL_RE = /(\s+)(\d+)(\s?)$/; + +type GoEnv = { + GOROOT?: string; + GOARCH?: string; + GOOS?: string; +}; export class GolangCompiler extends BaseCompiler { + private readonly GOENV: GoEnv; + static get key() { return 'golang'; } constructor(compilerInfo, env) { super(compilerInfo, env); - this.goroot = this.compilerProps(`compiler.${this.compiler.id}.goroot`); - this.goarch = this.compilerProps(`compiler.${this.compiler.id}.goarch`); - this.goos = this.compilerProps(`compiler.${this.compiler.id}.goos`); + const goroot = this.compilerProps(`compiler.${this.compiler.id}.goroot`); + const goarch = this.compilerProps(`compiler.${this.compiler.id}.goarch`); + const goos = this.compilerProps(`compiler.${this.compiler.id}.goos`); + + this.GOENV = {}; + if (goroot) { + this.GOENV.GOROOT = goroot; + } + if (goarch) { + this.GOENV.GOARCH = goarch; + } + if (goos) { + this.GOENV.GOOS = goos; + } } - convertNewGoL(code) { - const re = /^\s+(0[Xx]?[\dA-Za-z]+)?\s?(\d+)\s*\(([^:]+):(\d+)\)\s*([A-Z]+)(.*)/; - const reUnknown = /^\s+(0[Xx]?[\dA-Za-z]+)?\s?(\d+)\s*\(<unknown line number>\)\s*([A-Z]+)(.*)/; - const reFunc = /TEXT\s+[".]*(\S+)\(SB\)/; - let prevLine = null; - let file = null; + convertNewGoL(code: ResultLine[]): string { + let prevLine: string | null = null; + let file: string | null = null; let fileCount = 0; - let func = null; - const funcCollisions = {}; - const labels = {}; - const usedLabels = {}; + let func: string | null = null; + const funcCollisions: Record<string, number> = {}; + const labels: Record<string, boolean> = {}; + const usedLabels: Record<string, boolean> = {}; const lines = code.map(obj => { - let pcMatch = null; - let fileMatch = null; - let lineMatch = null; - let ins = null; - let args = null; + let pcMatch: string | null = null; + let fileMatch: string | null = null; + let lineMatch: string | null = null; + let ins: string | null = null; + let args: string | null = null; const line = obj.text; - let match = line.match(re); + let match = line.match(LINE_RE); if (match) { pcMatch = match[2]; fileMatch = match[3]; @@ -75,17 +97,17 @@ export class GolangCompiler extends BaseCompiler { ins = match[5]; args = match[6]; } else { - match = line.match(reUnknown); + match = line.match(UNKNOWN_RE); if (match) { pcMatch = match[2]; ins = match[3]; args = match[4]; } else { - return null; + return []; } } - match = line.match(reFunc); + match = line.match(FUNC_RE); if (match) { // Normalize function name. func = match[1].replace(/[()*.]+/g, '_'); @@ -103,12 +125,12 @@ export class GolangCompiler extends BaseCompiler { funcCollisions[func] = collisions; } - let res = []; + const res: string[] = []; if (pcMatch && !labels[pcMatch]) { // Create pseudo-label. let label = pcMatch.replace(/^0{0,4}/, ''); let suffix = ''; - if (funcCollisions[func] > 0) { + if (func && funcCollisions[func] > 0) { suffix = `_${funcCollisions[func]}`; } @@ -130,32 +152,37 @@ export class GolangCompiler extends BaseCompiler { prevLine = lineMatch; } - args = this.replaceJump(func, funcCollisions[func], ins, args, usedLabels); - res.push(`\t${ins}${args}`); + if (func) { + args = this.replaceJump(func, funcCollisions[func], ins, args, usedLabels); + res.push(`\t${ins}${args}`); + } return res; }); // Find unused pseudo-labels so they can be filtered out. const unusedLabels = _.mapObject(labels, (val, key) => !usedLabels[key]); - return _.chain(lines) - .flatten() - .compact() + return lines + .flat() .filter(line => !unusedLabels[line]) - .value() .join('\n'); } - replaceJump(func, collisions, ins, args, usedLabels) { + replaceJump( + func: string, + collisions: number, + ins: string, + args: string, + usedLabels: Record<string, boolean>, + ): string { // Check if last argument is a decimal number. - const re = /(\s+)(\d+)(\s?)$/; - const match = args.match(re); + const match = args.match(DECIMAL_RE); if (!match) { return args; } // Check instruction has a jump prefix - if (jumpRe.test(ins)) { + if (JUMP_RE.test(ins)) { let label = `${func}_pc${match[2]}`; if (collisions > 0) { label += `_${collisions}`; @@ -167,16 +194,16 @@ export class GolangCompiler extends BaseCompiler { return args; } - extractLogging(stdout) { - let filepath = `./${this.compileFilename}`; - const reLogging = /^[^:]+:\d+:(\d+:)?\s.*/; + extractLogging(stdout: ResultLine[]): string { + const filepath = `./${this.compileFilename}`; + return stdout - .filter(obj => obj.text.match(reLogging)) + .filter(obj => obj.text.match(LOGGING_RE)) .map(obj => obj.text.replace(filepath, '<source>')) .join('\n'); } - async postProcess(result) { + override async postProcess(result) { let out = result.stderr; if (this.compiler.id === '6g141') { out = result.stdout; @@ -185,14 +212,14 @@ export class GolangCompiler extends BaseCompiler { result.asm = this.convertNewGoL(out); result.stderr = null; result.stdout = utils.parseOutput(logging, result.inputFilename); - return [result, '']; + return Promise.all([result, '']); } - getSharedLibraryPathsAsArguments() { + override getSharedLibraryPathsAsArguments() { return []; } - optionsForFilter(filters, outputFilename, userOptions) { + override optionsForFilter(filters, outputFilename, userOptions) { // If we're dealing with an older version... if (this.compiler.id === '6g141') { return ['tool', '6g', '-g', '-o', outputFilename, '-S']; @@ -206,7 +233,7 @@ export class GolangCompiler extends BaseCompiler { } } - filterUserOptions(userOptions) { + override filterUserOptions(userOptions) { if (this.compiler.id === '6g141') { return userOptions; } @@ -214,21 +241,14 @@ export class GolangCompiler extends BaseCompiler { return []; } - getDefaultExecOptions() { - const execOptions = super.getDefaultExecOptions(); - if (this.goroot) { - execOptions.env.GOROOT = this.goroot; - } - if (this.goarch) { - execOptions.env.GOARCH = this.goarch; - } - if (this.goos) { - execOptions.env.GOOS = this.goos; - } - return execOptions; + override getDefaultExecOptions() { + return { + ...super.getDefaultExecOptions(), + ...this.GOENV, + }; } - getArgumentParser() { + override getArgumentParser() { return ClangParser; } } diff --git a/lib/compilers/hlsl.js b/lib/compilers/hlsl.ts index 25858839e..2925a0154 100644 --- a/lib/compilers/hlsl.js +++ b/lib/compilers/hlsl.ts @@ -24,6 +24,7 @@ import path from 'path'; +import {ParseFilters} from '../../types/features/filters.interfaces'; import {BaseCompiler} from '../base-compiler'; export class HLSLCompiler extends BaseCompiler { @@ -31,21 +32,39 @@ export class HLSLCompiler extends BaseCompiler { return 'hlsl'; } - constructor(info, env) { + constructor(info: any, env: any) { super(info, env); this.compiler.supportsIntel = false; } /* eslint-disable no-unused-vars */ - optionsForFilter(filters, outputFilename) { + override optionsForFilter(filters: ParseFilters, outputFilename: string, userOptions?: string[]): string[] { return [ + '-Zi', // Embed debug information to get DXIL line associations + '-Qembed_debug', // Silences the warning associated with embedded debug information `-Fc ${outputFilename}`, // Output object ]; } /* eslint-enable no-unused-vars */ - getIrOutputFilename(inputFilename) { + override filterUserOptions(userOptions: any) { + // RGA supports a non-standard flag --asic [ASIC] which must be removed when compiling with DXC + const options = userOptions.slice(0); + // Scan for the RGA-specific argument --asic and strip it and its corresponding argument + // Assumes the argument exists at most once (compilation will fail if supplied more than + // once regardless) + for (let i = 0; i !== options.length; ++i) { + const option = options[i]; + if (option === '--asic') { + options.splice(i, 2); + break; + } + } + return options; + } + + override getIrOutputFilename(inputFilename: string) { return this.getOutputFilename(path.dirname(inputFilename), this.outputFilebase).replace('.s', '.dxil'); } } diff --git a/lib/compilers/rga.ts b/lib/compilers/rga.ts new file mode 100644 index 000000000..aec9d2084 --- /dev/null +++ b/lib/compilers/rga.ts @@ -0,0 +1,276 @@ +// 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 {readdir, readFile, rename, writeFile} from 'fs-extra'; + +import {CompilationResult, ExecutionOptions} from '../../types/compilation/compilation.interfaces'; +import {ParseFilters} from '../../types/features/filters.interfaces'; +import {BaseCompiler} from '../base-compiler'; +import * as exec from '../exec'; +import {logger} from '../logger'; + +interface ASICSelection { + asic?: string; + error?: string; + printASICs?: boolean; +} + +// RGA := Radeon GPU Analyzer +export class RGACompiler extends BaseCompiler { + private dxcPath: string; + + static get key() { + return 'rga'; + } + + constructor(info: any, env: any) { + super(info, env); + + this.compiler.supportsIntel = false; + this.dxcPath = this.compilerProps(`compiler.${this.compiler.id}.dxcPath`); + logger.debug(`RGA compiler ${this.compiler.id} configured to use DXC at ${this.dxcPath}`); + } + + override optionsForFilter(filters: ParseFilters, outputFilename: any, userOptions?: any): any[] { + return [outputFilename]; + } + + extractASIC(dxcArgs: string[]): ASICSelection { + // Scan dxc args for an `--asic` argument that should be stripped and passed later to RGA + // Default to RDNA2 + let asic = 'gfx1030'; + let printASICs = true; + for (let i = 0; i !== dxcArgs.length; ++i) { + const arg = dxcArgs[i]; + if (arg === '--asic') { + // NOTE: the last arguments are the input source file and -spirv, so check + // if --asic immediately precedes that + if (i === dxcArgs.length - 3) { + return { + error: '--asic flag supplied without subsequent ASIC!', + }; + } + asic = dxcArgs[i + 1]; + // Do a quick sanity check to determine if a valid ASIC was supplied + if (!asic.startsWith('gfx')) { + return { + error: `The argument immediately following --asic doesn't appear to be a valid ASIC. +Please supply an ASIC from the following options:`, + printASICs: true, + }; + } + // Remove these two arguments from the dxcArgs list + dxcArgs.splice(i, 2); + + // If the user supplied a specific ASIC, don't bother printing available ASIC options + printASICs = false; + break; + } + } + + return { + asic, + printASICs, + }; + } + + execTime(startTime: bigint, endTime: bigint): string { + return ((endTime - startTime) / BigInt(1000000)).toString(); + } + + override async runCompiler( + compiler: string, + options: string[], + inputFilename: string, + execOptions: ExecutionOptions, + ): Promise<CompilationResult> { + if (!execOptions) { + execOptions = this.getDefaultExecOptions(); + } + + if (!execOptions.customCwd) { + execOptions.customCwd = path.dirname(inputFilename); + } + + const result = await this.execDXCandRGA(compiler, options, execOptions); + result.inputFilename = inputFilename; + const transformedInput = result.filenameTransform(inputFilename); + this.parseCompilationOutput(result, transformedInput); + return result; + } + + async execDXCandRGA(filepath: string, args: string[], execOptions: ExecutionOptions): Promise<any> { + // RGA is invoked in two steps. First, DXC is invoked to compile the SPIR-V output of the HLSL file. + // Next, RGA is invoked to consume the SPIR-V output and produce the requested ISA. + + // Track the total time spent instead of relying on executeDirect's internal timing facility + const startTime = process.hrtime.bigint(); + + // The first argument is the target output file + const outputFile = args[0]; + const outputDir = path.dirname(outputFile); + const spvTemp = 'output.spv.txt'; + logger.debug(`Intermediate SPIR-V output: ${spvTemp}`); + + const dxcArgs = args.slice(1); + if (!dxcArgs.includes('-spirv')) { + dxcArgs.push('-spirv'); + } + logger.debug(`DXC args: ${dxcArgs}`); + + const asicSelection = this.extractASIC(dxcArgs); + if (asicSelection.error) { + // Invalid user ASIC selected, bail out immediately + const endTime = process.hrtime.bigint(); + + // Synthesize a faux-execution result (see promise resolution code in executeDirect) + return { + code: -1, + okToCache: true, + filenameTransform: x => x, + stdout: asicSelection.error, + execTime: this.execTime(startTime, endTime), + }; + } + + const dxcResult = await exec.execute(this.dxcPath, dxcArgs, execOptions); + if (dxcResult.code !== 0) { + // Failed to compile SPIR-V intermediate product. Exit immediately with DXC invocation result. + const endTime = process.hrtime.bigint(); + dxcResult.execTime = this.execTime(startTime, endTime); + return dxcResult; + } + + try { + await writeFile(path.join(outputDir, spvTemp), dxcResult.stdout); + } catch (e) { + const endTime = process.hrtime.bigint(); + return { + code: -1, + okToCache: true, + filenameTransform: x => x, + stdout: 'Failed to emit intermediate SPIR-V result.', + execTime: this.execTime(startTime, endTime), + }; + } + + let registerAnalysisFile = 'livereg.txt'; + const rgaArgs = [ + '-s', + 'vk-spv-txt-offline', + '-c', + asicSelection.asic, + '--isa', + outputFile, + '--livereg', + registerAnalysisFile, + spvTemp, + ]; + logger.debug(`RGA args: ${rgaArgs}`); + + const rgaResult = await exec.execute(filepath, rgaArgs, execOptions); + if (rgaResult.code !== 0) { + // Failed to compile AMD ISA + const endTime = process.hrtime.bigint(); + rgaResult.execTime = this.execTime(startTime, endTime); + return rgaResult; + } + + // RGA doesn't emit the exact file we requested. It prepends the requested GPU + // architecture and appends the shader type (with underscore separators). Here, + // we rename the generated file to the output file Compiler Explorer expects. + + const files = await readdir(outputDir, {encoding: 'utf-8'}); + for (const file of files) { + if (file.startsWith((asicSelection.asic as string) + '_output')) { + await rename(path.join(outputDir, file), outputFile); + + registerAnalysisFile = path.join(outputDir, file.replace('output', 'livereg').replace('.s', '.txt')); + // The register analysis file contains a legend, and register liveness data + // for each line of disassembly. Interleave those lines into the final output + // as assembly comments. + const asm = await readFile(outputFile, 'utf-8'); + const asmLines = asm.split(/\r?\n/); + const analysis = await readFile(registerAnalysisFile, 'utf-8'); + const analysisLines = analysis.split(/\r?\n/); + + // The first few lines of the register analysis are the legend. Emit those lines + // as comments at the start of the output. + let analysisOffset = analysisLines.indexOf(''); + analysisOffset += 3; + const epilogueOffset = analysisLines.indexOf('', analysisOffset); + const outputAsm = analysisLines.slice(epilogueOffset + 1).map(line => `; ${line}`); + outputAsm.push(...analysisLines.slice(0, analysisOffset).map(line => `; ${line}`), '\n'); + + let asmOffset = asmLines.indexOf(''); + outputAsm.push(...asmLines.slice(0, asmOffset)); + asmOffset += 1; + + // Perform the interleave + for (let i = 0; i !== asmOffset + asmLines.length; ++i) { + if (i + analysisOffset >= epilogueOffset) { + outputAsm.push(...asmLines.slice(i)); + break; + } + + // Check if this line of assembly corresponds to a label. If so, emit the asm line + // and continue from the next line (the register analysis file operates on instructions, + // and labels are not considered instructions) + if (asmLines[i + asmOffset].startsWith('label')) { + outputAsm.push(asmLines[i + asmOffset]); + ++asmOffset; + --i; + continue; + } + + outputAsm.push(`; ${analysisLines[i + analysisOffset]}`, asmLines[i + asmOffset]); + } + + await writeFile(outputFile, outputAsm.join('\n')); + + if (asicSelection.printASICs) { + rgaResult.stdout += `ISA compiled with the default AMD ASIC (Radeon RX 6800 series RDNA2). +To override this, pass --asic [ASIC] to the options above (nonstandard DXC option), +where [ASIC] corresponds to one of the following options:`; + + const asics = await exec.execute(filepath, ['-s', 'vk-spv-txt-offline', '-l'], execOptions); + rgaResult.stdout += '\n'; + rgaResult.stdout += asics.stdout; + } + + const endTime = process.hrtime.bigint(); + rgaResult.execTime = this.execTime(startTime, endTime); + return rgaResult; + } + } + + // Arriving here means the expected ISA result wasn't emitted. Synthesize an error. + const endTime = process.hrtime.bigint(); + rgaResult.execTime = this.execTime(startTime, endTime); + rgaResult.stdout += `\nRGA didn't emit expected ISA output.`; + return rgaResult; + } +} diff --git a/lib/compilers/rust.ts b/lib/compilers/rust.ts index 89b52533d..f1d0d3a89 100644 --- a/lib/compilers/rust.ts +++ b/lib/compilers/rust.ts @@ -35,6 +35,7 @@ import {RustParser} from './argument-parsers'; export class RustCompiler extends BaseCompiler { linker: string; + static get key() { return 'rust'; } @@ -69,24 +70,19 @@ export class RustCompiler extends BaseCompiler { override getIncludeArguments(libraries) { const includeFlag = '--extern'; - return _.flatten( - _.map(libraries, selectedLib => { - const foundVersion = this.findLibVersion(selectedLib); - if (!foundVersion) return false; - if (!foundVersion.name) return false; - const list: string[] = []; - const lowercaseLibName = foundVersion.name.replaceAll('-', '_'); - for (const rlib of foundVersion.path) { - list.push( - includeFlag, - `${lowercaseLibName}=${foundVersion.name}/build/debug/${rlib}`, - '-L', - `dependency=${foundVersion.name}/build/debug/deps`, - ); - } - return list; - }), - ); + return libraries.flatMap(selectedLib => { + const foundVersion = this.findLibVersion(selectedLib); + if (!foundVersion || !foundVersion.name) return []; + const lowercaseLibName = foundVersion.name.replaceAll('-', '_'); + return foundVersion.path.flatMap(rlib => { + return [ + includeFlag, + `${lowercaseLibName}=${foundVersion.name}/build/debug/${rlib}`, + '-L', + `dependency=${foundVersion.name}/build/debug/deps`, + ]; + }); + }); } override orderArguments( diff --git a/lib/compilers/wine-vc.js b/lib/compilers/wine-vc.js index 653f6289e..be60b94d7 100644 --- a/lib/compilers/wine-vc.js +++ b/lib/compilers/wine-vc.js @@ -51,7 +51,10 @@ export class WineVcCompiler extends BaseCompiler { execOptions = this.getDefaultExecOptions(); } - execOptions.customCwd = path.dirname(inputFilename).substr(2); + execOptions.customCwd = path.dirname(inputFilename); + if (inputFilename.startsWith('Z:')) { + execOptions.customCwd = execOptions.customCwd.substr(2); + } return super.runCompiler(compiler, options, inputFilename, execOptions); } diff --git a/lib/compilers/zig.js b/lib/compilers/zig.js index 1a9d0512d..d524fc1de 100644 --- a/lib/compilers/zig.js +++ b/lib/compilers/zig.js @@ -132,14 +132,12 @@ export class ZigCompiler extends BaseCompiler { } getIncludeArguments(libraries) { - return _.flatten( - _.map(libraries, selectedLib => { - const foundVersion = this.findLibVersion(selectedLib); - if (!foundVersion) return false; - // Zig should not have more than 1 path - return ['--pkg-begin', foundVersion.name, foundVersion.path, '--pkg-end']; - }), - ); + return libraries.flatMap(selectedLib => { + const foundVersion = this.findLibVersion(selectedLib); + if (!foundVersion) return []; + // Zig should not have more than 1 path, but it's still an array so spread it + return ['--pkg-begin', foundVersion.name, ...foundVersion.path, '--pkg-end']; + }); } getIrOutputFilename(inputFilename) { diff --git a/lib/exec.js b/lib/exec.js index 63d65bb25..d7abd789f 100644 --- a/lib/exec.js +++ b/lib/exec.js @@ -286,6 +286,9 @@ function sandboxFirejail(command, args, options) { const sandboxDispatchTable = { none: (command, args, options) => { logger.info('Sandbox execution (sandbox disabled)', {command, args}); + if (needsWine(command)) { + return executeWineDirect(command, args, options); + } return executeDirect(command, args, options); }, nsjail: sandboxNsjail, diff --git a/lib/handlers/api.js b/lib/handlers/api.js index c355cb06f..0301aa806 100644 --- a/lib/handlers/api.js +++ b/lib/handlers/api.js @@ -91,18 +91,11 @@ export class ApiHandler { this.handle .route('/popularArguments/:compiler') .post(compileHandler.handlePopularArguments.bind(compileHandler)) - .all(methodNotAllowed); - this.handle - .route('/optimizationArguments/:compiler') - .post(compileHandler.handleOptimizationArguments.bind(compileHandler)) - .all(methodNotAllowed); - - this.handle - .route('/popularArguments/:compiler') .get(compileHandler.handlePopularArguments.bind(compileHandler)) .all(methodNotAllowed); this.handle .route('/optimizationArguments/:compiler') + .post(compileHandler.handleOptimizationArguments.bind(compileHandler)) .get(compileHandler.handleOptimizationArguments.bind(compileHandler)) .all(methodNotAllowed); diff --git a/lib/handlers/compile.js b/lib/handlers/compile.js index e9b7a0e8c..87632dca6 100644 --- a/lib/handlers/compile.js +++ b/lib/handlers/compile.js @@ -338,15 +338,19 @@ export class CompileHandler { return {source, options, backendOptions, filters, bypassCache, tools, executionParameters, libraries}; } - handlePopularArguments(req, res, next) { + handlePopularArguments(req, res) { const compiler = this.compilerFor(req); - if (!compiler) return next(); + if (!compiler) { + return res.sendStatus(404); + } res.send(compiler.possibleArguments.getPopularArguments(this.getUsedOptions(req))); } - handleOptimizationArguments(req, res, next) { + handleOptimizationArguments(req, res) { const compiler = this.compilerFor(req); - if (!compiler) return next(); + if (!compiler) { + return res.sendStatus(404); + } res.send(compiler.possibleArguments.getOptimizationArguments(this.getUsedOptions(req))); } @@ -377,7 +381,7 @@ export class CompileHandler { handleCmake(req, res, next) { const compiler = this.compilerFor(req); if (!compiler) { - return next(); + return res.sendStatus(404); } const remote = compiler.getRemote(); @@ -413,8 +417,9 @@ export class CompileHandler { handle(req, res, next) { const compiler = this.compilerFor(req); if (!compiler) { - return next(); + return res.sendStatus(404); } + const remote = compiler.getRemote(); if (remote) { req.url = remote.path; diff --git a/lib/parsers/llvm-pass-dump-parser.ts b/lib/parsers/llvm-pass-dump-parser.ts index dc9ca637e..ecb62fed3 100644 --- a/lib/parsers/llvm-pass-dump-parser.ts +++ b/lib/parsers/llvm-pass-dump-parser.ts @@ -82,6 +82,8 @@ type SplitPassDump = { export class LlvmPassDumpParser { filters: RegExp[]; lineFilters: RegExp[]; + debugInfoFilters: RegExp[]; + debugInfoLineFilters: RegExp[]; irDumpHeader: RegExp; machineCodeDumpHeader: RegExp; functionDefine: RegExp; @@ -100,17 +102,23 @@ export class LlvmPassDumpParser { /^; ModuleID = '.+'$/, // module id line /^(source_filename|target datalayout|target triple) = ".+"$/, // module metadata /^; Function Attrs: .+$/, // function attributes - /^\s+call void @llvm.dbg.value.+$/, // dbg calls - /^\s+call void @llvm.dbg.declare.+$/, // dbg calls /^declare .+$/, // declare directives + /^attributes #\d+ = { .+ }$/, // attributes directive + ]; + this.lineFilters = [ + /,? #\d+((?=( {)?$))/, // attribute annotation + ]; + + // Additional filters conditionally enabled by `filterDebugInfo` + this.debugInfoFilters = [ + /^\s+call void @llvm.dbg.+$/, // dbg calls + /^\s+DBG_.+$/, // dbg pseudo-instructions /^(!\d+) = (?:distinct )?!DI([A-Za-z]+)\(([^)]+?)\)/, // meta /^(!\d+) = (?:distinct )?!{.*}/, // meta /^(![.A-Z_a-z-]+) = (?:distinct )?!{.*}/, // meta - /^attributes #\d+ = { .+ }$/, // attributes directive ]; - this.lineFilters = [ + this.debugInfoLineFilters = [ /,? ![\dA-Za-z]+((?=( {)?$))/, // debug annotation - /,? #\d+((?=( {)?$))/, // attribute annotation ]; // Ir dump headers look like "*** IR Dump After XYZ ***" @@ -435,18 +443,26 @@ export class LlvmPassDumpParser { } process(ir: ResultLine[], _: ParseFilters, llvmOptPipelineOptions: LLVMOptPipelineBackendOptions) { + // Additional filters conditionally enabled by `filterDebugInfo` + let filters = this.filters; + let lineFilters = this.lineFilters; + if (llvmOptPipelineOptions.filterDebugInfo) { + filters = filters.concat(this.debugInfoFilters); + lineFilters = lineFilters.concat(this.debugInfoLineFilters); + } + // Filter a lot of junk before processing const preprocessed_lines = ir .slice( ir.findIndex(line => line.text.match(this.irDumpHeader) || line.text.match(this.machineCodeDumpHeader)), ) - .filter(line => this.filters.every(re => line.text.match(re) === null)) // apply filters + .filter(line => filters.every(re => line.text.match(re) === null)) // apply filters .map(_line => { let line = _line.text; // eslint-disable-next-line no-constant-condition while (true) { let newLine = line; - for (const re of this.lineFilters) { + for (const re of lineFilters) { newLine = newLine.replace(re, ''); } if (newLine === line) { diff --git a/package.json b/package.json index 80675382a..149ba8772 100644 --- a/package.json +++ b/package.json @@ -164,7 +164,7 @@ "test": "mocha -b", "test-min": "mocha -b --config .mocharc-min.yml", "fix": "npm run lint && npm run format && npm run ts-check", - "check": "npm run npm run ts-check && npm run lint-check && npm run test-min -- --reporter min", + "check": "npm run ts-check && npm run lint-check && npm run test-min -- --reporter min", "dev": "cross-env NODE_ENV=DEV node -r esm -r ts-node/register app.js", "debugger": "cross-env NODE_ENV=DEV node --inspect -r esm -r ts-node/register app.js --debug", "debug": "cross-env NODE_ENV=DEV node -r esm -r ts-node/register app.js --debug", diff --git a/static/compiler-service.ts b/static/compiler-service.ts index a1b959723..adc693c8f 100644 --- a/static/compiler-service.ts +++ b/static/compiler-service.ts @@ -42,6 +42,8 @@ type CompilationStatus = { compilerOut: number; }; +const ASCII_COLORS_RE = new RegExp(/\x1B\[[\d;]*m(.\[K)?/g); + export class CompilerService { private readonly base = window.httpRoot; private allowStoreCodeDebug: boolean; @@ -429,11 +431,9 @@ export class CompilerService { const stdout = result.stdout ?? []; // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition const stderr = result.stderr ?? []; - // TODO: Make its own const variable at top of module? - const asciiColorsRe = new RegExp(/\x1B\[[\d;]*m(.\[K)?/g); function filterAsciiColors(line: ResultLine) { - return line.text.replace(asciiColorsRe, ''); + return line.text.replace(ASCII_COLORS_RE, ''); } const output = stdout.map(filterAsciiColors).concat(stderr.map(filterAsciiColors)).join('\n'); diff --git a/static/main.js b/static/main.js index 7b3417a6c..4c02fa8d6 100644 --- a/static/main.js +++ b/static/main.js @@ -66,7 +66,7 @@ require('bootstrap/dist/css/bootstrap.min.css'); require('golden-layout/src/css/goldenlayout-base.css'); require('tom-select/dist/css/tom-select.bootstrap4.css'); require('./colours.scss'); -require('./explorer.scss'); +require('./styles/explorer.scss'); // Check to see if the current unload is a UI reset. // Forgive me the global usage here diff --git a/static/panes/llvm-opt-pipeline.ts b/static/panes/llvm-opt-pipeline.ts index e12b4e9dd..2e113b8d1 100644 --- a/static/panes/llvm-opt-pipeline.ts +++ b/static/panes/llvm-opt-pipeline.ts @@ -61,6 +61,7 @@ export class LLVMOptPipeline extends MonacoPane<monaco.editor.IStandaloneDiffEdi options: Toggles; state: LLVMOptPipelineViewState; lastOptions: LLVMOptPipelineBackendOptions = { + filterDebugInfo: true, fullModule: false, noDiscardValueNames: true, demangle: true, @@ -188,6 +189,7 @@ export class LLVMOptPipeline extends MonacoPane<monaco.editor.IStandaloneDiffEdi // the backend? Would be a data transfer optimization. const newOptions: LLVMOptPipelineBackendOptions = { //'filter-inconsequential-passes': options['filter-inconsequential-passes'], + filterDebugInfo: options['filter-debug-info'], fullModule: options['dump-full-module'], noDiscardValueNames: options['-fno-discard-value-names'], demangle: options['demangle-symbols'], diff --git a/static/panes/output.ts b/static/panes/output.ts index 54e886782..da6624790 100644 --- a/static/panes/output.ts +++ b/static/panes/output.ts @@ -27,6 +27,7 @@ import {Toggles} from '../widgets/toggles'; import _ from 'underscore'; import {Pane} from './pane'; import {ga} from '../analytics'; +import {updateAndCalcTopBarHeight} from '../utils'; import {Container} from 'golden-layout'; import {PaneState} from './pane.interfaces'; import {Hub} from '../hub'; @@ -150,7 +151,7 @@ export class Output extends Pane<OutputState> { override resize() { const rootHeight = this.domRoot.height(); - const toolbarHeight = this.optionsToolbar.height(); + const toolbarHeight = updateAndCalcTopBarHeight(this.domRoot, this.optionsToolbar, this.hideable); if (rootHeight && toolbarHeight) { this.contentRoot.height(rootHeight - toolbarHeight - 5); } diff --git a/static/panes/pane.ts b/static/panes/pane.ts index dabc0d555..79b897ae2 100644 --- a/static/panes/pane.ts +++ b/static/panes/pane.ts @@ -63,10 +63,10 @@ export abstract class Pane<S> { this.container = container; this.eventHub = hub.createEventHub(); this.domRoot = container.getElement(); - this.hideable = this.domRoot.find('.hideable'); - this.domRoot.html(this.getInitialHTML()); + this.hideable = this.domRoot.find('.hideable'); + this.compilerInfo = { compilerId: state.id, compilerName: state.compilerName, diff --git a/static/explorer.scss b/static/styles/explorer.scss index b64f682d3..040896140 100644 --- a/static/explorer.scss +++ b/static/styles/explorer.scss @@ -570,6 +570,10 @@ kbd { height: 20px !important; } +li.lm_tab.lm_active { + overflow: hidden; +} + @media (max-width: 768px) { .lm_header { height: 50px !important; diff --git a/static/themes/dark-theme.scss b/static/styles/themes/dark-theme.scss index b871f22b6..b871f22b6 100644 --- a/static/themes/dark-theme.scss +++ b/static/styles/themes/dark-theme.scss diff --git a/static/themes/default-theme.scss b/static/styles/themes/default-theme.scss index 9f70c7f55..9f70c7f55 100644 --- a/static/themes/default-theme.scss +++ b/static/styles/themes/default-theme.scss diff --git a/types/compilation/llvm-opt-pipeline-output.interfaces.ts b/types/compilation/llvm-opt-pipeline-output.interfaces.ts index 91a72d367..b80923f52 100644 --- a/types/compilation/llvm-opt-pipeline-output.interfaces.ts +++ b/types/compilation/llvm-opt-pipeline-output.interfaces.ts @@ -36,6 +36,7 @@ export type Pass = { export type LLVMOptPipelineOutput = Record<string, Pass[]>; export type LLVMOptPipelineBackendOptions = { + filterDebugInfo: boolean; fullModule: boolean; noDiscardValueNames: boolean; demangle: boolean; diff --git a/types/libraries/libraries.interfaces.ts b/types/libraries/libraries.interfaces.ts index 6e544588a..979cb898e 100644 --- a/types/libraries/libraries.interfaces.ts +++ b/types/libraries/libraries.interfaces.ts @@ -6,8 +6,8 @@ export type LibraryVersion = { dependencies: string[]; liblink: string[]; libpath: string[]; - path: string; - options: string; + path: string[]; + options: string[]; }; export type Library = { diff --git a/views/templates/panes/compiler-output.pug b/views/templates/panes/compiler-output.pug index f433dc6bf..dd1f13b84 100644 --- a/views/templates/panes/compiler-output.pug +++ b/views/templates/panes/compiler-output.pug @@ -8,5 +8,6 @@ input.d-none(type="checkbox" checked=false) .btn-group.btn-group-sm(role="group") button.btn.btn-sm.btn-light.select-all(type="button" title="Select all lines") - span Select all + span.fa.fa-align-justify(style="border: 1px dotted white;border-radius: 0.125em;padding: 2px") + span.hideable Select all pre.content.output-content diff --git a/views/templates/panes/compiler.pug b/views/templates/panes/compiler.pug index 8c18ef672..4afc6c623 100644 --- a/views/templates/panes/compiler.pug +++ b/views/templates/panes/compiler.pug @@ -61,7 +61,7 @@ mixin newPaneButton(classId, text, title, icon) +newPaneButton("view-gccdump", "GCC Tree/RTL", "Show GCC Tree/RTL dump", "fas fa-tree") +newPaneButton("view-gnatdebugtree", "GNAT Debug Tree", "Show GNAT debug tree", "fas fa-tree") +newPaneButton("view-gnatdebug", "GNAT Debug Expanded Code", "Show GNAT debug expanded code", "fas fa-tree") - +newPaneButton("view-cfg", "Graph", "Shpw graph output", "fas fa-exchange-alt") + +newPaneButton("view-cfg", "Graph", "Show graph output", "fas fa-exchange-alt") .btn-group.btn-group-sm(role="group") button.btn.btn-sm.btn-light.dropdown-toggle.add-tool(type="button" title="Add tool" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="Add tooling to this editor and compiler") span.fas.fa-screwdriver diff --git a/views/templates/panes/llvm-opt-pipeline.pug b/views/templates/panes/llvm-opt-pipeline.pug index 0192ee379..c33ad397d 100644 --- a/views/templates/panes/llvm-opt-pipeline.pug +++ b/views/templates/panes/llvm-opt-pipeline.pug @@ -1,3 +1,9 @@ +mixin optionButton(bind, isActive, text, title) + .button-checkbox + button(type="button" class="dropdown-item btn btn-sm btn-light" + (isActive ? " active" : "") title=title data-bind=bind aria-pressed=isActive ? "true" : "false") + span #{text} + input.d-none(type="checkbox" checked=isActive) + #llvm-opt-pipeline .top-bar.btn-toolbar.bg-light(role="toolbar") include ../../font-size @@ -6,26 +12,12 @@ span.fas.fa-anchor span.hideable Options .dropdown-menu - .button-checkbox - button.dropdown-item.btn.btn-sm.btn-light.filter-inconsequential-passes(type="button" title="Filter passes which do not make changes" data-bind="filter-inconsequential-passes" aria-pressed="false" aria-label="Filter Inconsequential Passes") - span Filter Inconsequential Passes - input.d-none(type="checkbox" checked=false) - .button-checkbox - button.dropdown-item.btn.btn-sm.btn-light.dump-full-module(type="button" title="Dump the entire module for each pass" data-bind="dump-full-module" aria-pressed="false" aria-label="Filter Inconsequential Passes") - span Dump Full Module - input.d-none(type="checkbox" checked=false) - .button-checkbox - button.dropdown-item.btn.btn-sm.btn-light.dump-full-module(type="button" title="Demangle Symbols" data-bind="demangle-symbols" aria-pressed="false" aria-label="Demangle Symbols") - span Demangle Symbols - input.d-none(type="checkbox" checked=true) - .button-checkbox - button.dropdown-item.btn.btn-sm.btn-light.dump-full-module(type="button" title="Keep value names instead of llvm value numbers" data-bind="-fno-discard-value-names" aria-pressed="false" aria-label="-fno-discard-value-names") - span -fno-discard-value-names - input.d-none(type="checkbox" checked=true) - //.button-checkbox - // button.dropdown-item.btn.btn-sm.btn-light.dump-full-module(type="button" title="Filter Library Functions" data-bind="library-functions" aria-pressed="false" aria-label="Filter Library Functions") - // span Filter Library Functions - // input.d-none(type="checkbox" checked=true) + +optionButton("filter-inconsequential-passes", false, "Filter Inconsequential Passes", "Filter passes which do not make changes") + +optionButton("filter-debug-info", true, "Filter Debug Info", "Filter debug info intrinsics") + +optionButton("dump-full-module", false, "Dump Full Module", "Dump the entire module for each pass") + +optionButton("demangle-symbols", true, "Demangle Symbols", "Demangle symbols") + +optionButton("-fno-discard-value-names", true, "-fno-discard-value-names", "Keep value names instead of LLVM value numbers") + //- +optionButton("library-functions", true, "Filter Library Functions", "Filter library functions") .btn-group.btn-group-sm .input-group.input-group-sm.mb-auto .input-group-prepend |