1SUMMARY = "Universal Boot Loader for embedded devices"
2PROVIDES = "virtual/bootloader"
3
4PACKAGE_ARCH = "${MACHINE_ARCH}"
5
6DEPENDS += "${@bb.utils.contains('UBOOT_ENV_SUFFIX', 'scr', 'u-boot-mkimage-native', '', d)}"
7
8inherit uboot-config uboot-extlinux-config uboot-sign deploy python3native kernel-arch
9
10DEPENDS += "swig-native"
11
12EXTRA_OEMAKE = 'CROSS_COMPILE=${TARGET_PREFIX} CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS} ${DEBUG_PREFIX_MAP}" V=1'
13EXTRA_OEMAKE += 'HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}"'
14EXTRA_OEMAKE += 'STAGING_INCDIR=${STAGING_INCDIR_NATIVE} STAGING_LIBDIR=${STAGING_LIBDIR_NATIVE}'
15
16PACKAGECONFIG ??= "openssl"
17# u-boot will compile its own tools during the build, with specific
18# configurations (aka when CONFIG_FIT_SIGNATURE is enabled) openssl is needed as
19# a host build dependency.
20PACKAGECONFIG[openssl] = ",,openssl-native"
21
22# Allow setting an additional version string that will be picked up by the
23# u-boot build system and appended to the u-boot version.  If the .scmversion
24# file already exists it will not be overwritten.
25UBOOT_LOCALVERSION ?= ""
26
27require u-boot-configure.inc
28
29do_savedefconfig() {
30	bbplain "Saving defconfig to:\n${B}/defconfig"
31	oe_runmake -C ${B} savedefconfig
32}
33do_savedefconfig[nostamp] = "1"
34addtask savedefconfig after do_configure
35UBOOT_ARCH_DIR = "${@'arm' if d.getVar('UBOOT_ARCH').startswith('arm') else d.getVar('UBOOT_ARCH')}"
36do_compile () {
37    if [ "${@bb.utils.filter('DISTRO_FEATURES', 'ld-is-gold', d)}" ]; then
38        sed -i 's/$(CROSS_COMPILE)ld$/$(CROSS_COMPILE)ld.bfd/g' ${S}/config.mk
39    fi
40
41    unset LDFLAGS
42    unset CFLAGS
43    unset CPPFLAGS
44
45    if [ ! -e ${B}/.scmversion -a ! -e ${S}/.scmversion ]
46    then
47        echo ${UBOOT_LOCALVERSION} > ${B}/.scmversion
48        echo ${UBOOT_LOCALVERSION} > ${S}/.scmversion
49    fi
50
51    if [ -n "${UBOOT_CONFIG}" -o -n "${UBOOT_DELTA_CONFIG}" ]
52    then
53        unset i j k
54        for config in ${UBOOT_MACHINE}; do
55            i=$(expr $i + 1);
56            for type in ${UBOOT_CONFIG}; do
57                j=$(expr $j + 1);
58                if [ $j -eq $i ]
59                then
60                    oe_runmake -C ${S} O=${B}/${config} ${UBOOT_MAKE_TARGET}
61                    for binary in ${UBOOT_BINARIES}; do
62                        k=$(expr $k + 1);
63                        if [ $k -eq $i ]; then
64                            cp ${B}/${config}/${binary} ${B}/${config}/${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX}
65                        fi
66                    done
67
68                    # Generate the uboot-initial-env
69                    if [ -n "${UBOOT_INITIAL_ENV}" ]; then
70                        oe_runmake -C ${S} O=${B}/${config} u-boot-initial-env
71                        cp ${B}/${config}/u-boot-initial-env ${B}/${config}/u-boot-initial-env-${type}
72                    fi
73
74                    unset k
75                fi
76            done
77            unset j
78        done
79        unset i
80    else
81        oe_runmake -C ${S} O=${B} ${UBOOT_MAKE_TARGET}
82
83        # Generate the uboot-initial-env
84        if [ -n "${UBOOT_INITIAL_ENV}" ]; then
85            oe_runmake -C ${S} O=${B} u-boot-initial-env
86        fi
87    fi
88
89    if [ -n "${UBOOT_ENV}" ] && [ "${UBOOT_ENV_SUFFIX}" = "scr" ]
90    then
91        ${UBOOT_MKIMAGE} -C none -A ${UBOOT_ARCH} -T script -d ${WORKDIR}/${UBOOT_ENV_SRC} ${WORKDIR}/${UBOOT_ENV_BINARY}
92    fi
93}
94
95do_install () {
96    if [ -n "${UBOOT_CONFIG}" ]
97    then
98        for config in ${UBOOT_MACHINE}; do
99            i=$(expr $i + 1);
100            for type in ${UBOOT_CONFIG}; do
101                j=$(expr $j + 1);
102                if [ $j -eq $i ]
103                then
104                    install -D -m 644 ${B}/${config}/${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX}
105                    ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARY}-${type}
106                    ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARY}
107
108                    # Install the uboot-initial-env
109                    if [ -n "${UBOOT_INITIAL_ENV}" ]; then
110                        install -D -m 644 ${B}/${config}/u-boot-initial-env-${type} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR}
111                        ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${MACHINE}-${type}
112                        ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${type}
113                        ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}
114                    fi
115                fi
116            done
117            unset j
118        done
119        unset i
120    else
121        install -D -m 644 ${B}/${UBOOT_BINARY} ${D}/boot/${UBOOT_IMAGE}
122        ln -sf ${UBOOT_IMAGE} ${D}/boot/${UBOOT_BINARY}
123
124        # Install the uboot-initial-env
125        if [ -n "${UBOOT_INITIAL_ENV}" ]; then
126            install -D -m 644 ${B}/u-boot-initial-env ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR}
127            ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${MACHINE}
128            ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}
129        fi
130    fi
131
132    if [ -n "${UBOOT_ELF}" ]
133    then
134        if [ -n "${UBOOT_CONFIG}" ]
135        then
136            for config in ${UBOOT_MACHINE}; do
137                i=$(expr $i + 1);
138                for type in ${UBOOT_CONFIG}; do
139                    j=$(expr $j + 1);
140                    if [ $j -eq $i ]
141                    then
142                        install -m 644 ${B}/${config}/${UBOOT_ELF} ${D}/boot/u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX}
143                        ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${D}/boot/${UBOOT_BINARY}-${type}
144                        ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${D}/boot/${UBOOT_BINARY}
145                    fi
146                done
147                unset j
148            done
149            unset i
150        else
151            install -m 644 ${B}/${UBOOT_ELF} ${D}/boot/${UBOOT_ELF_IMAGE}
152            ln -sf ${UBOOT_ELF_IMAGE} ${D}/boot/${UBOOT_ELF_BINARY}
153        fi
154    fi
155
156    if [ -e ${WORKDIR}/fw_env.config ] ; then
157        install -d ${D}${sysconfdir}
158        install -m 644 ${WORKDIR}/fw_env.config ${D}${sysconfdir}/fw_env.config
159    fi
160
161    if [ -n "${SPL_BINARY}" ]
162    then
163        if [ -n "${UBOOT_CONFIG}" ]
164        then
165            for config in ${UBOOT_MACHINE}; do
166                i=$(expr $i + 1);
167                for type in ${UBOOT_CONFIG}; do
168                    j=$(expr $j + 1);
169                    if [ $j -eq $i ]
170                    then
171                         install -m 644 ${B}/${config}/${SPL_BINARY} ${D}/boot/${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX}
172                         ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${D}/boot/${SPL_BINARYFILE}-${type}
173                         ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${D}/boot/${SPL_BINARYFILE}
174                    fi
175                done
176                unset j
177            done
178            unset i
179        else
180            install -m 644 ${B}/${SPL_BINARY} ${D}/boot/${SPL_IMAGE}
181            ln -sf ${SPL_IMAGE} ${D}/boot/${SPL_BINARYFILE}
182        fi
183    fi
184
185    if [ -n "${UBOOT_ENV}" ]
186    then
187        install -m 644 ${WORKDIR}/${UBOOT_ENV_BINARY} ${D}/boot/${UBOOT_ENV_IMAGE}
188        ln -sf ${UBOOT_ENV_IMAGE} ${D}/boot/${UBOOT_ENV_BINARY}
189    fi
190
191    if [ "${UBOOT_EXTLINUX}" = "1" ]
192    then
193        install -Dm 0644 ${UBOOT_EXTLINUX_CONFIG} ${D}/${UBOOT_EXTLINUX_INSTALL_DIR}/${UBOOT_EXTLINUX_CONF_NAME}
194    fi
195}
196
197PACKAGE_BEFORE_PN += "${PN}-env ${PN}-extlinux"
198
199RPROVIDES:${PN}-env += "u-boot-default-env"
200ALLOW_EMPTY:${PN}-env = "1"
201FILES:${PN}-env = " \
202    ${@ '${sysconfdir}/${UBOOT_INITIAL_ENV}*' if d.getVar('UBOOT_INITIAL_ENV') else ''} \
203    ${sysconfdir}/fw_env.config \
204"
205
206FILES:${PN}-extlinux = "${UBOOT_EXTLINUX_INSTALL_DIR}/${UBOOT_EXTLINUX_CONF_NAME}"
207RDEPENDS:${PN} += "${@bb.utils.contains('UBOOT_EXTLINUX', '1', '${PN}-extlinux', '', d)}"
208
209SYSROOT_DIRS += "/boot"
210FILES:${PN} = "/boot ${datadir}"
211RDEPENDS:${PN} += "${PN}-env"
212
213do_deploy () {
214    if [ -n "${UBOOT_CONFIG}" ]
215    then
216        for config in ${UBOOT_MACHINE}; do
217            i=$(expr $i + 1);
218            for type in ${UBOOT_CONFIG}; do
219                j=$(expr $j + 1);
220                if [ $j -eq $i ]
221                then
222                    install -D -m 644 ${B}/${config}/${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX} ${DEPLOYDIR}/${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX}
223                    cd ${DEPLOYDIR}
224                    ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_SYMLINK}-${type}
225                    ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_SYMLINK}
226                    ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_BINARY}-${type}
227                    ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_BINARY}
228
229                    # Deploy the uboot-initial-env
230                    if [ -n "${UBOOT_INITIAL_ENV}" ]; then
231                        install -D -m 644 ${B}/${config}/u-boot-initial-env-${type} ${DEPLOYDIR}/${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR}
232                        cd ${DEPLOYDIR}
233                        ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}
234                        ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${UBOOT_INITIAL_ENV}-${type}
235                    fi
236                fi
237            done
238            unset j
239        done
240        unset i
241    else
242        install -D -m 644 ${B}/${UBOOT_BINARY} ${DEPLOYDIR}/${UBOOT_IMAGE}
243
244        cd ${DEPLOYDIR}
245        rm -f ${UBOOT_BINARY} ${UBOOT_SYMLINK}
246        ln -sf ${UBOOT_IMAGE} ${UBOOT_SYMLINK}
247        ln -sf ${UBOOT_IMAGE} ${UBOOT_BINARY}
248
249        # Deploy the uboot-initial-env
250        if [ -n "${UBOOT_INITIAL_ENV}" ]; then
251            install -D -m 644 ${B}/u-boot-initial-env ${DEPLOYDIR}/${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR}
252            cd ${DEPLOYDIR}
253            ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} ${UBOOT_INITIAL_ENV}-${MACHINE}
254            ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} ${UBOOT_INITIAL_ENV}
255        fi
256    fi
257
258    if [ -e ${WORKDIR}/fw_env.config ] ; then
259        install -D -m 644 ${WORKDIR}/fw_env.config ${DEPLOYDIR}/fw_env.config-${MACHINE}-${PV}-${PR}
260        cd ${DEPLOYDIR}
261        ln -sf fw_env.config-${MACHINE}-${PV}-${PR} fw_env.config-${MACHINE}
262        ln -sf fw_env.config-${MACHINE}-${PV}-${PR} fw_env.config
263    fi
264
265    if [ -n "${UBOOT_ELF}" ]
266    then
267        if [ -n "${UBOOT_CONFIG}" ]
268        then
269            for config in ${UBOOT_MACHINE}; do
270                i=$(expr $i + 1);
271                for type in ${UBOOT_CONFIG}; do
272                    j=$(expr $j + 1);
273                    if [ $j -eq $i ]
274                    then
275                        install -m 644 ${B}/${config}/${UBOOT_ELF} ${DEPLOYDIR}/u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX}
276                        ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_BINARY}-${type}
277                        ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_BINARY}
278                        ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK}-${type}
279                        ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK}
280                    fi
281                done
282                unset j
283            done
284            unset i
285        else
286            install -m 644 ${B}/${UBOOT_ELF} ${DEPLOYDIR}/${UBOOT_ELF_IMAGE}
287            ln -sf ${UBOOT_ELF_IMAGE} ${DEPLOYDIR}/${UBOOT_ELF_BINARY}
288            ln -sf ${UBOOT_ELF_IMAGE} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK}
289        fi
290    fi
291
292
293     if [ -n "${SPL_BINARY}" ]
294     then
295        if [ -n "${UBOOT_CONFIG}" ]
296        then
297            for config in ${UBOOT_MACHINE}; do
298                i=$(expr $i + 1);
299                for type in ${UBOOT_CONFIG}; do
300                    j=$(expr $j + 1);
301                    if [ $j -eq $i ]
302                    then
303                        install -m 644 ${B}/${config}/${SPL_BINARY} ${DEPLOYDIR}/${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX}
304                        rm -f ${DEPLOYDIR}/${SPL_BINARYFILE} ${DEPLOYDIR}/${SPL_SYMLINK}
305                        ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_BINARYFILE}-${type}
306                        ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_BINARYFILE}
307                        ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_SYMLINK}-${type}
308                        ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_SYMLINK}
309                    fi
310                done
311                unset j
312            done
313            unset i
314        else
315            install -m 644 ${B}/${SPL_BINARY} ${DEPLOYDIR}/${SPL_IMAGE}
316            ln -sf ${SPL_IMAGE} ${DEPLOYDIR}/${SPL_BINARYNAME}
317            ln -sf ${SPL_IMAGE} ${DEPLOYDIR}/${SPL_SYMLINK}
318        fi
319    fi
320
321    if [ -n "${UBOOT_ENV}" ]
322    then
323        install -m 644 ${WORKDIR}/${UBOOT_ENV_BINARY} ${DEPLOYDIR}/${UBOOT_ENV_IMAGE}
324        ln -sf ${UBOOT_ENV_IMAGE} ${DEPLOYDIR}/${UBOOT_ENV_BINARY}
325        ln -sf ${UBOOT_ENV_IMAGE} ${DEPLOYDIR}/${UBOOT_ENV_SYMLINK}
326    fi
327
328    if [ "${UBOOT_EXTLINUX}" = "1" ]
329    then
330        install -m 644 ${UBOOT_EXTLINUX_CONFIG} ${DEPLOYDIR}/${UBOOT_EXTLINUX_SYMLINK}
331        ln -sf ${UBOOT_EXTLINUX_SYMLINK} ${DEPLOYDIR}/${UBOOT_EXTLINUX_CONF_NAME}-${MACHINE}
332        ln -sf ${UBOOT_EXTLINUX_SYMLINK} ${DEPLOYDIR}/${UBOOT_EXTLINUX_CONF_NAME}
333    fi
334
335    if [ -n "${UBOOT_DTB}" ]
336    then
337        install -m 644 ${B}/arch/${UBOOT_ARCH_DIR}/dts/${UBOOT_DTB_BINARY} ${DEPLOYDIR}/
338    fi
339}
340
341addtask deploy before do_build after do_compile
342