# WACK (WebAssembly Clang Kit) is an experimental WebAssembly standalone
# toolchain. It is used on the build waterfall for testing various toolchain
# components (e.g. clang, LLVM, lld) and engines (e.g. V8 and JSC) but is not
# an official or productionized tool.


# Set up the CMake include path to find the WACK platform file. Following the
# same convention as the CMake distribution suppresses noisy CMake warnings:
# "System is unknown to cmake"
# Module path modification can't be done from the command line, so this file
# exists to do that.

set(WASM_SDKROOT ${CMAKE_CURRENT_LIST_DIR})
list(APPEND CMAKE_MODULE_PATH "${WASM_SDKROOT}/cmake/Modules")

# This has to go before we set CMAKE_SYSTEM_NAME because the default c compiler
# gets set before the platform file is included
if (CMAKE_HOST_WIN32)
  set(EXE_SUFFIX ".exe")
else()
  set(EXE_SUFFIX "")
endif()
if ("${CMAKE_C_COMPILER}" STREQUAL "")
  set(CMAKE_C_COMPILER ${WASM_SDKROOT}/bin/wasm32-wasi-clang${EXE_SUFFIX})
endif()
if ("${CMAKE_CXX_COMPILER}" STREQUAL "")
  set(CMAKE_CXX_COMPILER ${WASM_SDKROOT}/bin/wasm32-wasi-clang++${EXE_SUFFIX})
endif()
if ("${CMAKE_AR}" STREQUAL "")
  set(CMAKE_AR ${WASM_SDKROOT}/bin/llvm-ar${EXE_SUFFIX} CACHE FILEPATH "llvm ar")
endif()
if ("${CMAKE_RANLIB}" STREQUAL "")
 set(CMAKE_RANLIB ${WASM_SDKROOT}/bin/llvm-ranlib${EXE_SUFFIX} CACHE FILEPATH "llvm ranlib")
endif()

# Include the platform file
set(CMAKE_SYSTEM_NAME Wasi)
