
This interpreter currently complements the Go SSA level interpreter. It may stay complementary or may be the only interpreter in the future. This interpreter is experimental and not yet finished (there are known bugs!) so it is disabled by default. It can be enabled by passing the -initinterp flag. The goal is to be able to run all initializations at compile time except for the ones having side effects. This mostly works except perhaps for a few edge cases. In the future, this interpeter may be used to actually run regular Go code, perhaps in a shell.
101 строка
2,6 КиБ
Makefile
101 строка
2,6 КиБ
Makefile
|
|
# aliases
|
|
all: tgo
|
|
tgo: build/tgo
|
|
|
|
.PHONY: all tgo run-test run-blinky run-blinky2 clean fmt gen-device gen-device-nrf gen-device-avr
|
|
|
|
TARGET ?= unix
|
|
|
|
ifeq ($(TARGET),unix)
|
|
# Regular *nix system.
|
|
|
|
else ifeq ($(TARGET),pca10040)
|
|
# PCA10040: nRF52832 development board
|
|
OBJCOPY = arm-none-eabi-objcopy
|
|
TGOFLAGS += -target $(TARGET)
|
|
|
|
else ifeq ($(TARGET),microbit)
|
|
# BBC micro:bit
|
|
OBJCOPY = arm-none-eabi-objcopy
|
|
TGOFLAGS += -target $(TARGET)
|
|
|
|
else ifeq ($(TARGET),bluepill)
|
|
# "blue pill" development board
|
|
# See: https://wiki.stm32duino.com/index.php?title=Blue_Pill
|
|
OBJCOPY = arm-none-eabi-objcopy
|
|
TGOFLAGS += -target $(TARGET)
|
|
|
|
else ifeq ($(TARGET),arduino)
|
|
OBJCOPY = avr-objcopy
|
|
TGOFLAGS += -target $(TARGET)
|
|
|
|
else
|
|
$(error Unknown target)
|
|
|
|
endif
|
|
|
|
|
|
|
|
run-test: build/test
|
|
./build/test
|
|
|
|
run-blinky: run-blinky2
|
|
run-blinky2: build/blinky2
|
|
./build/blinky2
|
|
|
|
ifeq ($(TARGET),pca10040)
|
|
flash-%: build/%.hex
|
|
nrfjprog -f nrf52 --sectorerase --program $< --reset
|
|
else ifeq ($(TARGET),microbit)
|
|
flash-%: build/%.hex
|
|
openocd -f interface/cmsis-dap.cfg -f target/nrf51.cfg -c 'program $< reset exit'
|
|
else ifeq ($(TARGET),arduino)
|
|
flash-%: build/%.hex
|
|
avrdude -c arduino -p atmega328p -P /dev/ttyACM0 -U flash:w:$<
|
|
else ifeq ($(TARGET),bluepill)
|
|
flash-%: build/%.hex
|
|
openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c 'program $< reset exit'
|
|
endif
|
|
|
|
clean:
|
|
@rm -rf build
|
|
|
|
fmt:
|
|
@go fmt . ./compiler ./interp ./ir ./src/device/arm ./src/examples/* ./src/machine ./src/runtime ./src/sync
|
|
@go fmt ./testdata/*.go
|
|
|
|
test:
|
|
@go test -v .
|
|
|
|
gen-device: gen-device-avr gen-device-nrf gen-device-stm32
|
|
|
|
gen-device-avr:
|
|
./tools/gen-device-avr.py lib/avr/packs/atmega src/device/avr/
|
|
go fmt ./src/device/avr
|
|
|
|
gen-device-nrf:
|
|
./tools/gen-device-svd.py lib/nrfx/mdk/ src/device/nrf/ --source=https://github.com/NordicSemiconductor/nrfx/tree/master/mdk
|
|
go fmt ./src/device/nrf
|
|
|
|
gen-device-stm32:
|
|
./tools/gen-device-svd.py lib/cmsis-svd/data/STMicro/ src/device/stm32/ --source=https://github.com/posborne/cmsis-svd/tree/master/data/STMicro
|
|
go fmt ./src/device/stm32
|
|
|
|
|
|
# Build the Go compiler.
|
|
build/tgo: *.go compiler/*.go ir/*.go
|
|
@mkdir -p build
|
|
go build -o build/tgo -i .
|
|
|
|
# Binary that can run on the host.
|
|
build/%: src/examples/% src/examples/%/*.go build/tgo src/runtime/*.go
|
|
./build/tgo build $(TGOFLAGS) -size=short -o $@ $(subst src/,,$<)
|
|
|
|
# ELF file that can run on a microcontroller.
|
|
build/%.elf: src/examples/% src/examples/%/*.go build/tgo src/runtime/*.go
|
|
./build/tgo build $(TGOFLAGS) -size=short -o $@ $(subst src/,,$<)
|
|
|
|
# Convert executable to Intel hex file (for flashing).
|
|
build/%.hex: build/%.elf
|
|
$(OBJCOPY) -O ihex $^ $@
|