aboutsummaryrefslogtreecommitdiff
path: root/sysutils/u-boot-master/Makefile
blob: 646876fdb26108ec9a8dde978f0b26fb5957b0d1 (plain) (blame)
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
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
#
# Common infrastructure for u-boot ports
#

PORTNAME=	u-boot
PORTVERSION=	${UBOOT_VERSION}
CATEGORIES=	sysutils
PKGNAMESUFFIX?=	-${MODEL}
MASTER_SITES=	https://ftp.denx.de/pub/u-boot/ \
		ftp://ftp.denx.de/pub/u-boot/
DIST_SUBDIR=	u-boot

MAINTAINER?=	uboot@FreeBSD.org
COMMENT=	Cross-build das u-boot for model ${MODEL}
WWW?=		https://www.denx.de/wiki/U-Boot

LICENSE=	GPLv2

BUILD_DEPENDS+=	gsed:textproc/gsed \
		swig:devel/swig \
		dtc>=1.4.1:sysutils/dtc \
		mkimage:sysutils/u-boot-tools \
		${PYTHON_PKGNAMEPREFIX}setuptools-pkg>=0:devel/py-setuptools-pkg@${PY_FLAVOR}
BUILD_DEPENDS+=	${COMPILER}:devel/${COMPILER}

# For mkeficapsule
BUILD_DEPENDS+=	e2fsprogs-libuuid>=0:misc/e2fsprogs-libuuid \
		gnutls>=0:security/gnutls

USES=		bison gmake python:build pkgconfig shebangfix tar:bz2
BINARY_ALIAS=	bison=${LOCALBASE}/bin/bison dtc=${LOCALBASE}/bin/dtc sed=gsed python3=${PYTHON_CMD}

SHEBANG_FILES=	tools/binman/binman
SSP_UNSAFE=	yes
UBOOT_DIR=	share/u-boot/${PORTNAME}${PKGNAMESUFFIX}
INST=		${PREFIX}/${UBOOT_DIR}
DESCR?=		${.CURDIR}/pkg-descr

MAKE_ENV+=	V=1 CROSS_COMPILE=${CROSS_COMPILE} PYTHON=${PYTHON_CMD} CC=clang
MAKE_ARGS+=	${ARCHFLAGS}

NO_ARCH=	yes

# Use upstreamed patches not yet mainlined
PATCH_DIST_STRIP=	-p1
PATCH_SITES+=	https://patchwork.ozlabs.org/patch/

# Sanity checks
.if !defined(MODEL) && !defined(BOARD_CONFIG) && !defined(FAMILY)
MODEL=		NONE
IGNORE=		is a metaport; there is nothing to build
.else
.if !defined(MODEL)
IGNORE+=	MODEL is not defined
.endif
.if !defined(BOARD_CONFIG)
IGNORE+=	BOARD_CONFIG is not defined
.endif
.if !defined(FAMILY)
IGNORE+=	FAMILY is not defined
.endif
.endif

# Overrides for OMAP family
UBOOT_PLIST_OMAP=u-boot.img MLO
UBOOT_METADATA_OMAP_FILES=	${UBOOT_PLIST_OMAP}
UBOOT_METADATA_OMAP_METHOD=	file

# Overrides for ALLWINNER family
UBOOT_PLIST_ALLWINNER=u-boot-sunxi-with-spl.bin
UBOOT_METADATA_ALLWINNER_FILES=		${UBOOT_PLIST_ALLWINNER}
UBOOT_METADATA_ALLWINNER_METHOD=	raw
UBOOT_METADATA_ALLWINNER_RAW_OFFSET=	8
UBOOT_METADATA_ALLWINNER_RAW_BS=	1k

# Overrides for ALLWINNER64 family
UBOOT_PLIST_ALLWINNER64=${UBOOT_PLIST_ALLWINNER}
UBOOT_ARCH_ALLWINNER64=aarch64
UBOOT_METADATA_ALLWINNER64_FILES=	${UBOOT_PLIST_ALLWINNER64}
UBOOT_METADATA_ALLWINNER64_METHOD=	raw
UBOOT_METADATA_ALLWINNER64_RAW_OFFSET=	1
UBOOT_METADATA_ALLWINNER64_RAW_BS=	128k

# Overrides for Zynq 7000 family
UBOOT_PLIST_ZYNQ_7000=u-boot.img boot.bin uEnv.txt
UBOOT_MOVE_ZYNQ_7000=${WRKSRC}/spl/boot.bin ${.CURDIR}/files/uEnv.txt

