2020
2121build/llvm.BUILT :
2222 mkdir -p build/llvm
23- cd build/llvm; cmake -G Ninja \
23+ cmake -B build/llvm -G Ninja \
2424 -DCMAKE_BUILD_TYPE=MinSizeRel \
2525 -DCMAKE_INSTALL_PREFIX=$(PREFIX ) \
2626 -DLLVM_TARGETS_TO_BUILD=WebAssembly \
@@ -54,12 +54,14 @@ build/llvm.BUILT:
5454build/wasi-libc.BUILT : build/llvm.BUILT
5555 $(MAKE ) -C $(ROOT_DIR ) /src/wasi-libc \
5656 WASM_CC=$(PREFIX ) /bin/clang \
57- SYSROOT=$(PREFIX ) /share/wasi-sysroot
57+ SYSROOT=$(PREFIX ) /share/wasi-sysroot \
58+ CLANG_VERSION=$(CLANG_VERSION )
5859 touch build/wasi-libc.BUILT
5960
6061build/compiler-rt.BUILT : build/llvm.BUILT
62+ # Do the conventional build, and install it.
6163 mkdir -p build/compiler-rt
62- cd build/compiler-rt; cmake -G Ninja \
64+ cmake -B build/compiler-rt -G Ninja \
6365 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
6466 -DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR ) /wasi-sdk.cmake \
6567 -DCOMPILER_RT_BAREMETAL_BUILD=On \
@@ -69,75 +71,110 @@ build/compiler-rt.BUILT: build/llvm.BUILT
6971 -DCOMPILER_RT_ENABLE_IOS=OFF \
7072 -DCOMPILER_RT_DEFAULT_TARGET_ONLY=On \
7173 -DWASI_SDK_PREFIX=$(PREFIX ) \
72- -DCMAKE_C_FLAGS=" -O1 $( DEBUG_PREFIX_MAP) " \
74+ -DCMAKE_C_FLAGS=" $( DEBUG_PREFIX_MAP) " \
7375 -DLLVM_CONFIG_PATH=$(ROOT_DIR ) /build/llvm/bin/llvm-config \
7476 -DCOMPILER_RT_OS_DIR=wasi \
7577 -DCMAKE_INSTALL_PREFIX=$(PREFIX ) /lib/clang/$(CLANG_VERSION ) / \
7678 -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
7779 $(LLVM_PROJ_DIR ) /compiler-rt/lib/builtins
7880 ninja $(NINJA_FLAGS ) -v -C build/compiler-rt install
81+ # Install clang-provided headers.
7982 cp -R $(ROOT_DIR ) /build/llvm/lib/clang $(PREFIX ) /lib/
8083 touch build/compiler-rt.BUILT
8184
85+ # Flags common to both the non-LTO and LTO builds of libcxx.
86+ LIBCXX_CMAKE_FLAGS = \
87+ -DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR ) /wasi-sdk.cmake \
88+ -DLLVM_CONFIG_PATH=$(ROOT_DIR ) /build/llvm/bin/llvm-config \
89+ -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
90+ -DLIBCXX_ENABLE_THREADS:BOOL=OFF \
91+ -DLIBCXX_HAS_PTHREAD_API:BOOL=OFF \
92+ -DLIBCXX_HAS_EXTERNAL_THREAD_API:BOOL=OFF \
93+ -DLIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \
94+ -DLIBCXX_HAS_WIN32_THREAD_API:BOOL=OFF \
95+ -DCMAKE_BUILD_TYPE=RelWithDebugInfo \
96+ -DLIBCXX_ENABLE_SHARED:BOOL=OFF \
97+ -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY:BOOL=OFF \
98+ -DLIBCXX_ENABLE_EXCEPTIONS:BOOL=OFF \
99+ -DLIBCXX_ENABLE_FILESYSTEM:BOOL=OFF \
100+ -DLIBCXX_CXX_ABI=libcxxabi \
101+ -DLIBCXX_CXX_ABI_INCLUDE_PATHS=$(LLVM_PROJ_DIR ) /libcxxabi/include \
102+ -DLIBCXX_HAS_MUSL_LIBC:BOOL=ON \
103+ -DLIBCXX_ABI_VERSION=2 \
104+ -DWASI_SDK_PREFIX=$(PREFIX ) \
105+ -DCMAKE_C_FLAGS="$(DEBUG_PREFIX_MAP ) " \
106+ -DCMAKE_CXX_FLAGS="$(DEBUG_PREFIX_MAP ) " \
107+ --debug-trycompile
108+
82109build/libcxx.BUILT : build/llvm.BUILT build/compiler-rt.BUILT build/wasi-libc.BUILT
110+ # Do the conventional build.
83111 mkdir -p build/libcxx
84- cd build/libcxx; cmake -G Ninja \
85- -DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR ) /wasi-sdk.cmake \
86- -DLLVM_CONFIG_PATH=$(ROOT_DIR ) /build/llvm/bin/llvm-config \
87- -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
88- -DLIBCXX_ENABLE_THREADS:BOOL=OFF \
89- -DLIBCXX_HAS_PTHREAD_API:BOOL=OFF \
90- -DLIBCXX_HAS_EXTERNAL_THREAD_API:BOOL=OFF \
91- -DLIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \
92- -DLIBCXX_HAS_WIN32_THREAD_API:BOOL=OFF \
93- -DCMAKE_BUILD_TYPE=RelWithDebugInfo \
94- -DLIBCXX_ENABLE_SHARED:BOOL=OFF \
95- -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY:BOOL=OFF \
96- -DLIBCXX_ENABLE_EXCEPTIONS:BOOL=OFF \
97- -DLIBCXX_ENABLE_FILESYSTEM:BOOL=OFF \
98- -DLIBCXX_CXX_ABI=libcxxabi \
99- -DLIBCXX_CXX_ABI_INCLUDE_PATHS=$(LLVM_PROJ_DIR ) /libcxxabi/include \
100- -DLIBCXX_HAS_MUSL_LIBC:BOOL=ON \
101- -DLIBCXX_ABI_VERSION=2 \
102- -DLIBCXX_LIBDIR_SUFFIX=/wasm32-wasi \
103- -DWASI_SDK_PREFIX=$(PREFIX ) \
104- -DCMAKE_C_FLAGS=" $( DEBUG_PREFIX_MAP) " \
105- -DCMAKE_CXX_FLAGS=" $( DEBUG_PREFIX_MAP) " \
106- --debug-trycompile \
107- $(LLVM_PROJ_DIR ) /libcxx
112+ cmake -B build/libcxx -G Ninja $(LIBCXX_CMAKE_FLAGS ) \
113+ -DCMAKE_C_FLAGS=" $( DEBUG_PREFIX_MAP) " \
114+ -DCMAKE_CXX_FLAGS=" $( DEBUG_PREFIX_MAP) " \
115+ -DLIBCXX_LIBDIR_SUFFIX =/wasm32-wasi \
116+ $(LLVM_PROJ_DIR ) /libcxx
117+ ninja $(NINJA_FLAGS) -v -C build/libcxx
118+ # Now build the same thing but with LTO enabled.
119+ mkdir -p build/libcxx.llvm-lto
120+ cmake -B build/libcxx.llvm-lto -G Ninja $(LIBCXX_CMAKE_FLAGS) \
121+ -DCMAKE_C_FLAGS="-flto $(DEBUG_PREFIX_MAP)" \
122+ -DCMAKE_CXX_FLAGS="-flto $(DEBUG_PREFIX_MAP)" \
123+ -DLIBCXX_LIBDIR_SUFFIX =/wasm32-wasi/llvm-lto/$(CLANG_VERSION ) \
124+ $(LLVM_PROJ_DIR ) /libcxx
125+ ninja $(NINJA_FLAGS) -v -C build/libcxx.llvm-lto
126+ # Do the install.
108127 ninja $(NINJA_FLAGS) -v -C build/libcxx install
128+ ninja $(NINJA_FLAGS) -v -C build/libcxx.llvm-lto install
109129 touch build/libcxx.BUILT
110130
131+ # Flags common to both the non-LTO and LTO builds of libcxxabi.
132+ LIBCXXABI_CMAKE_FLAGS = \
133+ -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
134+ -DCMAKE_CXX_COMPILER_WORKS=ON \
135+ -DCMAKE_C_COMPILER_WORKS=ON \
136+ -DLIBCXXABI_ENABLE_EXCEPTIONS:BOOL=OFF \
137+ -DLIBCXXABI_ENABLE_SHARED:BOOL=OFF \
138+ -DLIBCXXABI_SILENT_TERMINATE:BOOL=ON \
139+ -DLIBCXXABI_ENABLE_THREADS:BOOL=OFF \
140+ -DLIBCXXABI_HAS_PTHREAD_API:BOOL=OFF \
141+ -DLIBCXXABI_HAS_EXTERNAL_THREAD_API:BOOL=OFF \
142+ -DLIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \
143+ -DLIBCXXABI_HAS_WIN32_THREAD_API:BOOL=OFF \
144+ $(if $(patsubst 8.% ,,$(CLANG_VERSION ) ) ,-DLIBCXXABI_ENABLE_PIC:BOOL=OFF,) \
145+ -DCXX_SUPPORTS_CXX11=ON \
146+ -DLLVM_COMPILER_CHECKED=ON \
147+ -DCMAKE_BUILD_TYPE=RelWithDebugInfo \
148+ -DLIBCXXABI_LIBCXX_PATH=$(LLVM_PROJ_DIR ) /libcxx \
149+ -DLIBCXXABI_LIBCXX_INCLUDES=$(PREFIX ) /share/wasi-sysroot/include/c++/v1 \
150+ -DLLVM_CONFIG_PATH=$(ROOT_DIR ) /build/llvm/bin/llvm-config \
151+ -DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR ) /wasi-sdk.cmake \
152+ -DWASI_SDK_PREFIX=$(PREFIX ) \
153+ -DCMAKE_C_FLAGS="$(DEBUG_PREFIX_MAP ) -I$(PREFIX ) /share/wasi-sysroot/include" \
154+ -DCMAKE_CXX_FLAGS="$(DEBUG_PREFIX_MAP ) -I$(PREFIX ) /share/wasi-sysroot/include/c++/v1" \
155+ -DUNIX:BOOL=ON \
156+ --debug-trycompile
157+
111158build/libcxxabi.BUILT : build/libcxx.BUILT build/llvm.BUILT
159+ # Do the conventional build.
112160 mkdir -p build/libcxxabi
113- cd build/libcxxabi; cmake -G Ninja \
114- -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
115- -DCMAKE_CXX_COMPILER_WORKS=ON \
116- -DCMAKE_C_COMPILER_WORKS=ON \
117- -DLIBCXXABI_ENABLE_EXCEPTIONS:BOOL=OFF \
118- -DLIBCXXABI_ENABLE_SHARED:BOOL=OFF \
119- -DLIBCXXABI_SILENT_TERMINATE:BOOL=ON \
120- -DLIBCXXABI_ENABLE_THREADS:BOOL=OFF \
121- -DLIBCXXABI_HAS_PTHREAD_API:BOOL=OFF \
122- -DLIBCXXABI_HAS_EXTERNAL_THREAD_API:BOOL=OFF \
123- -DLIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \
124- -DLIBCXXABI_HAS_WIN32_THREAD_API:BOOL=OFF \
125- $(if $(patsubst 8.% ,,$(CLANG_VERSION ) ) ,-DLIBCXXABI_ENABLE_PIC:BOOL=OFF,) \
126- -DCXX_SUPPORTS_CXX11=ON \
127- -DLLVM_COMPILER_CHECKED=ON \
128- -DCMAKE_BUILD_TYPE=RelWithDebugInfo \
129- -DLIBCXXABI_LIBCXX_PATH=$(LLVM_PROJ_DIR ) /libcxx \
130- -DLIBCXXABI_LIBCXX_INCLUDES=$(PREFIX ) /share/wasi-sysroot/include/c++/v1 \
131- -DLLVM_CONFIG_PATH=$(ROOT_DIR ) /build/llvm/bin/llvm-config \
132- -DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR ) /wasi-sdk.cmake \
133- -DLIBCXXABI_LIBDIR_SUFFIX=/wasm32-wasi \
134- -DWASI_SDK_PREFIX=$(PREFIX ) \
135- -DCMAKE_C_FLAGS=" $( DEBUG_PREFIX_MAP) -I$( PREFIX) /share/wasi-sysroot/include" \
136- -DCMAKE_CXX_FLAGS=" $( DEBUG_PREFIX_MAP) -I$( PREFIX) /share/wasi-sysroot/include/c++/v1" \
137- -DUNIX:BOOL=ON \
138- --debug-trycompile \
139- $(LLVM_PROJ_DIR ) /libcxxabi
161+ cmake -B build/libcxxabi -G Ninja $(LIBCXXABI_CMAKE_FLAGS ) \
162+ -DCMAKE_C_FLAGS=" $( DEBUG_PREFIX_MAP) " \
163+ -DCMAKE_CXX_FLAGS=" $( DEBUG_PREFIX_MAP) " \
164+ -DLIBCXXABI_LIBDIR_SUFFIX=/wasm32-wasi \
165+ $(LLVM_PROJ_DIR ) /libcxxabi
166+ ninja $(NINJA_FLAGS ) -v -C build/libcxxabi
167+ # Now build the same thing but with LTO enabled.
168+ mkdir -p build/libcxxabi.llvm-lto
169+ cmake -B build/libcxxabi.llvm-lto -G Ninja $(LIBCXXABI_CMAKE_FLAGS ) \
170+ -DCMAKE_C_FLAGS=" -flto $( DEBUG_PREFIX_MAP) " \
171+ -DCMAKE_CXX_FLAGS=" -flto $( DEBUG_PREFIX_MAP) " \
172+ -DLIBCXXABI_LIBDIR_SUFFIX =/wasm32-wasi/llvm-lto/$(CLANG_VERSION ) \
173+ $(LLVM_PROJ_DIR ) /libcxxabi
174+ ninja $(NINJA_FLAGS) -v -C build/libcxxabi.llvm-lto
175+ # Do the install.
140176 ninja $(NINJA_FLAGS) -v -C build/libcxxabi install
177+ ninja $(NINJA_FLAGS) -v -C build/libcxxabi.llvm-lto install
141178 touch build/libcxxabi.BUILT
142179
143180build/config.BUILT :
0 commit comments