diff --git a/GNUmakefile b/GNUmakefile index 8d36e99a..7a93a1ef 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -25,6 +25,11 @@ CLANG ?= $(call findLLVMTool,clang) LLVM_AR ?= $(call findLLVMTool,llvm-ar) LLVM_NM ?= $(call findLLVMTool,llvm-nm) +# Patch up Clang for Nix. +ifneq (, ${CLANG_RESOURCE_DIR}) + CLANG := $(CLANG) -resource-dir ${CLANG_RESOURCE_DIR} +endif + # Go binary and GOROOT to select GO ?= go export GOROOT = $(shell $(GO) env GOROOT) @@ -265,7 +270,7 @@ endif wasi-libc: lib/wasi-libc/sysroot/lib/wasm32-wasi/libc.a lib/wasi-libc/sysroot/lib/wasm32-wasi/libc.a: @if [ ! -e lib/wasi-libc/Makefile ]; then echo "Submodules have not been downloaded. Please download them using:\n git submodule update --init"; exit 1; fi - cd lib/wasi-libc && $(MAKE) -j4 EXTRA_CFLAGS="-O2 -g -DNDEBUG -mnontrapping-fptoint -msign-ext" MALLOC_IMPL=none CC=$(CLANG) AR=$(LLVM_AR) NM=$(LLVM_NM) + cd lib/wasi-libc && $(MAKE) -j4 EXTRA_CFLAGS="-O2 -g -DNDEBUG -mnontrapping-fptoint -msign-ext" MALLOC_IMPL=none CC="$(CLANG)" AR=$(LLVM_AR) NM=$(LLVM_NM) # Check for Node.js used during WASM tests. NODEJS_VERSION := $(word 1,$(subst ., ,$(shell node -v | cut -c 2-))) diff --git a/flake.nix b/flake.nix index 9116fd2d..60cb579b 100644 --- a/flake.nix +++ b/flake.nix @@ -16,6 +16,17 @@ # # tinygo version # +# But you'll need a bit more to make TinyGo actually able to compile code: +# +# make llvm-source # fetch compiler-rt +# git submodule update --init # fetch lots of other libraries and SVD files +# make gen-device -j4 # build src/device/*/*.go files +# make wasi-libc # build support for wasi/wasm +# +# With this, you should have an environment that can compile anything - except +# for the Xtensa architecture (ESP8266/ESP32) because support for that lives in +# a separate LLVM fork. +# # You can also do many other things from this environment. Building and flashing # should work as you're used to: it's not a VM or container so there are no # access restrictions and you're running in the same host environment - just @@ -55,7 +66,8 @@ shellHook= '' # Ugly hack to make the Clang resources directory available. # Perhaps there is a cleaner way to do it, but this works. - export GOFLAGS="\"-ldflags=-X github.com/tinygo-org/tinygo/goenv.clangResourceDir=${llvmPackages_16.clang.cc.lib}/lib/clang/16"\" + export CLANG_RESOURCE_DIR="${llvmPackages_16.clang.cc.lib}/lib/clang/16" + export GOFLAGS="\"-ldflags=-X github.com/tinygo-org/tinygo/goenv.clangResourceDir=$CLANG_RESOURCE_DIR"\" ''; }; }