llvm-wasm
llvm-wasm copied to clipboard
How to compile C++?
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?
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")