Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LLVM 18 #123

Merged
merged 36 commits into from
Mar 12, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
bd60141
gh: bump code version
csegarragonz Feb 9, 2024
1158e8b
faasmtools: bump llvm version
csegarragonz Feb 9, 2024
2aa9661
llvm: changes for latest wasi-libc and wasi-sdk
csegarragonz Feb 12, 2024
6afffa4
llvm: install libclang_rt.builitins-wasm32.a
csegarragonz Feb 13, 2024
9969423
cmake: change system name from Wasm to WASI to align with wasi-sdk
csegarragonz Feb 13, 2024
a61d8b0
faasmtools: enable linker feature sign extension as it is the default…
csegarragonz Feb 13, 2024
852fc4a
libs: install in <sysroot>/lib/wasm32-wasi and copy imports appropria…
csegarragonz Feb 13, 2024
53f6567
docker: enable some features
csegarragonz Feb 13, 2024
4c65d67
libs: install libraries and headers in the right location
csegarragonz Feb 13, 2024
29403d4
llvm: fix libclanv_rt.builitins installation
csegarragonz Feb 13, 2024
f7fe16b
mpi: more fixes to the cmake file
csegarragonz Feb 13, 2024
65cc765
wasi: attempt at having two different targets for threads and non-thr…
csegarragonz Feb 13, 2024
0f0125d
func: comment out temporarily disabled functions
csegarragonz Feb 15, 2024
4242785
func: move threaded functions to separate top-level directory
csegarragonz Feb 16, 2024
d69921e
tasks: configurable compilation for different targets
csegarragonz Feb 16, 2024
47be01e
threads: support for pthread apis
csegarragonz Feb 16, 2024
0b67978
cpython: changes to make cpython build work
csegarragonz Feb 19, 2024
022ab93
llvm: add c compiler target flag for compiler-rt build
csegarragonz Feb 19, 2024
eaaf4d5
libs: fix use of (auto)conf with different sysroots
csegarragonz Feb 19, 2024
6cf9946
more fixes
csegarragonz Feb 19, 2024
ca0d78e
faasmtools: change default target when building a threaded application
csegarragonz Feb 20, 2024
2ca4ee6
llvm: bump to version 18 rc2 to fix the frontend bug with openmp
csegarragonz Feb 20, 2024
17e844e
llvm: no harm in using clang-18 to build llvm-18
csegarragonz Feb 20, 2024
676ce38
llvm: use clang-17 for native compilation
csegarragonz Feb 20, 2024
5a2ec10
nits: fix python formatting
csegarragonz Feb 20, 2024
c785471
nits: fix cpp formatting
csegarragonz Feb 20, 2024
1460297
nit: run python formatting
csegarragonz Feb 21, 2024
4b6e62f
func: build all threads func
csegarragonz Feb 21, 2024
27aae15
gha: skip code formatting with clang-format-17
csegarragonz Feb 21, 2024
89c98da
clang-format: fix formatting after llvm bump
csegarragonz Mar 1, 2024
8d5c4a9
nits: clang-format passing with llvm 17
csegarragonz Mar 4, 2024
e42390a
tasks(libs): build threads/non-threads in different directories
csegarragonz Mar 5, 2024
bfad3a8
docker: fix strange libfaasm overwrite
csegarragonz Mar 5, 2024
731744f
funcs: set the threads target when appropriate
csegarragonz Mar 5, 2024
1e23e89
nits: self-review
csegarragonz Mar 12, 2024
16b97f2
libffi: fix build by passing --host flag to configure
csegarragonz Mar 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
wasi: attempt at having two different targets for threads and non-thr…
…eads
  • Loading branch information
csegarragonz committed Feb 13, 2024
commit 65cc765563dc1ad263646ff2fdf60384e1e27bc6
112 changes: 70 additions & 42 deletions LLVM.makefile
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,13 @@ $(BUILD_DIR)/wasi-libc.BUILT: $(BUILD_DIR)/compiler-rt.BUILT
AR=$(FAASM_TOOLCHAIN_DIR)/bin/llvm-ar \
NM=$(FAASM_TOOLCHAIN_DIR)/bin/llvm-nm \
SYSROOT=$(FAASM_SYSROOT) \
THREAD_MODEL=faasm \
default
default libc_so
$(MAKE) -C ${WASI_LIBC_DIR} \
CC=$(FAASM_TOOLCHAIN_DIR)/bin/clang \
AR=$(FAASM_TOOLCHAIN_DIR)/bin/llvm-ar \
NM=$(FAASM_TOOLCHAIN_DIR)/bin/llvm-nm \
SYSROOT=$(FAASM_SYSROOT) \
THREAD_MODEL=posix
touch $(BUILD_DIR)/wasi-libc.BUILT

