Repository: compiler-explorer/compiler-explorer
Pull request #7706 (2025-05-21 19:19:43)

Changes for NVIDIA HPC SDK 25.5
       Add nvc 25.5 to etc/config/c.amazon.properties
       Add nvc++ 25.5 to etc/config/c++.amazon.properties
       Add nvfortran 25.5 to etc/config/fortran.amazon.properties
       Add CUDA 12.9 to etc/config/cuda.amazon.properties



Patch:
diff --git a/etc/config/c++.amazon.properties b/etc/config/c++.amazon.properties
index 85eaee4bd..090d47bda 100644
--- a/etc/config/c++.amazon.properties
+++ b/etc/config/c++.amazon.properties
@@ -3941,7 +3941,7 @@ compiler.gcc6502_1110.notification=This uses AVR-GCC 11.1.0 to compile C++ and u
 #################################
 # NVHPC nvc++
 
-group.nvcxx_x86_cxx.compilers=nvcxx_x86_cxx22_7:nvcxx_x86_cxx22_9:nvcxx_x86_cxx22_11:nvcxx_x86_cxx23_1:nvcxx_x86_cxx23_3:nvcxx_x86_cxx23_5:nvcxx_x86_cxx23_7:nvcxx_x86_cxx23_9:nvcxx_x86_cxx23_11:nvcxx_x86_cxx24_1:nvcxx_x86_cxx24_3:nvcxx_x86_cxx24_5:nvcxx_x86_cxx24_7:nvcxx_x86_cxx24_9:nvcxx_x86_cxx24_11:nvcxx_x86_cxx25_1:nvcxx_x86_cxx25_3
+group.nvcxx_x86_cxx.compilers=nvcxx_x86_cxx22_7:nvcxx_x86_cxx22_9:nvcxx_x86_cxx22_11:nvcxx_x86_cxx23_1:nvcxx_x86_cxx23_3:nvcxx_x86_cxx23_5:nvcxx_x86_cxx23_7:nvcxx_x86_cxx23_9:nvcxx_x86_cxx23_11:nvcxx_x86_cxx24_1:nvcxx_x86_cxx24_3:nvcxx_x86_cxx24_5:nvcxx_x86_cxx24_7:nvcxx_x86_cxx24_9:nvcxx_x86_cxx24_11:nvcxx_x86_cxx25_1:nvcxx_x86_cxx25_3:nvcxx_x86_cxx25_5
 group.nvcxx_x86_cxx.options=
 group.nvcxx_x86_cxx.binaryHideFuncRe=^(__.*|_(init|start|fini)|(de)?register_tm_clones|call_gmon_start|frame_dummy|\.plt.*|_dl_relocate_static_pie)$
 group.nvcxx_x86_cxx.needsMulti=false
@@ -4058,7 +4058,13 @@ compiler.nvcxx_x86_cxx25_3.nvdisasm=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/
 compiler.nvcxx_x86_cxx25_3.exe=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.3/compilers/bin/nvc++
 compiler.nvcxx_x86_cxx25_3.semver=25.3
 
