-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
194 lines (165 loc) · 7.15 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
185
186
187
188
189
190
191
192
193
194
###############################################################################
#
# Author: Jiri Novotny <jiri.novotny@logicelements.cz>
#
###############################################################################
# you can set buildroot source
BUILDROOT_USE_GIT=0
# you can set buildroot git version (branch or tag)
BUILDROOT_BRANCH=master
# you can set buildroot static version
BUILDROOT_RELEASE=buildroot-2024.02
# you current project name
PROJECT?=h2audio
DEFCONFIG?=$(PROJECT)_defconfig
DEPLOY_UBOOT_MBR?=0
# you can modify paths for target deployment
MOUNT_PATH=/mnt
# you probably dont want to change buildroot source url
BUILDROOT_GIT=git://git.buildroot.net/buildroot
BUILDROOT_URL=https://buildroot.org/downloads/$(BUILDROOT_RELEASE).tar.gz
TOOLCHAIN_RELEASE=armv7-eabihf--musl--stable-2023.11-1
TOOLCHAIN_URL=https://toolchains.bootlin.com/downloads/releases/toolchains/armv7-eabihf/tarballs/$(TOOLCHAIN_RELEASE).tar.bz2
TOOLCHAIN64_RELEASE=aarch64--musl--stable-2021.11-1
TOOLCHAIN64_URL=https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/$(TOOLCHAIN64_RELEASE).tar.bz2
# dont edit after this line
BUILD_PATH=$(PROJECT)
EXTRA_PATH=extra
SRC_PATH=src
.PHONY: prepare
# Do not build "linux" by default since it is already built as part of Buildroot
all: prepare defconfig image
prepare: toolchain
if [ ! -d $(SRC_PATH)/buildroot ]; then \
if [ $(BUILDROOT_USE_GIT) -eq 0 ]; then \
wget -O /tmp/buildroot.tar.gz $(BUILDROOT_URL); \
tar zxf /tmp/buildroot.tar.gz -C /tmp; \
mv /tmp/$(BUILDROOT_RELEASE) $(SRC_PATH)/buildroot; \
else \
git clone -b $(BUILDROOT_BRANCH) $(BUILDROOT_GIT) $(SRC_PATH)/buildroot; \
fi; \
fi
toolchain:
if [ ! -d $(SRC_PATH)/toolchain ]; then \
wget -O /tmp/toolchain.tar.bz2 $(TOOLCHAIN_URL); \
tar xf /tmp/toolchain.tar.bz2 -C /tmp; \
mv /tmp/$(TOOLCHAIN_RELEASE) $(SRC_PATH)/toolchain; \
fi
toolchain64:
if [ ! -d $(SRC_PATH)/toolchain64 ]; then \
wget -O /tmp/toolchain64.tar.bz2 $(TOOLCHAIN64_URL); \
tar xf /tmp/toolchain64.tar.bz2 -C /tmp; \
mv /tmp/$(TOOLCHAIN64_RELEASE) $(SRC_PATH)/toolchain64; \
fi
uboot:
$(MAKE) BR2_EXTERNAL=../$(EXTRA_PATH) -C $(SRC_PATH)/buildroot O=../../$(BUILD_PATH) uboot
uboot_clean:
$(MAKE) BR2_EXTERNAL=../$(EXTRA_PATH) -C $(SRC_PATH)/buildroot O=../../$(BUILD_PATH) uboot-dirclean
linux:
$(MAKE) BR2_EXTERNAL=../$(EXTRA_PATH) -C $(SRC_PATH)/buildroot O=../../$(BUILD_PATH) linux
linux_clean:
$(MAKE) BR2_EXTERNAL=../$(EXTRA_PATH) -C $(SRC_PATH)/buildroot O=../../$(BUILD_PATH) linux-dirclean
linux_config:
$(MAKE) BR2_EXTERNAL=../$(EXTRA_PATH) -C $(SRC_PATH)/buildroot O=../../$(BUILD_PATH) linux-menuconfig
cp $(BUILD_PATH)/build/`find $(BUILD_PATH)/build/linux-* -maxdepth 0 | grep -v -e headers -e firmware -e tools | cut -d "/" -f 3`/.config $(SRC_PATH)/$(EXTRA_PATH)/board/$(PROJECT)/kernel.cfg
linux_rebuild:
$(MAKE) BR2_EXTERNAL=../$(EXTRA_PATH) -C $(SRC_PATH)/buildroot O=../../$(BUILD_PATH) linux-rebuild
linux_newbuild:
rm -rf $(SRC_PATH)/buildroot/dl/`find $(BUILD_PATH)/build/linux-* -maxdepth 0 | grep -v -e headers -e firmware | cut -d "/" -f 3`.tar.gz
$(MAKE) BR2_EXTERNAL=../$(EXTRA_PATH) -C $(SRC_PATH)/buildroot O=../../$(BUILD_PATH) linux-dirclean
$(MAKE) BR2_EXTERNAL=../$(EXTRA_PATH) -C $(SRC_PATH)/buildroot O=../../$(BUILD_PATH) linux
image:
$(MAKE) BR2_EXTERNAL=../$(EXTRA_PATH) -C $(SRC_PATH)/buildroot O=../../$(BUILD_PATH)
config:
$(MAKE) BR2_EXTERNAL=../$(EXTRA_PATH) -C $(SRC_PATH)/buildroot O=../../$(BUILD_PATH) menuconfig
defconfig:
$(MAKE) BR2_EXTERNAL=../$(EXTRA_PATH) -C $(SRC_PATH)/buildroot O=../../$(BUILD_PATH) $(DEFCONFIG)
save:
$(MAKE) BR2_EXTERNAL=../$(EXTRA_PATH) -C $(SRC_PATH)/buildroot O=../../$(BUILD_PATH) savedefconfig
clean:
$(MAKE) BR2_EXTERNAL=../$(EXTRA_PATH) -C $(SRC_PATH)/buildroot O=../../$(BUILD_PATH) clean
distclean:
rm -rf `find . -maxdepth 1 ! -path . -type d | grep -v -e Makefile -e README -e $(SRC_PATH) -e .git`
mrproper: distclean
rm -rf $(SRC_PATH)/toolchain
rm -rf $(SRC_PATH)/toolchain64
rm -rf $(SRC_PATH)/buildroot
install: prepare image
ifdef DRIVE
# Deploy image
echo -e "d\n\nd\n\nd\n\nd\no\n\nn\np\n1\n8192\n\n\nw\n" | sudo fdisk $(DRIVE)
if [ $(DEPLOY_UBOOT_MBR) -eq 1 ]; then \
sudo dd if=$(BUILD_PATH)/images/u-boot-sunxi-with-spl.bin of=$(DRIVE) bs=1024 seek=8; \
fi
sleep 1
sudo mkfs.ext4 -F -L rootfs $(DRIVE)1
sudo mount $(DRIVE)1 $(MOUNT_PATH)
sudo tar -xf $(BUILD_PATH)/images/rootfs.tar -C $(MOUNT_PATH)
if [ $(DEPLOY_UBOOT_MBR) -eq 1 ]; then \
sudo cp $(BUILD_PATH)/images/u-boot-sunxi-with-spl.bin $(MOUNT_PATH)/boot; \
fi
sudo umount $(MOUNT_PATH)
else
$(info Define DRIVE variable (e.g. DRIVE=/dev/sdx))
endif
update: image
ifdef DRIVE
# Deploy new kernel and modules
sudo mount $(DRIVE)1 $(MOUNT_PATH)
sudo rm -rf $(MOUNT_PATH)/boot/*
sudo rm -rf $(MOUNT_PATH)/lib/modules/*
sudo cp $(BUILD_PATH)/images/zImage $(MOUNT_PATH)/boot
sudo cp $(BUILD_PATH)/images/*.dtb $(MOUNT_PATH)/boot
sudo tar -C $(MOUNT_PATH) -xf $(BUILD_PATH)/images/rootfs.tar ./lib/modules
sudo umount $(MOUNT_PATH)
else
$(info Define DRIVE variable (e.g. DRIVE=/dev/sdc))
endif
deploymx: image
ifdef DRIVE
sudo mkfs.ext4 -F -L rootfs $(DRIVE)1
sudo mount $(DRIVE)1 $(MOUNT_PATH)
sudo tar -xf $(BUILD_PATH)/images/rootfs.tar -C $(MOUNT_PATH)
sudo mkdir $(MOUNT_PATH)/boot
sudo cp $(BUILD_PATH)/images/zImage $(MOUNT_PATH)/boot
sudo cp $(BUILD_PATH)/images/*.dtb $(MOUNT_PATH)/boot
sudo umount $(MOUNT_PATH)
else
$(info Define DRIVE variable (e.g. DRIVE=/dev/sdc))
endif
copy: prepare image
ifdef TARGET
if [ ! -d $(TARGET)/$(PROJECT) ]; then sudo mkdir $(TARGET)/$(PROJECT); fi
sudo cp $(BUILD_PATH)/images/* $(TARGET)/$(PROJECT)
else
$(info Define TARGET variable (e.g. TARGET=/mnt/))
endif
projects:
# a13som_audio - audio server on Olimex A13 SoM
# espresso - Marvell EspressoBin testing image
# h2zero - Orange Pi Zero testing image
# h2audio - Orange Pi Zero audio box
# licheenano - Lichee Pi Nano testing image
# licheezero - Lichee Pi Zero testing image
# raspi - Raspberry Pi 3 testing image
#
# Usage: PROJECT=h2zero make
help:
# all - default rule for build, triggers prepare and buildroot
# image - filesystem
# clean - remove filesystem
# config - start buildroot filesystem menuconfig
# defconfig - buildroot filesystem default config
# savedefconfig - save buildroot filesystem default config
# linux - build linux separately
# linux_clean - clean linux
# linux_config - start linux menuconfig
# linux_rebuild - start linux rebuild
# linux_newbuild - start new (clean) linux build
# prepare - download all required resources
# projects - list supported projects
# install - requires variable DRIVE, prepare partitions on DRIVE, optional DEPLOY_UBOOT_MBR
# copy - requires variable TARGET, mounts TARGET and copy files
# update - requires variable DRIVE, mounts DRIVE and updates kernel, dtb and modules
# uboot - build uboot
# uboot_clean - clean uboot