summaryrefslogtreecommitdiff
path: root/packages/meta/meta-toolchain.bb
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meta/meta-toolchain.bb')
-rw-r--r--packages/meta/meta-toolchain.bb115
1 files changed, 69 insertions, 46 deletions
diff --git a/packages/meta/meta-toolchain.bb b/packages/meta/meta-toolchain.bb
index e319f1542d..a734005819 100644
--- a/packages/meta/meta-toolchain.bb
+++ b/packages/meta/meta-toolchain.bb
@@ -1,69 +1,55 @@
DESCRIPTION = "Meta package for building a installable toolchain"
LICENSE = "MIT"
DEPENDS = "ipkg-native ipkg-utils-native fakeroot-native sed-native"
-PR = "r0"
-inherit rootfs_ipk sdk meta
+inherit sdk meta
SDK_DIR = "${WORKDIR}/sdk"
SDK_OUTPUT = "${SDK_DIR}/image"
SDK_DEPLOY = "${TMPDIR}/deploy/sdk"
-IPKG_HOST = "ipkg-cl -f ${SDK_DIR}/ipkg-host.conf -o ${SDK_OUTPUT}"
-IPKG_TARGET = "ipkg-cl -f ${SDK_DIR}/ipkg-target.conf -o ${SDK_OUTPUT}/${prefix}"
+IPKG_HOST = "ipkg-cl -f ${IPKGCONF_SDK} -o ${SDK_OUTPUT}"
+IPKG_TARGET = "ipkg-cl -f ${IPKGCONF_TARGET} -o ${SDK_OUTPUT}/${prefix}"
-HOST_INSTALL = "\
- binutils-cross-sdk \
- gcc-cross-sdk \
- gdb-cross"
-TARGET_INSTALL = "\
- task-sdk-bare \
- "
+TOOLCHAIN_HOST_TASK ?= "task-sdk-host"
+TOOLCHAIN_TARGET_TASK ?= "task-sdk-bare"
-RDEPENDS = "${TARGET_INSTALL} ${HOST_INSTALL}"
-
-sdk_ipk_do_indexes () {
- set -ex
- rootfs_ipk_do_indexes
- set +ex
-}
+RDEPENDS = "${TOOLCHAIN_TARGET_TASK} ${TOOLCHAIN_HOST_TASK}"
do_populate_sdk() {
- sdk_ipk_do_indexes
rm -rf ${SDK_OUTPUT}
mkdir -p ${SDK_OUTPUT}
- echo "Creating host.conf..."
-
- cat <<EOF >${SDK_DIR}/ipkg-host.conf
-src oe file:${DEPLOY_DIR_IPK}/${BUILD_ARCH}
-arch ${BUILD_ARCH} 1
-EOF
- echo "done."
- priority=1
- for arch in $ipkgarchs; do
- echo "arch $arch $priority" >> ${SDK_DIR}/ipkg-target.conf
- priority=$(expr $priority + 5)
- if [ -e ${DEPLOY_DIR_IPK}/$arch/Packages ] ; then
- echo "src oe-$arch file:${DEPLOY_DIR_IPK}/$arch" >> ${SDK_DIR}/ipkg-target.conf
- fi
- done
-
- rm -r ${SDK_OUTPUT}
- mkdir -p ${SDK_OUTPUT}
+ package_update_index_ipk
+ package_generate_ipkg_conf
+
+ for arch in ${PACKAGE_ARCHS}; do
+ revipkgarchs="$arch $revipkgarchs"
+ done
${IPKG_HOST} update
- ${IPKG_HOST} -nodeps install ${HOST_INSTALL}
+ ${IPKG_HOST} -force-depends install ${TOOLCHAIN_HOST_TASK}
${IPKG_TARGET} update
- ${IPKG_TARGET} install ${TARGET_INSTALL}
+ ${IPKG_TARGET} install ${TOOLCHAIN_TARGET_TASK}
mkdir -p ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}
cp -pPR ${SDK_OUTPUT}/${prefix}/usr/* ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}
rm -rf ${SDK_OUTPUT}/${prefix}/usr/
- cp -pPR ${SDK_OUTPUT}/${prefix}/lib/* ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib
- rm -rf ${SDK_OUTPUT}/${prefix}/lib/*
+ cp -pPR ${SDK_OUTPUT}/${prefix}/lib/* ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib
+ rm -rf ${SDK_OUTPUT}/${prefix}/lib/*
+
+ for fn in `ls ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/`; do
+ if [ -h ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/$fn ]; then
+ link=`readlink ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/$fn`
+ bname=`basename $link`
+ if [ ! -e $link -a -e ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/$bame ]; then
+ rm ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/$fn
+ ln -s $bname ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/$fn
+ fi
+ fi
+ done
mv ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/gcc* ${SDK_OUTPUT}/${prefix}/lib
@@ -72,17 +58,54 @@ EOF
chmod -R a+r ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/include/
find ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/include/ -type d | xargs chmod +x
- echo 'GROUP ( libpthread.so.0 libpthread_nonshared.a )' > ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/libpthread.so
- echo 'GROUP ( libc.so.6 libc_nonshared.a )' > ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/libc.so
+ echo 'GROUP ( libpthread.so.0 libpthread_nonshared.a )' > ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/libpthread.so
+ echo 'GROUP ( libc.so.6 libc_nonshared.a )' > ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/libc.so
+
# remove unwanted housekeeping files
mv ${SDK_OUTPUT}${libdir}/../${TARGET_SYS}/lib/ipkg/status ${SDK_OUTPUT}/${prefix}/package-status
- rm -rf ${SDK_OUTPUT}${libdir}/ipkg
+ rm -Rf ${SDK_OUTPUT}${libdir}/ipkg
+ mv ${SDK_OUTPUT}/usr/lib/ipkg/status ${SDK_OUTPUT}/${prefix}/package-status-host
+ rm -Rf ${SDK_OUTPUT}/usr/lib
+
+ # extract and store ipks, pkgdata, pkgmaps and shlibs data
+ target_pkgs=`cat ${SDK_OUTPUT}/${prefix}/package-status | grep Package: | cut -f 2 -d ' '`
+ mkdir -p ${SDK_OUTPUT}/${prefix}/ipk/
+ mkdir -p ${SDK_OUTPUT}/${prefix}/pkgdata/runtime/
+ mkdir -p ${SDK_OUTPUT}/${prefix}/pkgmaps/debian/
+ mkdir -p ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/shlibs/
+ for pkg in $target_pkgs ; do
+ for arch in $revipkgarchs; do
+ if [ -e ${DEPLOY_DIR_IPK}/${pkg}_*_$arch.ipk ]; then
+ echo "Found ${DEPLOY_DIR_IPK}/${pkg}_$arch.ipk"
+ cp ${DEPLOY_DIR_IPK}/${pkg}_*_$arch.ipk ${SDK_OUTPUT}/${prefix}/ipk/
+ orig_pkg=`ipkg-list-fields ${DEPLOY_DIR_IPK}/${pkg}_*_$arch.ipk | grep OE: | cut -d ' ' -f2`
+ pkg_subdir=$arch${TARGET_VENDOR}${@['-' + bb.data.getVar('TARGET_OS', d, 1), ''][bb.data.getVar('TARGET_OS', d, 1) == ('' or 'custom')]}
+ mkdir -p ${SDK_OUTPUT}/${prefix}/pkgdata/$pkg_subdir/runtime
+ cp ${STAGING_DIR}/pkgdata/$pkg_subdir/$orig_pkg ${SDK_OUTPUT}/${prefix}/pkgdata/$pkg_subdir/
+ subpkgs=`cat ${STAGING_DIR}/pkgdata/$pkg_subdir/$orig_pkg | grep PACKAGES: | cut -b 10-`
+ for subpkg in $subpkgs; do
+ cp ${STAGING_DIR}/pkgdata/$pkg_subdir/runtime/$subpkg ${SDK_OUTPUT}/${prefix}/pkgdata/$pkg_subdir/runtime/
+ if [ -e ${STAGING_DIR}/pkgdata/$pkg_subdir/runtime/$subpkg.packaged ];then
+ cp ${STAGING_DIR}/pkgdata/$pkg_subdir/runtime/$subpkg.packaged ${SDK_OUTPUT}/${prefix}/pkgdata/$pkg_subdir/runtime/
+ fi
+ if [ -e ${STAGING_DIR}/pkgmaps/debian/$subpkg ]; then
+ cp ${STAGING_DIR}/pkgmaps/debian/$subpkg ${SDK_OUTPUT}/${prefix}/pkgmaps/debian/
+ fi
+ if [ -e ${STAGING_DIR}/${TARGET_SYS}/shlibs/$subpkg.list ]; then
+ cp ${STAGING_DIR}/${TARGET_SYS}/shlibs/$subpkg.* ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/shlibs/
+ fi
+ done
+ break
+ fi
+ done
+ done
+
# remove unwanted executables
rm -rf ${SDK_OUTPUT}/${prefix}/sbin ${SDK_OUTPUT}/${prefix}/etc
# remove broken .la files
- rm ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/*.la
+ rm -f ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/*.la
# fix pkgconfig data files
cd ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/pkgconfig
@@ -95,7 +118,7 @@ EOF
mkdir -p ${SDK_DEPLOY}
cd ${SDK_OUTPUT}
- fakeroot tar cfj ${SDK_DEPLOY}/${DISTRO}-${DISTRO_VERSION}-${TARGET_ARCH}-oe-toolchain.tar.bz2 .
+ fakeroot tar cfj ${SDK_DEPLOY}/${DISTRO}-${DISTRO_VERSION}-${TARGET_ARCH}-toolchain.tar.bz2 .
}
do_populate_sdk[nostamp] = "1"