-group.nvcxx_arm_cxx.compilers=nvcxx_arm_cxx22_11:nvcxx_arm_cxx23_1:nvcxx_arm_cxx23_3:nvcxx_arm_cxx23_5:nvcxx_arm_cxx23_7:nvcxx_arm_cxx23_9:nvcxx_arm_cxx23_11:nvcxx_arm_cxx24_1:nvcxx_arm_cxx24_3:nvcxx_arm_cxx24_5:nvcxx_arm_cxx24_7:nvcxx_arm_cxx24_9:nvcxx_arm_cxx24_11:nvcxx_arm_cxx25_1:nvcxx_arm_cxx25_3
+compiler.nvcxx_x86_cxx25_5.demangler=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.5/compilers/bin/nvdecode
+compiler.nvcxx_x86_cxx25_5.cuobjdump=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.5/cuda/12.9/bin/cuobjdump
+compiler.nvcxx_x86_cxx25_5.nvdisasm=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.5/cuda/12.9/bin/nvdisasm
+compiler.nvcxx_x86_cxx25_5.exe=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.5/compilers/bin/nvc++
+compiler.nvcxx_x86_cxx25_5.semver=25.5
+
+group.nvcxx_arm_cxx.compilers=nvcxx_arm_cxx22_11:nvcxx_arm_cxx23_1:nvcxx_arm_cxx23_3:nvcxx_arm_cxx23_5:nvcxx_arm_cxx23_7:nvcxx_arm_cxx23_9:nvcxx_arm_cxx23_11:nvcxx_arm_cxx24_1:nvcxx_arm_cxx24_3:nvcxx_arm_cxx24_5:nvcxx_arm_cxx24_7:nvcxx_arm_cxx24_9:nvcxx_arm_cxx24_11:nvcxx_arm_cxx25_1:nvcxx_arm_cxx25_3:nvcxx_arm_cxx25_5
 group.nvcxx_arm_cxx.options=
 group.nvcxx_arm_cxx.supportsBinary=true
 group.nvcxx_arm_cxx.binaryHideFuncRe=^(__.*|_(init|start|fini)|(de)?register_tm_clones|call_gmon_start|frame_dummy|\.plt.*|_dl_relocate_static_pie)$
@@ -4134,6 +4140,10 @@ compiler.nvcxx_arm_cxx25_3.demangler=/opt/compiler-explorer/hpc_sdk/Linux_aarch6
 compiler.nvcxx_arm_cxx25_3.exe=/opt/compiler-explorer/hpc_sdk/Linux_aarch64/25.3/compilers/bin/nvc++
 compiler.nvcxx_arm_cxx25_3.semver=25.3
 
+compiler.nvcxx_arm_cxx25_5.demangler=/opt/compiler-explorer/hpc_sdk/Linux_aarch64/25.5/compilers/bin/nvdecode
+compiler.nvcxx_arm_cxx25_5.exe=/opt/compiler-explorer/hpc_sdk/Linux_aarch64/25.5/compilers/bin/nvc++
+compiler.nvcxx_arm_cxx25_5.semver=25.5
+
 #################################
 # EDG compiler
 group.edg.compilers=&edg-gnu:&edg-default
diff --git a/etc/config/c.amazon.properties b/etc/config/c.amazon.properties
index 6d83eff87..bfcaf20fd 100644
--- a/etc/config/c.amazon.properties
+++ b/etc/config/c.amazon.properties
@@ -406,7 +406,7 @@ compiler.cclang_widberg.notification=Experimental Reverse Engineering Compiler;
 #################################
 # NVHPC nvc
 
-group.nvc_x86.compilers=nvc_x86_24_9:nvc_x86_24_11:nvc_x86_25_1:nvc_x86_25_3
+group.nvc_x86.compilers=nvc_x86_24_9:nvc_x86_24_11:nvc_x86_25_1:nvc_x86_25_3:nvc_x86_25_5
 group.nvc_x86.options=
 group.nvc_x86.binaryHideFuncRe=^(__.*|_(init|start|fini)|(de)?register_tm_clones|call_gmon_start|frame_dummy|\.plt.*|_dl_relocate_static_pie)$
 group.nvc_x86.needsMulti=false
@@ -445,6 +445,12 @@ compiler.nvc_x86_25_3.nvdisasm=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.3/
 compiler.nvc_x86_25_3.exe=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.3/compilers/bin/nvc
 compiler.nvc_x86_25_3.semver=25.3
 
+compiler.nvc_x86_25_5.demangler=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.5/compilers/bin/nvdecode
+compiler.nvc_x86_25_5.cuobjdump=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.5/cuda/12.9/bin/cuobjdump
+compiler.nvc_x86_25_5.nvdisasm=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.5/cuda/12.9/bin/nvdisasm
+compiler.nvc_x86_25_5.exe=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.5/compilers/bin/nvc
+compiler.nvc_x86_25_5.semver=25.5
+
 # Clang for Arm
 # Provides 32- and 64-bit menu items for clang-9 and trunk
 group.armcclang32.groupName=Arm 32-bit clang
