Skip to content

Commit c80964d

Browse files
author
Pat Hickey
committed
initial commit
largely based on yury's wasmception
0 parents  commit c80964d

File tree

5 files changed

+191
-0
lines changed

5 files changed

+191
-0
lines changed

Makefile

+132
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
# Any copyright is dedicated to the Public Domain.
2+
# http://creativecommons.org/publicdomain/zero/1.0/
3+
4+
ROOT_DIR=${CURDIR}
5+
PREFIX?=/opt/wasi-sdk
6+
CLANG_VERSION=8.0.0
7+
8+
VERSION=0.2
9+
DEBUG_PREFIX_MAP=-fdebug-prefix-map=$(ROOT_DIR)=wasmception://v$(VERSION)
10+
11+
default: build
12+
echo "Use -fdebug-prefix-map=$(ROOT_DIR)=wasmception://v$(VERSION)"
13+
14+
clean:
15+
rm -rf build $(PREFIX)
16+
17+
build/llvm.BUILT:
18+
mkdir -p build/llvm
19+
cd build/llvm; cmake -G "Unix Makefiles" \
20+
-DCMAKE_BUILD_TYPE=MinSizeRel \
21+
-DCMAKE_INSTALL_PREFIX=$(PREFIX) \
22+
-DLLVM_TARGETS_TO_BUILD=WebAssembly \
23+
-DLLVM_DEFAULT_TARGET_TRIPLE=wasm32-unknown-wasi \
24+
-DLLVM_EXTERNAL_CLANG_SOURCE_DIR=$(ROOT_DIR)/src/llvm-project/clang \
25+
-DLLVM_EXTERNAL_LLD_SOURCE_DIR=$(ROOT_DIR)/src/llvm-project/lld \
26+
-DLLVM_ENABLE_PROJECTS="lld;clang" \
27+
-DDEFAULT_SYSROOT=$(PREFIX)/share/sysroot \
28+
$(ROOT_DIR)/src/llvm-project/llvm
29+
cd build/llvm; $(MAKE) -j 8 \
30+
install-clang \
31+
install-lld \
32+
install-llc \
33+
install-llvm-ar \
34+
install-llvm-ranlib \
35+
install-llvm-dwarfdump \
36+
install-clang-headers \
37+
install-llvm-nm \
38+
install-llvm-size \
39+
llvm-config
40+
touch build/llvm.BUILT
41+
42+
build/reference-sysroot.BUILT: build/llvm.BUILT
43+
make -C $(ROOT_DIR)/src/reference-sysroot \
44+
WASM_CC=$(PREFIX)/bin/clang \
45+
SYSROOT=$(PREFIX)/share/sysroot
46+
touch build/reference-sysroot.BUILT
47+
48+
build/compiler-rt.BUILT: build/llvm.BUILT
49+
mkdir -p build/compiler-rt
50+
cd build/compiler-rt; cmake -G "Unix Makefiles" \
51+
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
52+
-DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR)/wasmi-sdk.cmake \
53+
-DCOMPILER_RT_BAREMETAL_BUILD=On \
54+
-DCOMPILER_RT_BUILD_XRAY=OFF \
55+
-DCOMPILER_RT_INCLUDE_TESTS=OFF \
56+
-DCOMPILER_RT_ENABLE_IOS=OFF \
57+
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=On \
58+
-DWASM_SDK_PREFIX=$(PREFIX) \
59+
-DCMAKE_C_FLAGS="-O1 $(DEBUG_PREFIX_MAP)" \
60+
-DLLVM_CONFIG_PATH=$(ROOT_DIR)/build/llvm/bin/llvm-config \
61+
-DCOMPILER_RT_OS_DIR=wasi \
62+
-DCMAKE_INSTALL_PREFIX=$(PREFIX)/lib/clang/$(CLANG_VERSION)/ \
63+
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
64+
$(ROOT_DIR)/src/llvm-project/compiler-rt/lib/builtins
65+
cd build/compiler-rt; make -j 8 install
66+
cp -R $(ROOT_DIR)/build/llvm/lib/clang $(PREFIX)/lib/
67+
touch build/compiler-rt.BUILT
68+
69+
build/libcxx.BUILT: build/llvm.BUILT build/compiler-rt.BUILT build/reference-sysroot.BUILT
70+
mkdir -p build/libcxx
71+
cd build/libcxx; cmake -G "Unix Makefiles" \
72+
-DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR)/wasi-sdk.cmake \
73+
-DLLVM_CONFIG_PATH=$(ROOT_DIR)/build/llvm/bin/llvm-config \
74+
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
75+
-DLIBCXX_HAS_PTHREAD_API:BOOL=ON \
76+
-DCMAKE_BUILD_TYPE=RelWithDebugInfo \
77+
-DLIBCXX_ENABLE_SHARED:BOOL=OFF \
78+
-DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY:BOOL=OFF \
79+
-DLIBCXX_ENABLE_EXCEPTIONS:BOOL=OFF \
80+
-DLIBCXX_CXX_ABI=libcxxabi \
81+
-DLIBCXX_CXX_ABI_INCLUDE_PATHS=$(ROOT_DIR)/src/llvm-project/libcxxabi/include \
82+
-DLIBCXX_HAS_MUSL_LIBC:BOOL=ON \
83+
-DLIBCXX_ABI_VERSION=2 \
84+
-DWASM_SDK_PREFIX=$(PREFIX) \
85+
-DCMAKE_C_FLAGS="$(DEBUG_PREFIX_MAP)" \
86+
-DCMAKE_CXX_FLAGS="$(DEBUG_PREFIX_MAP)" \
87+
--debug-trycompile \
88+
$(ROOT_DIR)/src/llvm-project/libcxx
89+
cd build/libcxx; make -j 8 install
90+
# libc++abi.a doesn't do a multiarch install, so fix it up.
91+
mv $(PREFIX)/share/sysroot/lib/libc++.a $(PREFIX)/share/sysroot/lib/wasm32-wasi/
92+
touch build/libcxx.BUILT
93+
94+
build/libcxxabi.BUILT: build/libcxx.BUILT build/llvm.BUILT
95+
mkdir -p build/libcxxabi
96+
cd build/libcxxabi; cmake -G "Unix Makefiles" \
97+
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
98+
-DCMAKE_CXX_COMPILER_WORKS=ON \
99+
-DCMAKE_C_COMPILER_WORKS=ON \
100+
-DLIBCXXABI_ENABLE_EXCEPTIONS:BOOL=OFF \
101+
-DLIBCXXABI_ENABLE_SHARED:BOOL=OFF \
102+
-DLIBCXXABI_HAS_PTHREAD_API:BOOL=ON \
103+
-DCXX_SUPPORTS_CXX11=ON \
104+
-DLLVM_COMPILER_CHECKED=ON \
105+
-DCMAKE_BUILD_TYPE=RelWithDebugInfo \
106+
-DLIBCXXABI_LIBCXX_PATH=$(ROOT_DIR)/src/llvm-project/libcxx \
107+
-DLIBCXXABI_LIBCXX_INCLUDES=$(PREFIX)/share/sysroot/include/c++/v1 \
108+
-DLLVM_CONFIG_PATH=$(ROOT_DIR)/build/llvm/bin/llvm-config \
109+
-DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR)/wasi-sdk.cmake \
110+
-DWASM_SDK_PREFIX=$(PREFIX) \
111+
-DCMAKE_C_FLAGS="$(DEBUG_PREFIX_MAP)" \
112+
-DCMAKE_CXX_FLAGS="$(DEBUG_PREFIX_MAP)" \
113+
-DUNIX:BOOL=ON \
114+
--debug-trycompile \
115+
$(ROOT_DIR)/src/llvm-project/libcxxabi
116+
cd build/libcxxabi; make -j 8 install
117+
# libc++abi.a doesn't do a multiarch install, so fix it up.
118+
mv $(PREFIX)/share/sysroot/lib/libc++abi.a $(PREFIX)/share/sysroot/lib/wasm32-wasi/
119+
touch build/libcxxabi.BUILT
120+
121+
build: build/llvm.BUILT build/reference-sysroot.BUILT build/compiler-rt.BUILT build/libcxxabi.BUILT build/libcxx.BUILT
122+
123+
strip: build/llvm.BUILT
124+
cd $(PREFIX)/bin; strip clang-8 llc lld llvm-ar
125+
126+
package: build/package.BUILT
127+
128+
build/package.BUILT: build
129+
./package.sh
130+
touch build/package.BUILT
131+
132+
.PHONY: default clean build strip package