$(BUILD_DIR)/compiler-rt.BUILT: $(BUILD_DIR)/llvm.BUILT
Expand Down Expand Up @@ -124,59 +129,82 @@ $(BUILD_DIR)/compiler-rt.BUILT: $(BUILD_DIR)/llvm.BUILT
$(FAASM_TOOLCHAIN_DIR)/lib/clang/$(CLANG_VERSION_MAJOR)/lib/wasi/libclang_rt.builtins-wasm32.a
touch $(BUILD_DIR)/compiler-rt.BUILT

# Flags for libcxx and libcxxabi.
# $(1): pthreads ON or OFF
# $(2): shared libraries ON or OFF
LIBCXX_CMAKE_FLAGS = \
-DCMAKE_C_COMPILER_WORKS=ON \
-DCMAKE_CXX_COMPILER_WORKS=ON \
-DCMAKE_AR=$(FAASM_TOOLCHAIN_DIR)/bin/ar \
-DCMAKE_TOOLCHAIN_FILE=$(FAASM_TOOLCHAIN_FILE) \
-DCMAKE_STAGING_PREFIX=$(FAASM_SYSROOT) \
-DCMAKE_POSITION_INDEPENDENT_CODE=$(2) \
-DLLVM_CONFIG_PATH=$(LLVM_CONFIG) \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
-DCXX_SUPPORTS_CXX11=ON \
-DLIBCXX_ENABLE_THREADS:BOOL=$(1) \
-DLIBCXX_HAS_PTHREAD_API:BOOL=$(1) \
-DLIBCXX_HAS_EXTERNAL_THREAD_API:BOOL=OFF \
-DLIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \
-DLIBCXX_HAS_WIN32_THREAD_API:BOOL=OFF \
-DLLVM_COMPILER_CHECKED=ON \
-DCMAKE_BUILD_TYPE=RelWithDebugInfo \
-DLIBCXX_ENABLE_SHARED:BOOL=$(2) \
-DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY:BOOL=OFF \
-DLIBCXX_ENABLE_EXCEPTIONS:BOOL=OFF \
-DLIBCXX_ENABLE_FILESYSTEM:BOOL=ON \
-DLIBCXX_ENABLE_ABI_LINKER_SCRIPT:BOOL=OFF \
-DLIBCXX_USE_COMPILER_RT=ON \
-DLIBCXX_CXX_ABI=libcxxabi \
-DLIBCXX_CXX_ABI_INCLUDE_PATHS=$(LLVM_PROJ_DIR)/libcxxabi/include \
-DLIBCXX_HAS_MUSL_LIBC:BOOL=ON \
-DLIBCXX_ABI_VERSION=2 \
-DLIBCXXABI_ENABLE_EXCEPTIONS:BOOL=OFF \
-DLIBCXXABI_ENABLE_SHARED:BOOL=$(2) \
-DLIBCXXABI_SILENT_TERMINATE:BOOL=ON \
-DLIBCXXABI_ENABLE_THREADS:BOOL=$(1) \
-DLIBCXXABI_HAS_PTHREAD_API:BOOL=$(1) \
-DLIBCXXABI_HAS_EXTERNAL_THREAD_API:BOOL=OFF \
-DLIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \
-DLIBCXXABI_HAS_WIN32_THREAD_API:BOOL=OFF \
-DLIBCXX_ENABLE_PIC:BOOL=$(2) \
-DUNIX:BOOL=ON \
--debug-trycompile