diff --git a/etc/config/cuda.amazon.properties b/etc/config/cuda.amazon.properties
index 1b5706b69..f1b45c14b 100644
--- a/etc/config/cuda.amazon.properties
+++ b/etc/config/cuda.amazon.properties
@@ -9,7 +9,7 @@ supportsExecute=false
 # Details of GPUs/features supported by CUDA compilers can be found here:
 # gist.github.com/ax3l/9489132#clang--x-cuda
 
-group.nvcc.compilers=nvcc128u1:nvcc126u2:nvcc126u1:nvcc125u1:nvcc124u1:nvcc123u1:nvcc122u1:nvcc121:nvcc120u1:nvcc120:nvcc118:nvcc117u1:nvcc117:nvcc116u2:nvcc116u1:nvcc116:nvcc115u2:nvcc115u1:nvcc115:nvcc114u4:nvcc114u3:nvcc114u2:nvcc114u1:nvcc114:nvcc113u1:nvcc113:nvcc112u2:nvcc112u1:nvcc112:nvcc111u1:nvcc111:nvcc11u1:nvcc11:nvcc102:nvcc101u2:nvcc101u1:nvcc101:nvcc100:nvcc92:nvcc91
+group.nvcc.compilers=nvcc129:nvcc128u1:nvcc126u2:nvcc126u1:nvcc125u1:nvcc124u1:nvcc123u1:nvcc122u1:nvcc121:nvcc120u1:nvcc120:nvcc118:nvcc117u1:nvcc117:nvcc116u2:nvcc116u1:nvcc116:nvcc115u2:nvcc115u1:nvcc115:nvcc114u4:nvcc114u3:nvcc114u2:nvcc114u1:nvcc114:nvcc113u1:nvcc113:nvcc112u2:nvcc112u1:nvcc112:nvcc111u1:nvcc111:nvcc11u1:nvcc11:nvcc102:nvcc101u2:nvcc101u1:nvcc101:nvcc100:nvcc92:nvcc91
 group.nvcc.versionRe=^Cuda.*
 group.nvcc.compilerType=nvcc
 group.nvcc.isSemVer=true
@@ -258,6 +258,12 @@ compiler.nvcc128u1.options=--compiler-bindir /opt/compiler-explorer/gcc-10.2.0/b
 compiler.nvcc128u1.nvdisasm=/opt/compiler-explorer/cuda/12.8.1/bin/nvdisasm
 compiler.nvcc128u1.demangler=/opt/compiler-explorer/gcc-10.2.0/bin/c++filt
 compiler.nvcc128u1.objdumper=/opt/compiler-explorer/gcc-10.2.0/bin/objdump
+compiler.nvcc129.semver=12.9
+compiler.nvcc129.exe=/opt/compiler-explorer/cuda/12.9/bin/nvcc
+compiler.nvcc129.options=--compiler-bindir /opt/compiler-explorer/gcc-10.2.0/bin
+compiler.nvcc129.nvdisasm=/opt/compiler-explorer/cuda/12.9/bin/nvdisasm
+compiler.nvcc129.demangler=/opt/compiler-explorer/gcc-10.2.0/bin/c++filt
+compiler.nvcc129.objdumper=/opt/compiler-explorer/gcc-10.2.0/bin/objdump
 
 group.cuclang.compilers=cuclang700:cuclang800:cuclang900:cuclang1000:cuclang1001:cuclang1100:cuclang1600:cuclang1701:cuclang1810:cuclang1910:cuclang2010-1251:cuclang2010-1261:cuclang2010-1262:cltrunk
 group.cuclang.isSemVer=true
diff --git a/etc/config/fortran.amazon.properties b/etc/config/fortran.amazon.properties
index fa87c2383..2b85d306c 100644
--- a/etc/config/fortran.amazon.properties
+++ b/etc/config/fortran.amazon.properties
@@ -300,7 +300,7 @@ compiler.ifxlatest.options=-gxx-name=/opt/compiler-explorer/gcc-13.2.0/bin/g++
 #################################
 # NVHPC nvfortran
 
