forked from mithro/HDMI2USB-litex-firmware
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
184 lines (154 loc) · 4.66 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
ifneq ($(OS),Windows_NT)
ifneq "$(HDMI2USB_ENV)" "1"
$(error "Please 'source scripts/setup-env.sh'")
endif
endif
# Turn off Python's hash randomization
PYTHONHASHSEED := 0
export PYTHONHASHSEED
# Default board
BOARD ?= atlys
export BOARD
# Default targets for a given board
ifeq ($(BOARD),pipistrello)
TARGET ?= base
else ifeq ($(BOARD),minispartan6)
TARGET ?= video
else
TARGET ?= hdmi2usb
endif
export TARGET
# Default programmer
PROG ?= openocd
ifneq ($(PROG),)
PROGRAMMER_OPTION ?= --platform-option programmer $(PROG)
endif
FILTER ?= tee -a
MSCDIR ?= third_party/misoc
HDMI2USBDIR = $(realpath .)
PYTHON = python3
LOGFILE ?= $(PWD)/build/output.$(shell date +%Y%m%d-%H%M%S).log
# We use the special PIPESTATUS which is bash only below.
SHELL := /bin/bash
FLASH_PROXIES=$(HDMI2USBDIR)/third_party/flash_proxies
MAKEPY_CMD = \
cd $(MSCDIR) && \
$(PYTHON) \
make.py \
--external $(HDMI2USBDIR) \
--flash-proxy-dir $(FLASH_PROXIES) \
--target $(BOARD)_$(TARGET) \
--target-option firmware_filename $(HDMI2USBDIR)/firmware/lm32/firmware.bin \
--csr_csv $(HDMI2USBDIR)/test/csr.csv \
$(PROGRAMMER_OPTION) \
$(MISOC_EXTRA_CMDLINE)
MAKEIMAGE_CMD = \
cd $(MSCDIR) && \
$(PYTHON) \
mkmscimg.py
FLASHEXTRA_CMD = \
cd $(MSCDIR) && \
$(PYTHON) \
flash_extra.py \
--external $(HDMI2USBDIR) \
--flash-proxy-dir $(FLASH_PROXIES) \
$(PROGRAMMER_OPTION) \
$(BOARD)
ifeq ($(OS),Windows_NT)
FLTERM = $(PYTHON) $(MSCDIR)/tools/flterm.py
else
FLTERM = $(MSCDIR)/tools/flterm
endif
# Every target has a lm32 softcore
include Makefile.lm32
# The edid_debug and hdmi2usb also use the Cypress FX2
ifneq ($(filter $(TARGET),edid_debug hdmi2usb),)
include Makefile.fx2
endif
help:
@echo "Environment:"
@echo " BOARD=atlys OR opsis OR pipistrello (current: $(BOARD))"
@echo " TARGET=base OR hdmi2usb OR hdmi2eth"
@echo " (current: $(TARGET))"
@echo " PROG=programmer (current: $(PROG))"
@echo ""
@if [ ! -z "$(TARGETS)" ]; then echo " Extra firmware needed for: $(TARGETS)"; echo ""; fi
@echo "Targets avaliable:"
@echo " make help"
@echo " make all"
@echo " make gateware"
@echo " make firmware"
@echo " make download-prebuilt"
@echo " make load"
@echo " make flash"
@for T in $(TARGETS); do make -s help-$$T; done
@echo " make clean"
# All target
all: clean gateware firmware
echo "Run 'make load' to load the firmware."
# Initialize submodules automatically
third_party/%/.git: .gitmodules
git submodule sync --recursive -- $$(dirname $@)
git submodule update --recursive --init $$(dirname $@)
touch $@ -r .gitmodules
# Gateware
MODULES=migen misoc liteeth litescope flash_proxies
gateware-submodules: $(addsuffix /.git,$(addprefix third_party/,$(MODULES)))
@true
gateware-generate: gateware-submodules $(addprefix gateware-generate-,$(TARGETS))
@echo 'Building target: $@. First dep: $<'
ifneq ($(OS),Windows_NT)
$(MAKEPY_CMD) --build-option run False build-csr-csv build-bitstream \
| $(FILTER) $(LOGFILE); (exit $${PIPESTATUS[0]})
else
$(MAKEPY_CMD) --build-option run False build-csr-csv build-bitstream
endif
gateware-build: gateware-submodules $(addprefix gateware-build-,$(TARGETS))
ifneq ($(OS),Windows_NT)
$(MAKEPY_CMD) build-csr-csv build-bitstream \
| $(FILTER) $(LOGFILE); (exit $${PIPESTATUS[0]})
else
$(MAKEPY_CMD) build-csr-csv build-bitstream
endif
gateware: gateware-generate gateware-build
@true
# Firmware
firmware: $(addprefix firmware-,$(TARGETS))
@true
# Download pre-built firmware
download-prebuilt:
scripts/download-prebuilt.sh
# Load
load-gateware:
$(MAKEPY_CMD) load-bitstream
load: load-gateware $(addprefix load-,$(TARGETS))
@true
# Flash
flash-gateware: gateware-submodules
$(MAKEPY_CMD) flash-bitstream
@echo ""
@echo ""
@echo "Gateware has been flashed."
flash: flash-gateware $(addprefix flash-,$(TARGETS))
@echo ""
@echo ""
@echo "Power cycle your board to boot newly flashed stuff."
# Clean
clean:
@for T in $(TARGETS); do make clean-$$T; done
if [ -f $(MSCDIR)/software/include/generated/cpu.mak ]; then \
($(MAKEPY_CMD) clean) \
fi
# FIXME - This is a temporarily hack until misoc clean works better.
rm -rf $(MSCDIR)/software/include/generated && ( \
mkdir $(MSCDIR)/software/include/generated && \
touch $(MSCDIR)/software/include/generated/.keep_me)
# Cleanup Python3's __pycache__ directories
find . -name __pycache__ -type d -exec rm -r {} +
# Delete any previously downloaded pre-built firmware
rm -rf build/prebuilt
rm -f third_party/misoc/build/*.bit
rm -f firmware/fx2/hdmi2usb.hex
.DEFAULT_GOAL := help
.NOTPARALLEL: *
.PHONY: help all third_party/* gateware-submodules gateware-generate gateware-build gateware firmware download-prebuilt test