# Overrides for RPI family
UBOOT_PLIST_RPI=	u-boot.bin
UBOOT_METADATA_RPI_FILES=	${UBOOT_PLIST_RPI}
UBOOT_METADATA_RPI_METHOD=	file

# Overrides for IMX6 family
UBOOT_METADATA_IMX6_FILES=	u-boot.imx
UBOOT_METADATA_IMX6_METHOD=	raw
UBOOT_METADATA_IMX6_RAW_OFFSET=	2
UBOOT_METADATA_IMX6_RAW_BS=	512

# Override for RK3328 family
UBOOT_PLIST_RK3328=	idbloader.img u-boot.itb
UBOOT_ARCH_RK3328=	aarch64

# Override for RK3399 family
UBOOT_PLIST_RK3399=	idbloader.img u-boot.itb
UBOOT_ARCH_RK3399=	aarch64

# Override for ARMADA38X family
UBOOT_PLIST_ARMADA38X=	u-boot-with-spl.kwb
UBOOT_METADATA_ARMADA38X_FILES=		${UBOOT_PLIST_ARMADA38X}
UBOOT_METADATA_ARMADA38X_METHOD=	raw
UBOOT_METADATA_ARMADA38X_RAW_OFFSET=	1
UBOOT_METADATA_ARMADA38X_RAW_BS=	512

# Override for QEMU family
UBOOT_PLIST_QEMU=	u-boot.bin

# Uboot variables
.if !defined(UBOOT_VERSION) && defined(UBOOT_VERSION_${FAMILY:tu})
UBOOT_VERSION=${UBOOT_VERSION_${FAMILY:tu}}
.endif
UBOOT_VERSION?=	2024.01

# If a slave port defines a PORTREVISION use it
.if defined(U_BOOT_SLAVE_PORTREVISION_${UBOOT_VERSION})
PORTREVISION=	${U_BOOT_SLAVE_PORTREVISION_${UBOOT_VERSION}}
.endif

.if !defined(UBOOT_PLIST) && defined(UBOOT_PLIST_${FAMILY:tu})
UBOOT_PLIST=${UBOOT_PLIST_${FAMILY:tu}}
.endif
UBOOT_PLIST?=u-boot.img

.if !defined(UBOOT_ARCH) && defined(UBOOT_ARCH_${FAMILY:tu})
UBOOT_ARCH=${UBOOT_ARCH_${FAMILY:tu}}
.endif
UBOOT_ARCH?=	arm

.if ${UBOOT_ARCH} == arm
CROSS_COMPILE=arm-none-eabi-
ARCHFLAGS=ARCH=${UBOOT_ARCH}
.elif ${UBOOT_ARCH} == aarch64
CROSS_COMPILE=aarch64-none-elf-
ARCHFLAGS=ARCH=arm
.if ${FAMILY} == allwinner64
MAKE_ENV+=	SCP=/dev/null
.endif
.elif ${UBOOT_ARCH} == riscv64
CROSS_COMPILE=riscv64-none-elf-
ARCHFLAGS=ARCH=riscv
.else
# Best guess for other architectures
CROSS_COMPILE=${UBOOT_ARCH}-none-elf-
ARCHFLAGS=ARCH=${UBOOT_ARCH}
.endif
COMPILER?=${CROSS_COMPILE}gcc

.if !defined(UBOOT_MOVE) && defined(UBOOT_MOVE_${FAMILY:tu})
UBOOT_MOVE=${UBOOT_MOVE_${FAMILY:tu}}
.endif

# Per family dependancies
.if defined(FAMILY) && ${FAMILY} == allwinner64
.if defined(SUBFAMILY) && ${SUBFAMILY} == h6
BUILD_DEPENDS+=	${LOCALBASE}/share/atf-sun50i_h6/bl31.bin:sysutils/atf-sun50i_h6
MAKE_ENV+=	BL31=${LOCALBASE}/share/atf-sun50i_h6/bl31.bin
.else
BUILD_DEPENDS+=	${LOCALBASE}/share/atf-sun50i_a64/bl31.bin:sysutils/atf-sun50i_a64
MAKE_ENV+=	BL31=${LOCALBASE}/share/atf-sun50i_a64/bl31.bin
.endif
.endif

.if defined(FAMILY) && ${FAMILY} == rk3328
BUILD_DEPENDS+=	${LOCALBASE}/share/atf-rk3328/bl31.elf:sysutils/atf-rk3328 \
		${PYTHON_PKGNAMEPREFIX}pyelftools>0:devel/py-pyelftools@${PY_FLAVOR}