-group.nvfortran_x86.compilers=nvfortran_x86_24_9:nvfortran_x86_24_11:nvfortran_x86_25_1:nvfortran_x86_25_3
+group.nvfortran_x86.compilers=nvfortran_x86_24_9:nvfortran_x86_24_11:nvfortran_x86_25_1:nvfortran_x86_25_3:nvfortran_x86_25_5
 group.nvfortran_x86.options=
 group.nvfortran_x86.needsMulti=false
 group.nvfortran_x86.supportsBinary=true
@@ -335,6 +335,12 @@ compiler.nvfortran_x86_25_3.nvdisasm=/opt/compiler-explorer/hpc_sdk/Linux_x86_64
 compiler.nvfortran_x86_25_3.exe=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.3/compilers/bin/nvfortran
 compiler.nvfortran_x86_25_3.semver=25.3
 
+compiler.nvfortran_x86_25_5.demangler=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.5/compilers/bin/nvdecode
+compiler.nvfortran_x86_25_5.cuobjdump=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.5/cuda/12.9/bin/cuobjdump
+compiler.nvfortran_x86_25_5.nvdisasm=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.5/cuda/12.9/bin/nvdisasm
+compiler.nvfortran_x86_25_5.exe=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.5/compilers/bin/nvfortran
+compiler.nvfortran_x86_25_5.semver=25.5
+
 ###############################
 # GCC Cross-Compilers
 group.cross.compilers=&gccarm:&gccaarch64:&ppcs:&gccrvs:&gccmips:&gccmips64:&gccmipsel:&gccmips64el:&gccs390x:&gccriscv:&gccriscv64:&gccloongarch64:&gccsparc:&gccsparc64:&gccsparcleon:&gcchppa:&gcctricore
diff --git a/lib/app/controllers.ts b/lib/app/controllers.ts
index b573ae94f..01022fce6 100644
--- a/lib/app/controllers.ts
+++ b/lib/app/controllers.ts
@@ -40,6 +40,7 @@ export interface ApiControllers {
     assemblyDocumentationController: AssemblyDocumentationController;
     formattingController: FormattingController;
     noScriptController: NoScriptController;
+    healthcheckController: HealthcheckController;
 }
 
 /**
@@ -68,7 +69,12 @@ export function setupControllersAndHandlers(
     const noScriptController = new NoScriptController(compileHandler, formDataHandler);
 
     // Initialize healthcheck controller (handled separately in web server setup)
-    new HealthcheckController(compilationQueue, healthCheckFilePath, compileHandler, isExecutionWorker);
+    const healthcheckController = new HealthcheckController(
+        compilationQueue,
+        healthCheckFilePath,
+        compileHandler,
+        isExecutionWorker,
+    );
 
     return {
         siteTemplateController,
@@ -76,5 +82,6 @@ export function setupControllersAndHandlers(
         assemblyDocumentationController,
         formattingController,
         noScriptController,
+        healthcheckController,
     };
 }
diff --git a/lib/app/main.ts b/lib/app/main.ts
index db3cca5c2..eb8b98244 100644
--- a/lib/app/main.ts
+++ b/lib/app/main.ts
@@ -116,6 +116,7 @@ export async function initialiseApplication(options: ApplicationOptions): Promis
         ),
         clientOptionsHandler: clientOptionsHandler,
         storageSolution: storageSolution,
+        healthcheckController: controllers.healthcheckController,
     };
 
     const {webServer, router, renderConfig, renderGoldenLayout} = await setupWebServer(
diff --git a/lib/app/server-config.ts b/lib/app/server-config.ts
index ebd79712d..dc4e1c219 100644
--- a/lib/app/server-config.ts
+++ b/lib/app/server-config.ts
@@ -229,10 +229,8 @@ export function setupBasicRoutes(
  * Middleware for content security policy
  */
 function csp(req: Request, res: Response, next: NextFunction) {
-    res.setHeader(
-        'Content-Security-Policy',
-        "default-src 'self' 'unsafe-eval' 'unsafe-inline' *.godbolt.org *.compiler-explorer.com *.googleapis.com *.hcaptcha.com *.cloudflare.com cdn.jsdelivr.net; frame-ancestors *",
-    );
+    // TODO: Consider if CSP should be re-enabled
+    // res.setHeader('Content-Security-Policy', `default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; connect-src 'self'; frame-src 'self';`);
     next();
 }
 
