diff --git a/llvm-project/Dockerfile.libc b/llvm-project/Dockerfile.libc new file mode 100644 index 0000000..566114c --- /dev/null +++ b/llvm-project/Dockerfile.libc @@ -0,0 +1,22 @@ +FROM docker.io/alpine:edge as source +RUN wget --no-clobber \ + https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/llvm-project-17.0.6.src.tar.xz + +FROM docker.io/alpine:edge AS stage_one + +COPY --from=source llvm-project-17.0.6.src.tar.xz / +RUN tar xf llvm-project-17.0.6.src.tar.xz && \ + mv llvm-project-17.0.6.src llvm-project + +RUN apk add cmake ninja clang python3 lld + +COPY libc.cmake llvm-project/. +ARG LLVM_BUILD_DIR=llvm-project/llvm/build + +RUN apk add linux-headers + +RUN cmake \ + -B ${LLVM_BUILD_DIR} \ + -C llvm-project/libc.cmake \ + -S llvm-project/llvm \ + -G Ninja diff --git a/llvm-project/Makefile b/llvm-project/Makefile index b382112..45fd2a8 100644 --- a/llvm-project/Makefile +++ b/llvm-project/Makefile @@ -9,7 +9,7 @@ IMAGE ?= ghcr.io/clangbuiltlinux/llvm-project dotfiles: stage2.svg stage1.svg -.PHONY: clang epoch1 epoch2 epoch3 +.PHONY: clang epoch1 epoch2 epoch3 libc # Argument 1: epoch# (e.g., epoch1; should match the suffix of the Dockerfile) # Argument 2: Tag (e.g., ghcr.io/clangbuiltlinux/llvm-project:stage2-x86_64) @@ -35,5 +35,10 @@ clang: epoch3 $(DOCKER) create --name llvm-project $(IMAGE):stage3-$(HOST_ARCH) $(DOCKER) cp llvm-project:/usr/local/bin/clang-14 clang +libc: + $(DOCKER) rm libc || true + # $(DOCKER) create --name libc libc-$(HOST_ARCH) + $(DOCKER) build --file Dockerfile.libc . --tag libc + test: epoch3 bash ../ci/test-clang.sh $(IMAGE):stage3-$(HOST_ARCH) diff --git a/llvm-project/libc.cmake b/llvm-project/libc.cmake new file mode 100644 index 0000000..5f37fe9 --- /dev/null +++ b/llvm-project/libc.cmake @@ -0,0 +1,17 @@ +# Use Alpine's clang and clang++ from their clang package as the stage0 +# compilers. +set(CMAKE_CXX_COMPILER "/usr/bin/clang++" CACHE FILEPATH "") +set(CMAKE_C_COMPILER "/usr/bin/clang" CACHE FILEPATH "") +set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "") + +# Use Alpine's lld as the stage0 linker to link everything. +set(LLVM_ENABLE_LLD ON CACHE BOOL "") + +# TODO: why does clang need to be enabled? +set(LLVM_ENABLE_PROJECTS "clang;compiler-rt;libc;" CACHE STRING "") + +set(LLVM_LIBC_FULL_BUILD ON CACHE BOOL "") +set(LLVM_LIBC_INCLUDE_SCUDO ON CACHE BOOL "") +set(COMPILER_RT_BUILD_SCUDO_STANDALONE_WITH_LLVM_LIBC ON CACHE BOOL "") +set(COMPILER_RT_BUILD_GWP_ASAN OFF CACHE BOOL "") +set(COMPILER_RT_SCUDO_STANDALONE_BUILD_SHARED OFF CACHE BOOL "")