1 DESCRIPTION
= "Meta package for building a installable toolchain"
3 DEPENDS
= "opkg-native opkg-utils-native fakeroot-native sed-native"
7 SDK_DIR
= "${WORKDIR}/sdk"
8 SDK_OUTPUT
= "${SDK_DIR}/image"
9 SDK_OUTPUT2
= "${SDK_DIR}/image-extras"
10 SDK_DEPLOY
= "${DEPLOY_DIR}/sdk"
12 IPKG_HOST
= "opkg-cl -f ${IPKGCONF_SDK} -o ${SDK_OUTPUT}"
13 IPKG_TARGET
= "opkg-cl -f ${IPKGCONF_TARGET} -o ${SDK_OUTPUT}/${SDKPATH}/${TARGET_SYS}"
15 TOOLCHAIN_HOST_TASK ?
= "task-sdk-host"
16 TOOLCHAIN_TARGET_TASK ?
= "task-sdk-bare"
17 TOOLCHAIN_TARGET_EXCLUDE ?
= ""
18 FEED_ARCH ?
= "${TARGET_ARCH}"
19 SDK_SUFFIX
= "toolchain"
20 TOOLCHAIN_OUTPUTNAME ?
= "${DISTRO}-${DISTRO_VERSION}-${SDK_SYS}-${FEED_ARCH}-${TARGET_OS}-${SDK_SUFFIX}"
22 DISTRO_FEED_CONFIGS ?
= " "
24 RDEPENDS_$
{PN
} = "${DISTRO_FEED_CONFIGS} ${TOOLCHAIN_TARGET_TASK} ${TOOLCHAIN_HOST_TASK}"
26 TOOLCHAIN_FEED_URI ?
= "${DISTRO_FEED_URI}"
29 OUTPUT_OPKGCONF_TARGET
="${SDK_OUTPUT}/${SDKPATH}/${TARGET_SYS}/${sysconfdir}/opkg.conf"
30 OUTPUT_OPKGCONF_HOST
="${SDK_OUTPUT}/${SDKPATH}/${TARGET_SYS}/${sysconfdir}/opkg-sdk.conf"
31 OUTPUT_OPKGCONF_SDK
="${SDK_OUTPUT}/${sysconfdir}/opkg-sdk.conf"
32 rm
-f $
{OUTPUT_OPKGCONF_TARGET
}
33 rm
-f $
{OUTPUT_OPKGCONF_HOST
}
34 rm
-f $
{OUTPUT_OPKGCONF_SDK
}
36 if [ -e $
{SDK_OUTPUT
}/$
{SDKPATH
}/$
{TARGET_SYS
}/$
{sysconfdir
}/opkg
/arch.conf
] ; then
37 echo
"Creating empty opkg.conf since arch.conf is already present"
38 echo
> $
{OUTPUT_OPKGCONF_TARGET
}
40 opkgarchs
="${PACKAGE_ARCHS}"
42 for arch in $
{opkgarchs
}; do
43 echo
"arch ${arch} ${priority}" >> $
{OUTPUT_OPKGCONF_TARGET
};
44 if [ -n
"${TOOLCHAIN_FEED_URI}" ] ; then
45 echo
"src/gz ${arch} ${TOOLCHAIN_FEED_URI}/${arch}" >> $
{OUTPUT_OPKGCONF_TARGET
};
47 priority
=$
(expr $
{priority
} + 5);
54 mkdir
-p $
{SDK_OUTPUT
}
55 mkdir
-p $
{SDK_OUTPUT
}$
{libdir
}/opkg
/
56 mkdir
-p $
{SDK_OUTPUT
}/$
{SDKPATH
}/$
{TARGET_SYS
}$
{libdir
}/opkg
/
58 package_generate_ipkg_conf
60 for arch in $
{PACKAGE_ARCHS
}; do
61 revipkgarchs
="$arch $revipkgarchs"
65 $
{IPKG_HOST
} -force
-depends install $
{TOOLCHAIN_HOST_TASK
}
68 $
{IPKG_TARGET
} install $
{TOOLCHAIN_TARGET_TASK
} $
{DISTRO_FEED_CONFIGS
}
70 # Remove packages in the exclude list which were installed by dependencies
71 if [ ! -z
"${TOOLCHAIN_TARGET_EXCLUDE}" ]; then
72 $
{IPKG_TARGET
} remove
-force
-depends $
{TOOLCHAIN_TARGET_EXCLUDE
}
75 install
-d $
{SDK_OUTPUT
}/$
{SDKPATH
}$
{libdir
}/opkg
76 mv $
{SDK_OUTPUT
}$
{libdir
}/opkg
/* $
{SDK_OUTPUT
}/$
{SDKPATH
}$
{libdir
}/opkg
/
77 rm
-Rf $
{SDK_OUTPUT
}$
{libdir
}
79 # Clean up empty directories from excluded packages
80 find $
{SDK_OUTPUT
} -depth
-type d
-empty
-print0 | xargs
-r0
/bin/rmdir
82 install
-d $
{SDK_OUTPUT
}/$
{SDKPATH
}/$
{TARGET_SYS
}/$
{sysconfdir
}
83 install
-m
0644 $
{IPKGCONF_TARGET
} $
{IPKGCONF_SDK
} $
{SDK_OUTPUT
}/$
{SDKPATH
}/$
{TARGET_SYS
}/$
{sysconfdir
}/
85 install
-d $
{SDK_OUTPUT
}/$
{SDKPATH
}/$
{sysconfdir
}
86 install
-m
0644 $
{IPKGCONF_SDK
} $
{SDK_OUTPUT
}/$
{SDKPATH
}/$
{sysconfdir
}/
88 # extract
and store ipks
, pkgdata
and shlibs
data
89 target_pkgs
=`cat $
{SDK_OUTPUT
}/$
{SDKPATH
}/$
{TARGET_SYS
}$
{libdir
}/opkg
/status | grep Package
: | cut
-f
2 -d ' '`
90 mkdir
-p $
{SDK_OUTPUT2
}/$
{SDKPATH
}/ipk
/
91 mkdir
-p $
{SDK_OUTPUT2
}/$
{SDKPATH
}/pkgdata
/runtime
/
92 mkdir
-p $
{SDK_OUTPUT2
}/$
{SDKPATH
}/$
{TARGET_SYS
}/shlibs
/
93 for pkg in $target_pkgs
; do
94 for arch in $revipkgarchs
; do
95 pkgnames
=$
{DEPLOY_DIR_IPK
}/$arch
/$
{pkg
}_
*_$arch.ipk
96 if [ -e $pkgnames
]; then
97 oenote
"Found $pkgnames"
98 cp $pkgnames $
{SDK_OUTPUT2
}/$
{SDKPATH
}/ipk
/
99 orig_pkg
=`opkg
-list
-fields $pkgnames | grep OE
: | cut
-d ' '
-f2`
100 pkg_subdir
=$arch$
{TARGET_VENDOR
}$
{@
['
-'
+ bb.
data.getVar
('TARGET_OS'
, d
, 1), ''
][bb.
data.getVar
('TARGET_OS'
, d
, 1) == (''
or 'custom'
)]}
101 mkdir
-p $
{SDK_OUTPUT2
}/$
{SDKPATH
}/pkgdata
/$pkg_subdir
/runtime
102 cp $
{TMPDIR
}/pkgdata
/$pkg_subdir
/$orig_pkg $
{SDK_OUTPUT2
}/$
{SDKPATH
}/pkgdata
/$pkg_subdir
/
103 subpkgs
=`cat $
{TMPDIR
}/pkgdata
/$pkg_subdir
/$orig_pkg | grep PACKAGES
: | cut
-b
10-`
104 for subpkg in $subpkgs
; do
105 cp $
{TMPDIR
}/pkgdata
/$pkg_subdir
/runtime
/$subpkg $
{SDK_OUTPUT2
}/$
{SDKPATH
}/pkgdata
/$pkg_subdir
/runtime
/
106 if [ -e $
{TMPDIR
}/pkgdata
/$pkg_subdir
/runtime
/$subpkg.packaged
];then
107 cp $
{TMPDIR
}/pkgdata
/$pkg_subdir
/runtime
/$subpkg.packaged $
{SDK_OUTPUT2
}/$
{SDKPATH
}/pkgdata
/$pkg_subdir
/runtime
/
109 if [ -e $
{STAGING_DIR_TARGET
}/shlibs
/$subpkg.list
]; then
110 cp $
{STAGING_DIR_TARGET
}/shlibs
/$subpkg.
* $
{SDK_OUTPUT2
}/$
{SDKPATH
}/$
{TARGET_SYS
}/shlibs
/
118 # add missing link
to libgcc_s.so
.1
119 # libgcc
-dev should be responsible
for that
, but it's
not getting built
120 # RP
: it gets smashed up depending on the order that gcc
, gcc
-cross
and
121 # gcc
-cross
-sdk get built
:( (30/11/07)
122 ln
-sf libgcc_s.so
.1 $
{SDK_OUTPUT
}/$
{SDKPATH
}/$
{TARGET_SYS
}/lib
/libgcc_s.so
124 # With sysroot support
, gcc expects the
default C
++ headers
to be
125 # in a specific place.
126 if [ "${base_prefix}" != "${prefix}" ]; then
127 install
-d $
{SDK_OUTPUT
}/$
{SDKPATH
}/$
{TARGET_SYS
}/include
128 mv $
{SDK_OUTPUT
}/$
{SDKPATH
}/$
{TARGET_SYS
}/usr
/include/c
++ \
129 $
{SDK_OUTPUT
}/$
{SDKPATH
}/$
{TARGET_SYS
}/include/
132 # Fix
or remove broken .la files
133 for i in `find $
{SDK_OUTPUT
}/$
{SDKPATH
}/$
{TARGET_SYS
} -name \
*.la`
; do
134 sed
-i
-e
"/^dependency_libs=/s,\([[:space:]']\)${base_libdir},\1\$SDK_PATH/\$TARGET_SYS${base_libdir},g" \
135 -e
"/^dependency_libs=/s,\([[:space:]']\)${libdir},\1\$SDK_PATH/\$TARGET_SYS${libdir},g" \
136 -e
"/^dependency_libs=/s,\-\([LR]\)${base_libdir},-\1\$SDK_PATH/\$TARGET_SYS${base_libdir},g" \
137 -e
"/^dependency_libs=/s,\-\([LR]\)${libdir},-\1\$SDK_PATH/\$TARGET_SYS${libdir},g" \
138 -e 's
/^installed
=yes$
/installed
=no
/' $i
140 rm
-f $
{SDK_OUTPUT
}/$
{SDKPATH
}/lib
/*.la
142 # Setup site file
for external use
143 siteconfig
=$
{SDK_OUTPUT
}/$
{SDKPATH
}/site
-config
145 for sitefile in $
{CONFIG_SITE
} ; do
146 cat $sitefile
>> $siteconfig
149 # Create environment setup script
150 script
=$
{SDK_OUTPUT
}/$
{SDKPATH
}/environment
-setup
152 echo 'export SDK_PATH
=$
{SDKPATH
}'
>> $script
153 echo 'export TARGET_SYS
=$
{TARGET_SYS
}'
>> $script
154 echo 'export PATH
=$SDK_PATH
/bin:$PATH'
>> $script
155 echo 'export CPATH
=$SDK_PATH
/$TARGET_SYS
/usr
/include:$CPATH'
>> $script
156 echo 'export LIBTOOL_SYSROOT_PATH
=$SDK_PATH
/$TARGET_SYS'
>> $script
157 echo 'export PKG_CONFIG_SYSROOT_DIR
=$SDK_PATH
/$TARGET_SYS'
>> $script
158 echo 'export PKG_CONFIG_PATH
=$SDK_PATH
/$TARGET_SYS$
{libdir
}/pkgconfig'
>> $script
159 echo 'export CONFIG_SITE
=$SDK_PATH
/site
-config'
>> $script
160 echo 'alias opkg
="LD_LIBRARY_PATH=$SDK_PATH/lib $SDK_PATH/bin/opkg-cl -f $SDK_PATH/${sysconfdir}/opkg-sdk.conf -o $SDK_PATH"'
>> $script
161 echo 'alias opkg
-target
="LD_LIBRARY_PATH=$SDK_PATH/lib $SDK_PATH/bin/opkg-cl -f $SDK_PATH/$TARGET_SYS${sysconfdir}/opkg.conf -o $SDK_PATH/$TARGET_SYS"'
>> $script
163 # Add version information
164 versionfile
=$
{SDK_OUTPUT
}/$
{SDKPATH
}/version
166 echo 'Distro
: $
{DISTRO
}'
>> $versionfile
167 echo 'Distro Version
: $
{DISTRO_VERSION
}'
>> $versionfile
168 echo 'Metadata Revision
: $
{METADATA_REVISION
}'
>> $versionfile
169 echo 'Timestamp
: $
{DATETIME
}'
>> $versionfile
174 mkdir
-p $
{SDK_DEPLOY
}
176 chmod
-R go
-w $
{SDK_OUTPUT
}
177 fakeroot tar cfj $
{SDK_DEPLOY
}/$
{TOOLCHAIN_OUTPUTNAME
}.tar.bz2 .
179 chmod
-R go
-w $
{SDK_OUTPUT2
}
180 fakeroot tar cfj $
{SDK_DEPLOY
}/$
{TOOLCHAIN_OUTPUTNAME
}-extras.tar.bz2 .
183 do_populate_sdk
[nostamp
] = "1"
184 do_populate_sdk
[lockfiles
] = "${DEPLOY_DIR_IPK}.lock"
185 addtask package_update_index_ipk
before do_populate_sdk
186 addtask populate_sdk
before do_build
after do_install