diff --git a/lib/app/server.interfaces.ts b/lib/app/server.interfaces.ts
index 428ed7a66..a32bdb3ed 100644
--- a/lib/app/server.interfaces.ts
+++ b/lib/app/server.interfaces.ts
@@ -24,6 +24,7 @@
 
 import type {Express, Request, Response, Router} from 'express';
 import type {GoldenLayoutRootStruct} from '../clientstate-normalizer.js';
+import type {HttpController} from '../handlers/api/controller.interfaces.js';
 import type {ShortLinkMetaData} from '../handlers/handler.interfaces.js';
 import type {ClientOptionsSource} from '../options-handler.interfaces.js';
 import type {PropertyGetter} from '../properties.interfaces.js';
@@ -86,4 +87,5 @@ export interface ServerDependencies {
     sponsorConfig: Sponsors;
     clientOptionsHandler: ClientOptionsSource;
     storageSolution: string;
+    healthcheckController: HttpController;
 }
diff --git a/lib/app/server.ts b/lib/app/server.ts
index ae6dd5666..da8cf3f91 100644
--- a/lib/app/server.ts
+++ b/lib/app/server.ts
@@ -69,6 +69,9 @@ export async function setupWebServer(
         dependencies,
     );
 
+    // Add healthcheck before logging middleware to prevent excessive log entries
+    webServer.use(dependencies.healthcheckController.createRouter());
+
     setupBaseServerConfig(options, renderConfig, webServer, router);
     setupLoggingMiddleware(appArgs.devMode, router);
 


Test patch:
diff --git a/test/app/rendering-tests.ts b/test/app/rendering-tests.ts
index 7d93c2b5c..793225194 100644
--- a/test/app/rendering-tests.ts
+++ b/test/app/rendering-tests.ts
@@ -22,7 +22,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 
-import type {NextFunction, Request, Response} from 'express';
+import express, {type NextFunction, type Request, type Response} from 'express';
 import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest';
 
 import {createRenderHandlers} from '../../lib/app/rendering.js';
@@ -94,6 +94,9 @@ describe('Rendering Module', () => {
                     getJSON: vi.fn().mockReturnValue('{}'),
                 },
                 storageSolution: 'localStorage',
+                healthcheckController: {
+                    createRouter: vi.fn().mockReturnValue(express.Router()),
+                },
                 sponsorConfig: {
                     getLevels: vi.fn().mockReturnValue([]),
                     pickTopIcons: vi.fn().mockReturnValue([]),
diff --git a/test/app/server-tests.ts b/test/app/server-tests.ts
index 5d059d555..e4a322766 100644
--- a/test/app/server-tests.ts
+++ b/test/app/server-tests.ts
@@ -55,7 +55,7 @@ function createMockAppArgs(overrides: Partial<AppArguments> = {}): AppArguments
     };
 }
 
-import type {Request, Response} from 'express';
+import express, {type Request, type Response} from 'express';
 import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest';
 
 import type {AppArguments} from '../../lib/app.interfaces.js';
@@ -114,6 +114,9 @@ describe('Server Module', () => {
                     if (key === 'allowedShortUrlHostRe') return '.*';
                     return '';
                 }),
+                healthcheckController: {
+                    createRouter: vi.fn().mockReturnValue(express.Router()),
+                },
                 sponsorConfig: {
                     getLevels: vi.fn().mockReturnValue([]),
                     pickTopIcons: vi.fn().mockReturnValue([]),