package.sh

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/usr/bin/env sh
2+
3+
if [ -n "$1" ]; then
4+
export VERSION="$1"
5+
else
6+
export VERSION=`./version.sh`
7+
fi
8+
9+
rm -rf pkg
10+
mkdir -p pkg/opt
11+
mkdir pkg/DEBIAN
12+
sed -e s/VERSION/$VERSION/ wasi-sdk.control > pkg/DEBIAN/control
13+
cp -R /opt/wasi-sdk pkg/opt/
14+
dpkg-deb -b pkg wasi-sdk_$VERSION\_amd64.deb
15+
rm -rf pkg

version.sh

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/usr/bin/env bash
2+
set -e
3+
GIT_DESCR=$(git describe --long --candidates=999 --match='wasi-sdk-*' --dirty='+m' --abbrev=12)
4+
GIT_PACKAGE_VERSION=$(echo $GIT_DESCR | perl -ne 'if(/^wasi-sdk-(\d+)-(\d+)-g([0-9a-f]{7,12})([+]m)?$/) { print "$1.$2g$3$4"; exit } else { print "could not parse git description"; exit 1 }';)
5+
echo $GIT_PACKAGE_VERSION

wasi-sdk.control

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Package: wasi-sdk
2+
Version: VERSION
3+
Architecture: amd64
4+
Priority: optional
5+
Description: Clang toolchain with wasm32-wasi default target, and the wasi sysroot
6+
Maintainer: Pat Hickey <[email protected]>

