llvm-wasm icon indicating copy to clipboard operation
llvm-wasm copied to clipboard

How to compile C++?

Open ElysiaEgo opened this issue 1 year ago • 3 comments

I have compiled a working LLVM 18.1.4 with WASI 22 and emscripten 3.1.58. However, I cannot find C++ header files and libstdc++ for C++ to work. Any help?

ElysiaEgo avatar May 03 '24 17:05 ElysiaEgo

I got it working but not sure if it works perfectly. Only tested with helloworld.
Using emscripten upstream include header file for clang sysroot, and wasi sysroot for lld sysroot.
Build command

emcmake cmake -G Ninja -S llvm -B build \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX=install \
  -DCMAKE_CROSSCOMPILING=True \
  -DCMAKE_C_FLAGS="" \
  -DCMAKE_CXX_FLAGS="-Dwait4=__syscall_wait4" \
  -DLLVM_TARGET_ARCH=wasm32-emscripten \
  -DLLVM_DEFAULT_TARGET_TRIPLE=wasm32-wasi \
  -DLLVM_ENABLE_PROJECTS="clang;lld" \
  -DLLVM_TARGETS_TO_BUILD=WebAssembly \
  -DLLVM_ENABLE_THREADS=OFF \
  -DLLVM_TABLEGEN=$PWD/build-host/bin/llvm-tblgen\
  -DLLVM_ENABLE_PIC=OFF\
  -DLLVM_INCLUDE_UTILS=OFF \
  -DLLVM_ENABLE_OCAMLDOC=OFF\
  -DLLVM_ENABLE_BACKTRACES=OFF\
  -DLLVM_INCLUDE_TESTS=OFF \
  -DLLVM_INCLUDE_EXAMPLES=OFF \
  -DLLVM_INCLUDE_BENCHMARKS=OFF \
  -DLLVM_CCACHE_BUILD=ON \
  -DLLVM_PARALLEL_LINK_JOBS=6

Changes to llvm/CMakeLists.txt
Note that setting $LDFLAGS is not working and may cause issues when llvm try to bootstrap

set_target_properties(lld PROPERTIES LINK_FLAGS "--preload-file=../../lld-sysroot@/ -sNO_INVOKE_RUN -sEXIT_RUNTIME -sINITIAL_MEMORY=128MB -sALLOW_MEMORY_GROWTH -sEXPORTED_RUNTIME_METHODS=FS,callMain -sMODULARIZE -sEXPORT_ES6 -sWASM_BIGINT")
set_target_properties(clang PROPERTIES LINK_FLAGS "--preload-file=../../clang-sysroot@/ -sNO_INVOKE_RUN -sEXIT_RUNTIME -sINITIAL_MEMORY=128MB -sALLOW_MEMORY_GROWTH -sEXPORTED_RUNTIME_METHODS=FS,callMain -sMODULARIZE -sEXPORT_ES6 -sWASM_BIGINT")

ElysiaEgo avatar May 04 '24 22:05 ElysiaEgo