mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-12 15:03:41 +00:00
Be able to actually run the blinky example on an nRF
runtime.Sleep() doesn't work yet so it prints a lot of data. Also, this depends on a small patch to nrfx.
This commit is contained in:
@@ -2,27 +2,96 @@
|
||||
# aliases
|
||||
all: tgo
|
||||
tgo: build/tgo
|
||||
test: build/hello.o
|
||||
|
||||
.PHONY: all tgo test run-test clean
|
||||
.PHONY: all tgo run-hello run-blinky flash-blinky clean
|
||||
|
||||
CFLAGS = -Wall -Werror -O2 -g -flto
|
||||
# Custom LLVM toolchain.
|
||||
LLVM =
|
||||
LINK = $(LLVM)llvm-link
|
||||
LLC = $(LLVM)llc
|
||||
|
||||
build/tgo: *.go
|
||||
@mkdir -p build
|
||||
@go build -o build/tgo -i .
|
||||
CFLAGS = -Wall -Werror -Os -g -fno-exceptions -flto -ffunction-sections -fdata-sections $(LLFLAGS)
|
||||
|
||||
build/hello.o: build/tgo src/examples/hello/*.go src/runtime/*.go
|
||||
@./build/tgo -printir -o build/hello.o examples/hello
|
||||
RUNTIME = build/runtime.bc
|
||||
|
||||
build/runtime.o: src/runtime/*.c src/runtime/*.h
|
||||
clang $(CFLAGS) -c -o $@ src/runtime/*.c
|
||||
ifeq ($(TARGET),pca10040)
|
||||
GCC = arm-none-eabi-gcc
|
||||
LD = arm-none-eabi-ld -T arm.ld
|
||||
OBJCOPY = arm-none-eabi-objcopy
|
||||
LLFLAGS += -target armv7m-none-eabi
|
||||
TGOFLAGS += -target $(TARGET)
|
||||
CFLAGS += -I$(CURDIR)/src/runtime
|
||||
CFLAGS += -I$(CURDIR)/lib/nrfx
|
||||
CFLAGS += -I$(CURDIR)/lib/nrfx/mdk
|
||||
CFLAGS += -I$(CURDIR)/lib/CMSIS/CMSIS/Include
|
||||
CFLAGS += -DNRF52832_XXAA
|
||||
CFLAGS += -Wno-uninitialized
|
||||
RUNTIME += build/runtime_nrf.bc
|
||||
RUNTIME += build/system_nrf52.bc
|
||||
OBJ += build/startup_nrf51.o # TODO nrf52, see https://bugs.llvm.org/show_bug.cgi?id=31601
|
||||
|
||||
build/hello: build/hello.o build/runtime.o
|
||||
@clang $(CFLAGS) -o $@ $^
|
||||
else
|
||||
# Regular *nix system.
|
||||
GCC = gcc
|
||||
LD = clang
|
||||
endif
|
||||
|
||||
run-test: build/hello
|
||||
@./build/hello
|
||||
|
||||
|
||||
run-hello: build/hello
|
||||
./build/hello
|
||||
|
||||
run-blinky: build/blinky
|
||||
./build/blinky
|
||||
|
||||
flash-blinky: build/blinky.hex
|
||||
nrfjprog -f nrf52 --sectorerase --program $< --reset
|
||||
|
||||
clean:
|
||||
@rm -rf build
|
||||
|
||||
|
||||
|
||||
# Build the Go compiler.
|
||||
build/tgo: *.go
|
||||
@mkdir -p build
|
||||
go build -o build/tgo -i .
|
||||
|
||||
# Build textual IR with the Go compiler.
|
||||
build/%.ll: src/examples/% src/examples/%/*.go build/tgo src/runtime/*.go
|
||||
./build/tgo $(TGOFLAGS) -printir -o $@ $(subst src/,,$<)
|
||||
|
||||
# Compile C sources for the runtime.
|
||||
build/%.bc: src/runtime/%.c src/runtime/*.h
|
||||
@mkdir -p build
|
||||
clang $(CFLAGS) -c -o $@ $<
|
||||
|
||||
# Compile system_* file for the nRF.
|
||||
build/%.bc: lib/nrfx/mdk/%.c
|
||||
@mkdir -p build
|
||||
clang $(CFLAGS) -c -o $@ $^
|
||||
|
||||
# Compile startup_* file for the nRF.
|
||||
build/%.o: lib/nrfx/mdk/gcc_%.S
|
||||
@mkdir -p build
|
||||
clang $(CFLAGS) -c -o $@ $^
|
||||
|
||||
# Merge all LLVM files together in a single bitcode file.
|
||||
build/%.bc: $(RUNTIME) build/%.ll
|
||||
$(LINK) -o $@ $^
|
||||
|
||||
# Generate an ELF object file from a LLVM bitcode file.
|
||||
build/%.o: build/%.bc
|
||||
$(LLC) -filetype=obj -O2 -o $@ $^
|
||||
|
||||
# Generate output ELF executable.
|
||||
build/%: build/%.o $(OBJ)
|
||||
$(LD) -o $@ $^
|
||||
|
||||
# Generate output ELF for use in objcopy (on a microcontroller).
|
||||
build/%.elf: build/%.o $(OBJ)
|
||||
$(LD) -o $@ $^
|
||||
|
||||
# Convert executable to Intel hex file (for flashing).
|
||||
build/%.hex: build/%.elf
|
||||
$(OBJCOPY) -O ihex $^ $@
|
||||
|
||||
Reference in New Issue
Block a user