$(BUILD_DIR)/libcxx.BUILT: $(BUILD_DIR)/llvm.BUILT ${BUILD_DIR}/wasi-libc.BUILT
# Build different libcxx targets
mkdir -p $(BUILD_DIR)/libcxx
cd $(BUILD_DIR)/libcxx; cmake -G Ninja \
-DCMAKE_C_COMPILER_WORKS=ON \
-DCMAKE_CXX_COMPILER_WORKS=ON \
-DCMAKE_AR=$(FAASM_TOOLCHAIN_DIR)/bin/ar \
-DCMAKE_TOOLCHAIN_FILE=$(FAASM_TOOLCHAIN_FILE) \
-DCMAKE_STAGING_PREFIX=$(FAASM_SYSROOT) \
-DCMAKE_POSITION_INDEPENDENT_CODE=OFF \
-DLLVM_CONFIG_PATH=$(LLVM_CONFIG) \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
-DCXX_SUPPORTS_CXX11=ON \
-DLIBCXX_ENABLE_THREADS:BOOL=ON \
-DLIBCXX_HAS_PTHREAD_API:BOOL=ON \
-DLIBCXX_HAS_EXTERNAL_THREAD_API:BOOL=OFF \
-DLIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \
-DLIBCXX_HAS_WIN32_THREAD_API:BOOL=OFF \
-DLLVM_COMPILER_CHECKED=ON \
-DCMAKE_BUILD_TYPE=RelWithDebugInfo \
-DLIBCXX_ENABLE_SHARED:BOOL=OFF \
-DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY:BOOL=OFF \
-DLIBCXX_ENABLE_EXCEPTIONS:BOOL=OFF \
-DLIBCXX_ENABLE_FILESYSTEM:BOOL=ON \
-DLIBCXX_ENABLE_ABI_LINKER_SCRIPT:BOOL=OFF \
-DLIBCXX_USE_COMPILER_RT=ON \
-DLIBCXX_CXX_ABI=libcxxabi \
-DLIBCXX_CXX_ABI_INCLUDE_PATHS=$(LLVM_PROJ_DIR)/libcxxabi/include \
-DLIBCXX_HAS_MUSL_LIBC:BOOL=ON \
-DLIBCXX_ABI_VERSION=2 \
-DLIBCXXABI_ENABLE_EXCEPTIONS:BOOL=OFF \
-DLIBCXXABI_ENABLE_SHARED:BOOL=OFF \
-DLIBCXXABI_SILENT_TERMINATE:BOOL=ON \
-DLIBCXXABI_ENABLE_THREADS:BOOL=ON \
-DLIBCXXABI_HAS_PTHREAD_API:BOOL=ON \
-DLIBCXXABI_HAS_EXTERNAL_THREAD_API:BOOL=OFF \
-DLIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \
-DLIBCXXABI_HAS_WIN32_THREAD_API:BOOL=OFF \
-DLIBCXX_ENABLE_PIC:BOOL=OFF \
-DUNIX:BOOL=ON \
--debug-trycompile \
cd $(BUILD_DIR)/libcxx && cmake -G Ninja $(call LIBCXX_CMAKE_FLAGS,OFF,ON) \
-DCMAKE_SYSROOT=${FAASM_SYSROOT} \
-DCMAKE_C_FLAGS="-I$(FAASM_SYSROOT)/include --target=wasm32-wasi" \
-DCMAKE_CXX_FLAGS="-I$(FAASM_SYSROOT)/include -I$(FAASM_SYSROOT)/include/c++/v1 --target=wasm32-wasi" \
-DCMAKE_C_FLAGS="--target=wasm32-wasi" \
-DCMAKE_CXX_FLAGS="--target=wasm32-wasi" \
-DLIBCXX_LIBDIR_SUFFIX=/wasm32-wasi \
-DLIBCXXABI_LIBDIR_SUFFIX=/wasm32-wasi \
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
$(LLVM_PROJ_DIR)/runtimes
mkdir -p $(BUILD_DIR)/libcxx-threads
cd $(BUILD_DIR)/libcxx-threads && cmake -G Ninja $(call LIBCXX_CMAKE_FLAGS,ON,OFF) \
-DCMAKE_SYSROOT=${FAASM_SYSROOT} \
-DCMAKE_C_FLAGS="--target=wasm32-wasi-threads" \
-DCMAKE_CXX_FLAGS="--target=wasm32-wasi-threads" \
-DLIBCXX_LIBDIR_SUFFIX=/wasm32-wasi-threads \
-DLIBCXXABI_LIBDIR_SUFFIX=/wasm32-wasi-threads \
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
$(LLVM_PROJ_DIR)/runtimes
# Do the install
ninja -v -C $(BUILD_DIR)/libcxx install
mv $(FAASM_WASM_SYSROOT)/include/c++ $(FAASM_WASM_SYSROOT)/include/wasm32-wasi/
ninja -v -C $(BUILD_DIR)/libcxx-threads install
mv $(FAASM_WASM_SYSROOT)/include/c++ $(FAASM_WASM_SYSROOT)/include/wasm32-wasi-threads/
# As of this writing, `clang++` will ignore the above include dirs unless this one also exists:
mkdir -p $(FAASM_WASM_SYSROOT)/include/c++/v1
touch $(BUILD_DIR)/libcxx.BUILT


