From 5ec87b2ba7cb6643572cc02db83aaa4d3eaaa700 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 25 Nov 2025 14:13:20 -0500 Subject: [PATCH] Emscripten: Provide CMAKE__COMPILER_ARCHITECTURE_ID Extend commit 96d9b94a98 (Emscripten: Add platform modules, 2025-05-16, v4.2.0-rc1~607^2~3) to account for commit 7f0f382c55 (Provide CMAKE__COMPILER_ARCHITECTURE_ID on more compilers, 2025-03-24, v4.1.0-rc1~499^2). Fixes: #27425 --- Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst | 6 ++++++ Modules/CMakeCompilerABI.h | 4 ++++ Modules/CMakeFortranCompilerABI.F | 4 ++++ Modules/CMakeFortranCompilerABI.F90 | 4 ++++ Modules/Internal/CMakeParseCompilerArchitectureId.cmake | 4 ++++ Tests/RunCMake/Emscripten/C-enable-stdout.txt | 1 + Tests/RunCMake/Emscripten/C-enable.cmake | 1 + 7 files changed, 24 insertions(+) diff --git a/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst b/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst index ff54da29c4..c6853e3654 100644 --- a/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst +++ b/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst @@ -126,6 +126,12 @@ targets a UNIX platform. ``sw_64`` Sunway +``wasm32`` + WebAssembly (Emscripten) 32-bit + +``wasm64`` + WebAssembly (Emscripten) 64-bit + ``x86_64`` Intel 64-bit diff --git a/Modules/CMakeCompilerABI.h b/Modules/CMakeCompilerABI.h index 40c5be4b3a..bd90ea241c 100644 --- a/Modules/CMakeCompilerABI.h +++ b/Modules/CMakeCompilerABI.h @@ -144,6 +144,10 @@ static unsigned short const info_byte_order_little_endian[] = { # else # define ARCHITECTURE_ID "ppc" # endif +#elif defined(__wasm64) || defined(__wasm64__) +# define ARCHITECTURE_ID "wasm64" +#elif defined(__wasm32) || defined(__wasm32__) +# define ARCHITECTURE_ID "wasm32" #endif /* Construct the string literal in pieces to prevent the source from diff --git a/Modules/CMakeFortranCompilerABI.F b/Modules/CMakeFortranCompilerABI.F index e9e05528e6..ed827305e2 100644 --- a/Modules/CMakeFortranCompilerABI.F +++ b/Modules/CMakeFortranCompilerABI.F @@ -143,6 +143,10 @@ # else PRINT *, 'INFO:arch[ppc]' # endif +#elif defined(__wasm64) || defined(__wasm64__) + PRINT *, 'INFO:arch[wasm64]' +#elif defined(__wasm32) || defined(__wasm32__) + PRINT *, 'INFO:arch[wasm32]' #endif PRINT *, 'ABI Detection' diff --git a/Modules/CMakeFortranCompilerABI.F90 b/Modules/CMakeFortranCompilerABI.F90 index 0246d2a66c..1dfd560961 100644 --- a/Modules/CMakeFortranCompilerABI.F90 +++ b/Modules/CMakeFortranCompilerABI.F90 @@ -151,6 +151,10 @@ PRINT *, 'INFO:arch[ppcle]' # else PRINT *, 'INFO:arch[ppc]' # endif +#elif defined(__wasm64) || defined(__wasm64__) +PRINT *, 'INFO:arch[wasm64]' +#elif defined(__wasm32) || defined(__wasm32__) +PRINT *, 'INFO:arch[wasm32]' #endif PRINT *, 'ABI Detection' diff --git a/Modules/Internal/CMakeParseCompilerArchitectureId.cmake b/Modules/Internal/CMakeParseCompilerArchitectureId.cmake index e5ee90e7e5..2f3b9b9ad9 100644 --- a/Modules/Internal/CMakeParseCompilerArchitectureId.cmake +++ b/Modules/Internal/CMakeParseCompilerArchitectureId.cmake @@ -69,6 +69,10 @@ function(cmake_parse_compiler_architecture_id triple arch_id_var) set(ARCHITECTURE_ID "ppcle") elseif(_dumpmachine_triple MATCHES "^(powerpc|ppc)-") set(ARCHITECTURE_ID "ppc") + elseif(_dumpmachine_triple MATCHES "^wasm64-") + set(ARCHITECTURE_ID "wasm64") + elseif(_dumpmachine_triple MATCHES "^wasm32-") + set(ARCHITECTURE_ID "wasm32") else() set(ARCHITECTURE_ID "") endif() diff --git a/Tests/RunCMake/Emscripten/C-enable-stdout.txt b/Tests/RunCMake/Emscripten/C-enable-stdout.txt index c14ab8a3a1..8843cbe738 100644 --- a/Tests/RunCMake/Emscripten/C-enable-stdout.txt +++ b/Tests/RunCMake/Emscripten/C-enable-stdout.txt @@ -1,2 +1,3 @@ -- CMAKE_C_BYTE_ORDER='LITTLE_ENDIAN' +-- CMAKE_C_COMPILER_ARCHITECTURE_ID='wasm(32|64)' -- CMAKE_C_SIZEOF_DATA_PTR='[1-9][0-9]*' diff --git a/Tests/RunCMake/Emscripten/C-enable.cmake b/Tests/RunCMake/Emscripten/C-enable.cmake index 7878def517..4fa3e51176 100644 --- a/Tests/RunCMake/Emscripten/C-enable.cmake +++ b/Tests/RunCMake/Emscripten/C-enable.cmake @@ -1,6 +1,7 @@ enable_language(C) foreach(var IN ITEMS CMAKE_C_BYTE_ORDER + CMAKE_C_COMPILER_ARCHITECTURE_ID CMAKE_C_SIZEOF_DATA_PTR ) message(STATUS "${var}='${${var}}'")