Last active
August 20, 2022 00:25
-
-
Save pjz/1202b3e01eb95dd61023e8b796543aa0 to your computer and use it in GitHub Desktop.
Zig from source
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
LLVM_PROJECT=llvm-project-14 | |
LLVM_BASE=Downloads/$(LLVM_PROJECT) | |
LLVM_INST=$(LLVM_BASE)/local | |
ZIG2 := $(shell realpath stage2/bin/zig) | |
ZIG3 := $(shell realpath stage3/bin/zig) | |
ZIG4 := $(shell realpath stage4/bin/zig) | |
build Downloads: | |
mkdir $@ | |
build/Makefile: build | |
INST_PREFIX=`realpath $(LLVM_INST)` ;\ | |
echo "llvm should be at $$INST_PREFIX" ;\ | |
cd build ; \ | |
cmake .. -DCMAKE_PREFIX_PATH=$$INST_PREFIX | |
LLVM_TOOLS=$(LLVM_INST)/bin/llvc $(LLVM_INST)/bin/lld $(LLVM_INST)/bin/clang | |
.PHONY: stage1 | |
build/stage1/bin/zig stage1: build/Makefile $(LLVM_TOOLS) | |
cd build ; \ | |
make -j6 install | |
LOG_OPTS=--verbose-link --verbose-air | |
# Major "--debug-log" targets are: compilation, module, sema, codegen, and link | |
#LOG_OPTS=-Dlog=true --debug-log sema | |
#LOG_OPTS= | |
.PHONY: stage2 | |
stage2/bin/zig stage2: build/stage1/bin/zig | |
./build/stage1/bin/zig build -p stage2 -Denable-llvm | |
stage3/bin/zig stage3: stage2/bin/zig | |
./stage2/bin/zig build -p stage3 -Denable-llvm -Dconfig_h=build/config.h $(LOG_OPTS) >stage3_air.log 2>&1 | |
stage4/bin/zig stage4: stage3/bin/zig | |
./stage3/bin/zig build -p stage4 -Denable-llvm -Dconfig_h=build/config.h $(LOG_OPTS) >stage4_air.log 2>&1 | |
# not really necessary, but another datapoint for reproducible build comparison | |
stage5/bin/zig stage5: stage4/bin/zig | |
rm -rf zig-cache ;\ | |
./stage4/bin/zig build -p stage5 -Denable-llvm -Dconfig_h=build/config.h $(LOG_OPTS) >stage5_air.log 2>&1 | |
airdiff: stage34_air.diff | |
stage34_air.diff: stage4 | |
diff stage[34]_air.log > stage34_air.diff | |
zirs: | |
cd test/cases ;\ | |
for z in *.zig ; do \ | |
$(ZIG3) build-exe -Denable-llvm --verbose-air $z >$${z}.air3 ; \ | |
$(ZIG4) build-exe -Denable-llvm --verbose-air $z >$${z}.air4 ; \ | |
done | |
# local llvm build | |
$(LLVM_BASE): Downloads | |
cd Downloads ; \ | |
git clone --depth 1 --branch release/14.x https://github.com/llvm/llvm-project $(LLVM_PROJECT) | |
llvc: $(LLVM_INST)/bin/llvc | |
$(LLVM_INST)/bin/llvc: $(LLVM_BASE) | |
INST_PREFIX=`realpath $(LLVM_INST)` ;\ | |
cd $</llvm ; \ | |
mkdir -p build-release ; \ | |
cd build-release ; \ | |
cmake .. -DCMAKE_INSTALL_PREFIX=$$INST_PREFIX -DCMAKE_PREFIX_PATH=$$INST_PREFIX -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_LIBXML2=OFF -G Ninja -DLLVM_PARALLEL_LINK_JOBS=1 ; \ | |
ninja install | |
lld: $(LLVM_INST)/bin/lld | |
$(LLVM_INST)/bin/lld: $(LLVM_BASE) | |
INST_PREFIX=`realpath $(LLVM_INST)` ;\ | |
cd $</lld ; \ | |
mkdir -p build-release ; \ | |
cd build-release ; \ | |
cmake .. -DCMAKE_INSTALL_PREFIX=$$INST_PREFIX -DCMAKE_PREFIX_PATH=$$INST_PREFIX -DCMAKE_BUILD_TYPE=Release -G Ninja -DLLVM_PARALLEL_LINK_JOBS=1 -DCMAKE_CXX_STANDARD=17 ;\ | |
ninja install | |
clang: $(LLVM_INST)/bin/clang | |
$(LLVM_INST)/bin/clang: $(LLVM_BASE) | |
INST_PREFIX=`realpath $(LLVM_INST)` ;\ | |
cd $</clang ; \ | |
mkdir -p build-release ; \ | |
cd build-release ; \ | |
cmake .. -DCMAKE_INSTALL_PREFIX=$$INST_PREFIX -DCMAKE_PREFIX_PATH=$$INST_PREFIX -DCMAKE_BUILD_TYPE=Release -G Ninja -DLLVM_PARALLEL_LINK_JOBS=1 ;\ | |
ninja install | |
.PHONY: llvm-tools | |
llvm-tools: $(LLVM_TOOLS) | |
clean-zig: | |
rm -rf build zig-cache ~/.cache/zig stage[12345] | |
clean-llvm: | |
rm -rf $(LLVM_BASE)/{llvm,lld,clang}/build-release $(LLVM_INST) | |
clean-all-llvm: | |
rm -rf Downloads | |
clean-all: clean-zig clean-all-llvm |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment