1SUMMARY = "Universal Boot Loader for embedded devices"
2PROVIDES = "virtual/bootloader"
3
4B = "${WORKDIR}/build"
5
6PACKAGE_ARCH = "${MACHINE_ARCH}"
7
8DEPENDS += "kern-tools-native"
9
10inherit uboot-config uboot-extlinux-config uboot-sign deploy cml1 python3native
11
12DEPENDS += "swig-native"
13
14EXTRA_OEMAKE = 'CROSS_COMPILE=${TARGET_PREFIX} CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS}" V=1'
15EXTRA_OEMAKE += 'HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}"'
16EXTRA_OEMAKE += 'STAGING_INCDIR=${STAGING_INCDIR_NATIVE} STAGING_LIBDIR=${STAGING_LIBDIR_NATIVE}'
17
18PACKAGECONFIG ??= "openssl"
19# u-boot will compile its own tools during the build, with specific
20# configurations (aka when CONFIG_FIT_SIGNATURE is enabled) openssl is needed as
21# a host build dependency.
22PACKAGECONFIG[openssl] = ",,openssl-native"
23
24# Allow setting an additional version string that will be picked up by the
25# u-boot build system and appended to the u-boot version.  If the .scmversion
26# file already exists it will not be overwritten.
27UBOOT_LOCALVERSION ?= ""
28
29# returns all the elements from the src uri that are .cfg files
30def find_cfgs(d):
31    sources=src_patches(d, True)
32    sources_list=[]
33    for s in sources:
34        if s.endswith('.cfg'):
35            sources_list.append(s)
36
37    return sources_list
38
39do_configure () {
40    if [ -z "${UBOOT_CONFIG}" ]; then
41        if [ -n "${UBOOT_MACHINE}" ]; then
42            oe_runmake -C ${S} O=${B} ${UBOOT_MACHINE}
43        else
44            oe_runmake -C ${S} O=${B} oldconfig
45        fi
46        merge_config.sh -m .config ${@" ".join(find_cfgs(d))}
47        cml1_do_configure
48    fi
49}
50
51do_compile () {
52	if [ "${@bb.utils.filter('DISTRO_FEATURES', 'ld-is-gold', d)}" ]; then
53		sed -i 's/$(CROSS_COMPILE)ld$/$(CROSS_COMPILE)ld.bfd/g' ${S}/config.mk
54	fi
55
56	unset LDFLAGS
57	unset CFLAGS
58	unset CPPFLAGS
59
60	if [ ! -e ${B}/.scmversion -a ! -e ${S}/.scmversion ]
61	then
62		echo ${UBOOT_LOCALVERSION} > ${B}/.scmversion
63		echo ${UBOOT_LOCALVERSION} > ${S}/.scmversion
64	fi
65
66    if [ -n "${UBOOT_CONFIG}" ]
67    then
68        unset i j k
69        for config in ${UBOOT_MACHINE}; do
70            i=$(expr $i + 1);
71            for type in ${UBOOT_CONFIG}; do
72                j=$(expr $j + 1);
73                if [ $j -eq $i ]
74                then
75                    oe_runmake -C ${S} O=${B}/${config} ${config}
76                    oe_runmake -C ${S} O=${B}/${config} ${UBOOT_MAKE_TARGET}
77                    for binary in ${UBOOT_BINARIES}; do
78                        k=$(expr $k + 1);
79                        if [ $k -eq $i ]; then
80                            cp ${B}/${config}/${binary} ${B}/${config}/u-boot-${type}.${UBOOT_SUFFIX}
81                        fi
82                    done
83                    unset k
84                fi
85            done
86            unset  j
87        done
88        unset  i
89    else
90        oe_runmake -C ${S} O=${B} ${UBOOT_MAKE_TARGET}
91    fi
92
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 ${D}/boot
105                    install -m 644 ${B}/${config}/u-boot-${type}.${UBOOT_SUFFIX} ${D}/boot/u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX}
106                    ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARY}-${type}
107                    ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARY}
108                fi
109            done
110            unset  j
111        done
112        unset  i
113    else
114        install -d ${D}/boot
115        install -m 644 ${B}/${UBOOT_BINARY} ${D}/boot/${UBOOT_IMAGE}
116        ln -sf ${UBOOT_IMAGE} ${D}/boot/${UBOOT_BINARY}
117    fi
118
119    if [ -n "${UBOOT_ELF}" ]
120    then
121        if [ -n "${UBOOT_CONFIG}" ]
122        then
123            for config in ${UBOOT_MACHINE}; do
124                i=$(expr $i + 1);
125                for type in ${UBOOT_CONFIG}; do
126                    j=$(expr $j + 1);
127                    if [ $j -eq $i ]
128                    then
129                        install -m 644 ${B}/${config}/${UBOOT_ELF} ${D}/boot/u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX}
130                        ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${D}/boot/${UBOOT_BINARY}-${type}
131                        ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${D}/boot/${UBOOT_BINARY}
132                    fi
133                done
134                unset j
135            done
136            unset i
137        else
138            install -m 644 ${B}/${UBOOT_ELF} ${D}/boot/${UBOOT_ELF_IMAGE}
139            ln -sf ${UBOOT_ELF_IMAGE} ${D}/boot/${UBOOT_ELF_BINARY}
140        fi
141    fi
142
143    if [ -e ${WORKDIR}/fw_env.config ] ; then
144        install -d ${D}${sysconfdir}
145        install -m 644 ${WORKDIR}/fw_env.config ${D}${sysconfdir}/fw_env.config
146    fi
147
148    if [ -n "${SPL_BINARY}" ]
149    then
150        if [ -n "${UBOOT_CONFIG}" ]
151        then
152            for config in ${UBOOT_MACHINE}; do
153                i=$(expr $i + 1);
154                for type in ${UBOOT_CONFIG}; do
155                    j=$(expr $j + 1);
156                    if [ $j -eq $i ]
157                    then
158                         install -m 644 ${B}/${config}/${SPL_BINARY} ${D}/boot/${SPL_IMAGE}-${type}-${PV}-${PR}
159                         ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${D}/boot/${SPL_BINARYNAME}-${type}
160                         ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${D}/boot/${SPL_BINARYNAME}
161                    fi
162                done
163                unset  j
164            done
165            unset  i
166        else
167            install -m 644 ${B}/${SPL_BINARY} ${D}/boot/${SPL_IMAGE}
168            ln -sf ${SPL_IMAGE} ${D}/boot/${SPL_BINARYNAME}
169        fi
170    fi
171
172    if [ -n "${UBOOT_ENV}" ]
173    then
174        install -m 644 ${WORKDIR}/${UBOOT_ENV_BINARY} ${D}/boot/${UBOOT_ENV_IMAGE}
175        ln -sf ${UBOOT_ENV_IMAGE} ${D}/boot/${UBOOT_ENV_BINARY}
176    fi
177
178    if [ "${UBOOT_EXTLINUX}" = "1" ]
179    then
180        install -Dm 0644 ${UBOOT_EXTLINUX_CONFIG} ${D}/${UBOOT_EXTLINUX_INSTALL_DIR}/${UBOOT_EXTLINUX_CONF_NAME}
181    fi
182
183}
184
185FILES:${PN} = "/boot ${sysconfdir} ${datadir}"
186
187do_deploy () {
188    if [ -n "${UBOOT_CONFIG}" ]
189    then
190        for config in ${UBOOT_MACHINE}; do
191            i=$(expr $i + 1);
192            for type in ${UBOOT_CONFIG}; do
193                j=$(expr $j + 1);
194                if [ $j -eq $i ]
195                then
196                    install -d ${DEPLOYDIR}
197                    install -m 644 ${B}/${config}/u-boot-${type}.${UBOOT_SUFFIX} ${DEPLOYDIR}/u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX}
198                    cd ${DEPLOYDIR}
199                    ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_SYMLINK}-${type}
200                    ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_SYMLINK}
201                    ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_BINARY}-${type}
202                    ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_BINARY}
203                fi
204            done
205            unset  j
206        done
207        unset  i
208    else
209        install -d ${DEPLOYDIR}
210        install -m 644 ${B}/${UBOOT_BINARY} ${DEPLOYDIR}/${UBOOT_IMAGE}
211        cd ${DEPLOYDIR}
212        rm -f ${UBOOT_BINARY} ${UBOOT_SYMLINK}
213        ln -sf ${UBOOT_IMAGE} ${UBOOT_SYMLINK}
214        ln -sf ${UBOOT_IMAGE} ${UBOOT_BINARY}
215    fi
216
217    if [ -n "${UBOOT_ELF}" ]
218    then
219        if [ -n "${UBOOT_CONFIG}" ]
220        then
221            for config in ${UBOOT_MACHINE}; do
222                i=$(expr $i + 1);
223                for type in ${UBOOT_CONFIG}; do
224                    j=$(expr $j + 1);
225                    if [ $j -eq $i ]
226                    then
227                        install -m 644 ${B}/${config}/${UBOOT_ELF} ${DEPLOYDIR}/u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX}
228                        ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_BINARY}-${type}
229                        ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_BINARY}
230                        ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK}-${type}
231                        ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK}
232                    fi
233                done
234                unset j
235            done
236            unset i
237        else
238            install -m 644 ${B}/${UBOOT_ELF} ${DEPLOYDIR}/${UBOOT_ELF_IMAGE}
239            ln -sf ${UBOOT_ELF_IMAGE} ${DEPLOYDIR}/${UBOOT_ELF_BINARY}
240            ln -sf ${UBOOT_ELF_IMAGE} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK}
241        fi
242    fi
243
244
245     if [ -n "${SPL_BINARY}" ]
246     then
247        if [ -n "${UBOOT_CONFIG}" ]
248        then
249            for config in ${UBOOT_MACHINE}; do
250                i=$(expr $i + 1);
251                for type in ${UBOOT_CONFIG}; do
252                    j=$(expr $j + 1);
253                    if [ $j -eq $i ]
254                    then
255                        install -m 644 ${B}/${config}/${SPL_BINARY} ${DEPLOYDIR}/${SPL_IMAGE}-${type}-${PV}-${PR}
256                        rm -f ${DEPLOYDIR}/${SPL_BINARYNAME} ${DEPLOYDIR}/${SPL_SYMLINK}-${type}
257                        ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${DEPLOYDIR}/${SPL_BINARYNAME}-${type}
258                        ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${DEPLOYDIR}/${SPL_BINARYNAME}
259                        ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${DEPLOYDIR}/${SPL_SYMLINK}-${type}
260                        ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${DEPLOYDIR}/${SPL_SYMLINK}
261                    fi
262                done
263                unset  j
264            done
265            unset  i
266        else
267            install -m 644 ${B}/${SPL_BINARY} ${DEPLOYDIR}/${SPL_IMAGE}
268            rm -f ${DEPLOYDIR}/${SPL_BINARYNAME} ${DEPLOYDIR}/${SPL_SYMLINK}
269            ln -sf ${SPL_IMAGE} ${DEPLOYDIR}/${SPL_BINARYNAME}
270            ln -sf ${SPL_IMAGE} ${DEPLOYDIR}/${SPL_SYMLINK}
271        fi
272    fi
273
274
275    if [ -n "${UBOOT_ENV}" ]
276    then
277        install -m 644 ${WORKDIR}/${UBOOT_ENV_BINARY} ${DEPLOYDIR}/${UBOOT_ENV_IMAGE}
278        rm -f ${DEPLOYDIR}/${UBOOT_ENV_BINARY} ${DEPLOYDIR}/${UBOOT_ENV_SYMLINK}
279        ln -sf ${UBOOT_ENV_IMAGE} ${DEPLOYDIR}/${UBOOT_ENV_BINARY}
280        ln -sf ${UBOOT_ENV_IMAGE} ${DEPLOYDIR}/${UBOOT_ENV_SYMLINK}
281    fi
282
283    if [ "${UBOOT_EXTLINUX}" = "1" ]
284    then
285        install -m 644 ${UBOOT_EXTLINUX_CONFIG} ${DEPLOYDIR}/${UBOOT_EXTLINUX_SYMLINK}
286        ln -sf ${UBOOT_EXTLINUX_SYMLINK} ${DEPLOYDIR}/${UBOOT_EXTLINUX_CONF_NAME}-${MACHINE}
287        ln -sf ${UBOOT_EXTLINUX_SYMLINK} ${DEPLOYDIR}/${UBOOT_EXTLINUX_CONF_NAME}
288    fi
289}
290
291addtask deploy before do_build after do_compile
292