.PHONY: extras
extras: $(BUILD_DIR)/libcxx.BUILT
cp $(FAASM_CPP_PROJ_ROOT)/sysroot_extras/* $(FAASM_SYSROOT)/lib/wasm32-wasi/
cp $(FAASM_CPP_PROJ_ROOT)/sysroot_extras/* $(FAASM_SYSROOT)/lib/wasm32-wasi-threads/

llvm: $(BUILD_DIR)/llvm.BUILT

Expand Down
10 changes: 4 additions & 6 deletions WasiToolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ set(UNIX 1)
set(CMAKE_SYSTEM_NAME WASI)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR wasm32)
set(WASM_TRIPLE wasm32-wasi)
set(WASM_TRIPLE $ENV{FAASM_WASM_TRIPLE})

set(WASI_HOST_EXE_SUFFIX "")

Expand Down Expand Up @@ -52,15 +52,13 @@ unset(CMAKE_DL_LIBS CACHE)
# Add definition for flagging Faasm
add_definitions(-D__faasm)

set(FAASM_COMPILER_FLAGS $ENV{FAASM_WASM_CFLAGS})

if(FAASM_BUILD_SHARED)
set(FAASM_COMPILER_FLAGS "${FAASM_COMPILER_FLAGS} $ENV{FAASM_WASM_CFLAGS_SHARED}")
set(FAASM_COMPILER_FLAGS "$ENV{FAASM_WASM_CFLAGS} $ENV{FAASM_WASM_CFLAGS_SHARED}")
endif()

set(CMAKE_SYSROOT ${FAASM_SYSROOT} CACHE STRING "faasm build")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FAASM_COMPILER_FLAGS}" CACHE STRING "faasm build")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FAASM_COMPILER_FLAGS}" CACHE STRING "faasm build")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} $ENV{FAASM_WASM_CFLAGS}" CACHE STRING "faasm build")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} $ENV{FAASM_WASM_CXXFLAGS}" CACHE STRING "faasm build")
set(CMAKE_LINKER_FLAGS $ENV{FAASM_WASM_LINKER_FLAGS} CACHE STRING "faasm build")
set(CMAKE_SHARED_LINKER_FLAGS $ENV{FAASM_WASM_SHARED_LINKER_FLAGS} CACHE STRING "faasm build")
set(CMAKE_EXE_LINKER_FLAGS $ENV{FAASM_WASM_EXE_LINKER_FLAGS} CACHE STRING "faasm build")
Expand Down
23 changes: 22 additions & 1 deletion faasmtools/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@
"-Xlinker --export={}".format(FAASM_WASM_CTORS_FUNC_NAME),
"-Xlinker --export=__stack_pointer",
"-Xlinker --max-memory={}".format(FAASM_WASM_MAX_MEMORY),
"-Xlinker --features=mutable-globals,sign-ext,simd128",
"-Xlinker --features=bulk-memory,mutable-globals,sign-ext,simd128",
"-Wl,-z,stack-size={} -Wl".format(FAASM_WASM_STACK_SIZE),
]

Expand Down Expand Up @@ -188,6 +188,8 @@

# Env. variables as a dictionary: prefix with FAASM_WASM or FAASM_NATIVE
# depending on the build type variables target
# WARNING: do NOT import this method directly, instead use the getter method:
# get_faasm_build_env_dict
FAASM_BUILD_ENV_DICT = {
"CMAKE_ROOT": FAASM_CMAKE_ROOT,
"FAASM_NATIVE_INSTALL_DIR": FAASM_NATIVE_DIR,
Expand All @@ -206,6 +208,8 @@
"FAASM_WASM_SYSROOT": WASM_SYSROOT,
"FAASM_WASM_CFLAGS": " ".join(WASM_CFLAGS),
"FAASM_WASM_CFLAGS_SHARED": " ".join(WASM_CFLAGS_SHARED),
"FAASM_WASM_CXXFLAGS": " ".join(WASM_CXXFLAGS),
"FAASM_WASM_CXXFLAGS_SHARED": " ".join(WASM_CXXFLAGS_SHARED),
"FAASM_WASM_EXE_LINKER_FLAGS": " ".join(WASM_EXE_LDFLAGS),
"FAASM_WASM_EXE_LINKER_FLAGS_SHARED": " ".join(WASM_EXE_LDFLAGS_SHARED),
"FAASM_WASM_SHARED_LINKER_FLAGS": " ".join(WASM_LDFLAGS_SHARED),
Expand All @@ -224,6 +228,23 @@
}


def get_faasm_build_env_dict(is_threads=False):
"""
This method returns the right set of environment variables needed to use
our toolchain file as well as most cross-compilation scripts in Faasm.
"""
build_env_dicts = FAASM_BUILD_ENV_DICT
if is_threads:
build_env_dicts["FAASM_WASM_TRIPLE"] = "wasm32-wasi-threads"
build_env_dicts["FAASM_WASM_CFLAGS"] += " -pthread"
build_env_dicts["FAASM_WASM_CXXFLAGS"] += " -pthread"
build_env_dicts["FAASM_WASM_EXE_LINKER_FLAGS"] += " -Wl,--import-memory"
build_env_dicts["FAASM_WASM_EXE_LINKER_FLAGS"] += " -Wl,--export-memory"
else:
build_env_dicts["FAASM_WASM_TRIPLE"] = "wasm32-wasi"



def get_dict_as_cmake_vars(env_dict):
return " ".join(["-D{}={}".format(k, env_dict[k]) for k in env_dict])

Expand Down
2 changes: 1 addition & 1 deletion faasmtools/compile_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from subprocess import run


def wasm_cmake(src_dir, build_dir, target, clean=False, debug=False):
def wasm_cmake(src_dir, build_dir, target, clean=False, debug=False, is_threads=False):
cmake_build_type = "Debug" if debug else "Release"

if exists(build_dir) and clean:
Expand Down
1 change: 0 additions & 1 deletion libfaasm/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ set(LIB_FILES
zygote.cpp
)


if (CMAKE_SYSTEM_NAME STREQUAL "WASI")
message(STATUS "Libfaasm WebAssembly build")

Expand Down
12 changes: 10 additions & 2 deletions tasks/func.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,14 @@
NATIVE_FUNC_BUILD_DIR = join(PROJ_ROOT, "build", "native-func")


def _is_threaded_func(user, func):
"""
Work out if the function requires using the wasm32-wasi or the
wasm32-wasi-threads target
"""
return user in ["threads", "omp"]


def _get_all_user_funcs(user):
# Work out all the functions for this user (that we assume will have been
# built)
Expand Down Expand Up @@ -64,7 +72,7 @@ def compile(ctx, user, func, clean=False, debug=False, native=False):
)
else:
# Build the function (gets written to the build dir)
wasm_cmake(FUNC_DIR, FUNC_BUILD_DIR, func, clean, debug)
wasm_cmake(FUNC_DIR, FUNC_BUILD_DIR, func, clean, debug, _is_threaded_func(user, func))

# Copy into place
_copy_built_function(user, func)
Expand Down Expand Up @@ -145,7 +153,7 @@ def user(ctx, user, clean=False, debug=False):
"""
# Build all funcs for this user (will fail if any builds fail)
target = "{}_all_funcs".format(user)
wasm_cmake(FUNC_DIR, FUNC_BUILD_DIR, target, clean, debug)
wasm_cmake(FUNC_DIR, FUNC_BUILD_DIR, target, clean, debug, _is_threaded_func(user, ""))

funcs = _get_all_user_funcs(user)
for f in funcs:
Expand Down
2 changes: 1 addition & 1 deletion third-party/wasi-libc
Submodule wasi-libc updated 1 files
+3 −13 Makefile
Loading