Skip to content

Commit fe1dee6

Browse files
committed
Enable support for Emscripten in CMake
1 parent 0d382e1 commit fe1dee6

File tree

1 file changed

+43
-1
lines changed

1 file changed

+43
-1
lines changed

CMakeLists.txt

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,15 @@ ELSEIF(CMAKE_GENERATOR MATCHES "^Visual Studio " AND CMAKE_GENERATOR_PLATFORM)
8989
ELSE()
9090
MESSAGE(FATAL_ERROR "Unsupported Visual Studio architecture \"${CMAKE_GENERATOR_PLATFORM}\"")
9191
ENDIF()
92+
ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
93+
SET(XNNPACK_TARGET_PROCESSOR "wasm")
94+
SET(XNNPACK_ENABLE_RISCV_VECTOR OFF)
95+
IF(CMAKE_C_FLAGS MATCHES "-msimd128" OR CMAKE_CXX_FLAGS MATCHES "-msimd128")
96+
SET(XNNPACK_TARGET_PROCESSOR "wasmsimd")
97+
ENDIF()
98+
IF(CMAKE_C_FLAGS MATCHES "-mrelaxed-simd" OR CMAKE_CXX_FLAGS MATCHES "-mrelaxed-simd")
99+
SET(XNNPACK_TARGET_PROCESSOR "wasmrelaxedsimd")
100+
ENDIF()
92101
ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^i[3-7]86$")
93102
SET(XNNPACK_TARGET_PROCESSOR "x86")
94103
ELSEIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64")
@@ -359,7 +368,7 @@ ENDIF()
359368
# ---[ Build flags
360369
IF(NOT CMAKE_SYSTEM_NAME)
361370
MESSAGE(FATAL_ERROR "CMAKE_SYSTEM_NAME not defined")
362-
ELSEIF(NOT CMAKE_SYSTEM_NAME MATCHES "^(Android|Darwin|iOS|Linux|Windows|CYGWIN|MSYS|QURT)$")
371+
ELSEIF(NOT CMAKE_SYSTEM_NAME MATCHES "^(Android|Darwin|iOS|Linux|Windows|CYGWIN|MSYS|QURT|Emscripten)$")
363372
MESSAGE(FATAL_ERROR "Unrecognized CMAKE_SYSTEM_NAME value \"${CMAKE_SYSTEM_NAME}\"")
364373
ENDIF()
365374
IF(CMAKE_SYSTEM_NAME MATCHES "Windows")
@@ -802,6 +811,30 @@ IF(XNNPACK_TARGET_PROCESSOR MATCHES "^riscv")
802811
LIST(APPEND PROD_MICROKERNEL_SRCS ${PROD_RVVFP16ARITH_MICROKERNEL_SRCS})
803812
ENDIF()
804813
ENDIF()
814+
IF(XNNPACK_TARGET_PROCESSOR MATCHES "wasm")
815+
LIST(APPEND PROD_MICROKERNEL_SRCS ${PROD_WASM_MICROKERNEL_SRCS})
816+
LIST(APPEND NON_PROD_MICROKERNEL_SRCS ${NON_PROD_WASM_MICROKERNEL_SRCS})
817+
IF(XNNPACK_ENABLE_ASSEMBLY)
818+
LIST(APPEND PROD_MICROKERNEL_SRCS ${PROD_WASM32_ASM_MICROKERNEL_SRCS})
819+
LIST(APPEND NON_PROD_MICROKERNEL_SRCS ${NON_WASM32_ASM_MICROKERNEL_SRCS})
820+
ENDIF()
821+
ENDIF()
822+
IF(XNNPACK_TARGET_PROCESSOR STREQUAL "wasmsimd")
823+
LIST(APPEND PROD_MICROKERNEL_SRCS ${PROD_WASMSIMD_MICROKERNEL_SRCS})
824+
LIST(APPEND NON_PROD_MICROKERNEL_SRCS ${NON_PROD_WASMSIMD_MICROKERNEL_SRCS})
825+
IF(XNNPACK_ENABLE_ASSEMBLY)
826+
LIST(APPEND PROD_MICROKERNEL_SRCS ${PROD_WASMSIMD32_ASM_MICROKERNEL_SRCS})
827+
LIST(APPEND NON_PROD_MICROKERNEL_SRCS ${NON_WASMSIMD32_ASM_MICROKERNEL_SRCS})
828+
ENDIF()
829+
ENDIF()
830+
IF(XNNPACK_TARGET_PROCESSOR STREQUAL "wasmrelaxedsimd")
831+
LIST(APPEND PROD_MICROKERNEL_SRCS ${PROD_WASMRELAXEDSIMD_MICROKERNEL_SRCS})
832+
LIST(APPEND NON_PROD_MICROKERNEL_SRCS ${NON_PROD_WASMRELAXEDSIMD_MICROKERNEL_SRCS})
833+
IF(XNNPACK_ENABLE_ASSEMBLY)
834+
LIST(APPEND PROD_MICROKERNEL_SRCS ${PROD_WASMRELAXEDSIMD32_ASM_MICROKERNEL_SRCS})
835+
LIST(APPEND NON_PROD_MICROKERNEL_SRCS ${NON_WASMRELAXEDSIMD32_ASM_MICROKERNEL_SRCS})
836+
ENDIF()
837+
ENDIF()
805838

806839
SET(ALL_MICROKERNEL_SRCS ${PROD_MICROKERNEL_SRCS} ${NON_PROD_MICROKERNEL_SRCS})
807840

@@ -1032,6 +1065,15 @@ IF(XNNPACK_TARGET_PROCESSOR MATCHES "^x86(_64)?$")
10321065
ENDIF()
10331066
ENDIF()
10341067
ENDIF()
1068+
IF(XNNPACK_TARGET_PROCESSOR STREQUAL "wasm")
1069+
SET_PROPERTY(SOURCE ${ALL_WASM_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -fno-fast-math -fno-math-errno ")
1070+
ENDIF()
1071+
IF(XNNPACK_TARGET_PROCESSOR STREQUAL "wasmsimd")
1072+
SET_PROPERTY(SOURCE ${ALL_WASMSIMD_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -fno-fast-math -fno-math-errno ")
1073+
ENDIF()
1074+
IF(XNNPACK_TARGET_PROCESSOR STREQUAL "wasmrelaxedsimd")
1075+
SET_PROPERTY(SOURCE ${ALL_WASMRELAXEDSIMD_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS " -fno-fast-math -fno-math-errno ")
1076+
ENDIF()
10351077

10361078
# Set `XNN_LOG_LEVEL` transitively for all targets that depend on `logging`.
10371079
TARGET_COMPILE_DEFINITIONS(logging PUBLIC "XNN_LOG_LEVEL=$<$<CONFIG:Debug>:5>$<$<NOT:$<CONFIG:Debug>>:0>")

0 commit comments

Comments
 (0)