MAKE_ENV+=	BL31=${LOCALBASE}/share/atf-rk3328/bl31.elf
.endif

.if defined(FAMILY) && ${FAMILY} == rk3399
BUILD_DEPENDS+=	${LOCALBASE}/share/atf-rk3399/bl31.elf:sysutils/atf-rk3399 \
		${PYTHON_PKGNAMEPREFIX}pyelftools>0:devel/py-pyelftools@${PY_FLAVOR}
MAKE_ENV+=	BL31=${LOCALBASE}/share/atf-rk3399/bl31.elf
.endif

# Each u-boot family has different files to include, bring them in.
.for i in ${UBOOT_PLIST}
PLIST_FILES+=	${UBOOT_DIR}/${i}
.endfor
PLIST_FILES+=	${UBOOT_DIR}/README

.if defined(PLIST_EXTRAS)
.for i in ${PLIST_EXTRAS}
PLIST_FILES+=	${UBOOT_DIR}/${i}
.endfor
.endif

.if !defined(NO_METADATA)
.if defined(UBOOT_METADATA_${FAMILY:tu}_METHOD)
METADATA_METHOD=${UBOOT_METADATA_${FAMILY:tu}_METHOD}
METADATA_FILES=${UBOOT_METADATA_${FAMILY:tu}_FILES}
PLIST_FILES+=	${UBOOT_DIR}/metadata
UBOOT_PLIST+=	metadata
.if ${METADATA_METHOD} == "raw"
METADATA_OFFSET=${UBOOT_METADATA_${FAMILY:tu}_RAW_OFFSET}
METADATA_BS=${UBOOT_METADATA_${FAMILY:tu}_RAW_BS}
.elif ${METADATA_METHOD} == "file"
.else
.error "Unsupported METADATA_METHOD"
.endif
.endif
.endif

post-patch:
	@${REINPLACE_CMD} -e "s|make|${MAKE_CMD}|" ${WRKSRC}/scripts/kconfig/merge_config.sh
.if defined(METADATA_METHOD)
	@echo "METHOD=uboot-${METADATA_METHOD}" > ${WRKSRC}/metadata
	@echo "FILES=\"${METADATA_FILES}\"" >> ${WRKSRC}/metadata
.if ${METADATA_METHOD} == "raw"
	@echo "OFFSET=${METADATA_OFFSET}" >> ${WRKSRC}/metadata
	@echo "BS=${METADATA_BS}" >> ${WRKSRC}/metadata
.elif ${METADATA_METHOD} == "file"
.endif
.endif

.if ${UBOOT_ARCH} == arm && !defined(CONFIG_FRAGMENT)
# For armv6/v7 we want do disable secure mode and cache cleaning
# Use a KConfig fragment for that
FRAGMENT_NAME=		FreeBSD_Fragment
CONFIG_FRAGMENT=	${FILESDIR}/${FRAGMENT_NAME}
.endif

.if defined(CONFIG_FRAGMENT)
do-configure:
	${CP} ${CONFIG_FRAGMENT} ${WRKSRC}/configs/
	(cd ${WRKSRC}; ${SETENV} ${CONFIGURE_ENV} ${MAKE_ENV} scripts/kconfig/merge_config.sh configs/${BOARD_CONFIG} configs/${FRAGMENT_NAME})
.else
do-configure:
	(cd ${WRKSRC}; ${SETENV} ${CONFIGURE_ENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_ARGS} ${BOARD_CONFIG})
.endif

post-build:
.if defined(UBOOT_EXTRA_TARGETS)
.for i in ${UBOOT_EXTRA_TARGETS}
	(cd ${WRKSRC}; ${SETENV} ${CONFIGURE_ENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_ARGS} ${i})
.endfor
.endif
# If we need to put anything into WRKSRC, do so now so we can build the PLIST
# in do-install
.if defined(UBOOT_MOVE)
pre-install:
	${CP} ${UBOOT_MOVE} ${WRKSRC}
.endif

do-install:
	${MKDIR} ${STAGEDIR}/${INST}
.for i in ${UBOOT_PLIST}
	${INSTALL_DATA} ${WRKSRC}/${i} ${STAGEDIR}/${INST}
.endfor
	${INSTALL_DATA} ${DESCR} ${STAGEDIR}/${INST}/README

.include <bsd.port.mk>