wasm32-wasi-toolchain.cmake 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # Cross-compilation file for WebAssembly with WASI.
  2. # To use, pass -DCMAKE_TOOLCHAIN_FILE=cmake/wasm32-wasi-toolchain.cmake in your CMake command line.
  3. # You'll also need to specify a sysroot directory with -DHYDROGEN_WASM32_WASI_SYSROOT_DIR=XXX.
  4. cmake_minimum_required(VERSION 3.12)
  5. set(project_setting_prefix HYDROGEN)
  6. set(setting_prefix "${project_setting_prefix}_WASM32_WASI")
  7. function(get_setting setting_name setting_type setting_description)
  8. string(TOUPPER "${setting_prefix}_${setting_name}" setting_external_name)
  9. set("${setting_external_name}" "" CACHE "${setting_type}" "${setting_description}")
  10. set("${setting_name}" "${${setting_external_name}}" PARENT_SCOPE)
  11. endfunction()
  12. # Sysroot setting
  13. get_setting(sysroot_dir STRING "Directory containing the wasm32-wasi sysroot.")
  14. # Locate toolchain programs
  15. set(program_prefix "${setting_prefix}_PROGRAM")
  16. function(find_in_toolchain program_name)
  17. string(TOUPPER "${program_prefix}_${program_name}" program_external_name)
  18. string(REPLACE "_" "-" program_file_name "${program_name}")
  19. find_program("${program_external_name}" "${program_file_name}")
  20. if("${${program_external_name}}" STREQUAL "${program_external_name}-NOTFOUND")
  21. message(FATAL_ERROR "Couldn't find toolchain program ${program_file_name}")
  22. else()
  23. set("${program_name}" "${${program_external_name}}" PARENT_SCOPE)
  24. endif()
  25. endfunction()
  26. find_in_toolchain(clang)
  27. find_in_toolchain(llvm_ranlib)
  28. find_in_toolchain(llvm_ar)
  29. find_in_toolchain(llvm_nm)
  30. find_in_toolchain(llvm_strip)
  31. # Configure CMake toolchain settings
  32. set(CMAKE_SYSTEM_NAME Generic)
  33. set(CMAKE_C_COMPILER "${clang}")
  34. set(CMAKE_ASM_COMPILER "${clang}")
  35. set(CMAKE_RANLIB "${llvm_ranlib}")
  36. set(CMAKE_AR "${llvm_ar}")
  37. set(CMAKE_NM "${llvm_nm}")
  38. set(CMAKE_STRIP "${llvm_strip}")
  39. set(CMAKE_C_OUTPUT_EXTENSION .o)
  40. set(CMAKE_ASM_OUTPUT_EXTENSION .o)
  41. # Set compile flags
  42. string(CONCAT CMAKE_C_FLAGS " -DED25519_NONDETERMINISTIC=1 --target=wasm32-wasi"
  43. " --sysroot=${sysroot_dir} -Wl,--stack-first")