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}}'")