wask-sdk.cmake

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Cmake toolchain description file for the Makefile
2+
3+
# This is arbitrary, AFAIK, for now.
4+
cmake_minimum_required(VERSION 3.4.0)
5+
6+
set(CMAKE_SYSTEM_NAME Wasm)
7+
set(CMAKE_SYSTEM_VERSION 1)
8+
set(CMAKE_SYSTEM_PROCESSOR wasm32)
9+
set(triple wasm32-unknown-wasi)
10+
11+
set(CMAKE_C_COMPILER ${WASM_SDK_PREFIX}/bin/clang)
12+
set(CMAKE_CXX_COMPILER ${WASM_SDK_PREFIX}/bin/clang++)
13+
set(CMAKE_AR ${WASM_SDK_PREFIX}/bin/llvm-ar CACHE STRING "wasi-sdk build")
14+
set(CMAKE_RANLIB ${WASM_SDK_PREFIX}/bin/llvm-ranlib CACHE STRING "wasi-sdk build")
15+
set(CMAKE_C_COMPILER_TARGET ${triple} CACHE STRING "wasi-sdk build")
16+
set(CMAKE_CXX_COMPILER_TARGET ${triple} CACHE STRING "wasi-sdk build")
17+
set(CMAKE_C_FLAGS "-v" CACHE STRING "wasi-sdk build")
18+
set(CMAKE_CXX_FLAGS "-v -std=c++11" CACHE STRING "wasi-sdk build")
19+
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--no-threads" CACHE STRING "wasi-sdk build")
20+
21+
set(CMAKE_SYSROOT ${WASM_SDK_PREFIX}/share/sysroot CACHE STRING "wasi-sdk build")
22+
set(CMAKE_STAGING_PREFIX ${WASM_SDK_PREFIX}/share/sysroot CACHE STRING "wasi-sdk build")
23+
24+
# Don't look in the sysroot for executables to run during the build
25+
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
26+
# Only look in the sysroot (not in the host paths) for the rest
27+
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
28+
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
29+
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
30+
31+
# Some other hacks
32+
set(CMAKE_C_COMPILER_WORKS ON)
33+
set(CMAKE_CXX_COMPILER_WORKS ON)

0 commit comments

Comments
 (0)