[Click] Cross compile click packages

Sascha Alexander Jopen jopen at informatik.uni-bonn.de
Sat Dec 3 18:36:14 EST 2011


Hey,

sorry for this really late reply.

Cross compiling click packages with your modifications of the build
system seems to work. I managed to compile and run several packages for
a mipsel architecture.

However this will only work with --enable-tools=host.
--enable-tools=mixed leads to the following error during the configure
phase. I currently use different cxx libraries on the build and host
systems. But even when using the standard gcc cxx library, i couldn't
compile mixed tools.  Both the build system and the target system do
support dynamic linking, so this might be a problem with mixed
build/host include and library directories.

checking dlfcn.h usability... no
checking dlfcn.h presence... yes
configure: WARNING: dlfcn.h: present but cannot be compiled
configure: WARNING: dlfcn.h:     check for missing prerequisite headers?
configure: WARNING: dlfcn.h: see the Autoconf documentation
configure: WARNING: dlfcn.h:     section "Present But Cannot Be Compiled"
configure: WARNING: dlfcn.h: proceeding with the compiler's result
checking for dlfcn.h... no
checking for dlopen... no
checking for dlopen in -ldl... no
configure: error:
=========================================

You have configured Click with '--enable-dynamic-linking', which requires
that both the build system and host system support dynamic linking.
Try running 'configure' with the '--disable-dynamic-linking' option.

=========================================


The commands i used to configure and compile click with the cross
toolchain were the following. Do i have to provide other things for this
to work with mixed tools?

AR=i486-openwrt-linux-uclibc-ar \
AS="i486-openwrt-linux-uclibc-gcc -c -O2 -pipe -march=i486
-funit-at-a-time -fhonour-copts" \
LD=i486-openwrt-linux-uclibc-ld \
NM=i486-openwrt-linux-uclibc-nm \
CC="i486-openwrt-linux-uclibc-gcc" \
GCC="i486-openwrt-linux-uclibc-gcc" \
CXX="i486-openwrt-linux-uclibc-g++" \
RANLIB=i486-openwrt-linux-uclibc-ranlib \
STRIP=i486-openwrt-linux-uclibc-strip \
OBJCOPY=i486-openwrt-linux-uclibc-objcopy \
OBJDUMP=i486-openwrt-linux-uclibc-objdump \
SIZE=i486-openwrt-linux-uclibc-size \
CPPFLAGS="-I/home/buildbot/buildbot/data/OpenWRT/backfire/staging_dir/target-i386_uClibc-0.9.30.1/usr/include
-I/home/buildbot/buildbot/data/OpenWRT/backfire/staging_dir/target-i386_uClibc-0.9.30.1/include
-I/home/buildbot/buildbot/data/OpenWRT/backfire/staging_dir/toolchain-i386_gcc-4.1.2_uClibc-0.9.30.1/usr/include
-I/home/buildbot/buildbot/data/OpenWRT/backfire/staging_dir/toolchain-i386_gcc-4.1.2_uClibc-0.9.30.1/include
-MD" \
CFLAGS="-O2 -pipe -march=i486 -funit-at-a-time -fhonour-copts -MD" \
CXXFLAGS="-O2 -pipe -march=i486 -funit-at-a-time -fhonour-copts
-nostdinc++ -MD
-I/home/buildbot/buildbot/data/OpenWRT/backfire/staging_dir/target-i386_uClibc-0.9.30.1/usr/include/uClibc++"
\
LDFLAGS="-L/home/buildbot/buildbot/data/OpenWRT/backfire/staging_dir/target-i386_uClibc-0.9.30.1/usr/lib
-L/home/buildbot/buildbot/data/OpenWRT/backfire/staging_dir/target-i386_uClibc-0.9.30.1/lib
-L/home/buildbot/buildbot/data/OpenWRT/backfire/staging_dir/toolchain-i386_gcc-4.1.2_uClibc-0.9.30.1/usr/lib
-L/home/buildbot/buildbot/data/OpenWRT/backfire/staging_dir/toolchain-i386_gcc-4.1.2_uClibc-0.9.30.1/lib
-nodefaultlibs -luClibc++ -lm" \
./configure --prefix=/usr --target=i486-openwrt-linux
--host=i486-openwrt-linux --build=i686-linux-gnu --enable-tools=mixed
--enable-userlevel --disable-linuxmodule


make tools elementmap.xml


I do not need the build system tools currently, but maybe the
mkmindriver tool could become interesting for me. Btw. will the
mkmindriver work with packages and compile only the required elements
into the package?

Regards,
Sascha


On 11/09/11 18:10, Eddie Kohler wrote:
> Hi Sascha,
> 
> I think I may have checked in something that will help you.  You will
> need to update Click as well as your package's configure.ac and
> Makefile.in (the click-packages git has been updated to show you what
> is needed).  Let me know.
> 
> Eddie
> 
> 
> On Wed, Nov 9, 2011 at 9:27 AM, Sascha Alexander Jopen
> <jopen at informatik.uni-bonn.de> wrote:
>> In my case it's the easier deployment. In particular, i use the OpenWRT
>> buildroot for cross compilation of click packages. I install the
>> complete click "base package" with DESTDIR into a staging directory for
>> further usage.
>>
>> So far i changed some definitions within the makefiles to use the click
>> build tools directly out of the source directory, because the installed
>> versions would be host binaries, not build system binaries. After fixing
>> the include directories and data directories i could compile two
>> different packages for userlevel. Neither linuxmodules nor bsdmodule
>> will work with the attached patch.
>> Im pretty sure this patch is not complete. I'm really new to such
>> "complex" makefiles. For example, no dependency files (*.d) are
>> generated for my packges, though this worked before.
>>
>> Sascha
>>
>> On 11/09/11 15:07, Eddie Kohler wrote:
>>> In particular, it might be much easier to handle this:
>>>
>>> Click prefix => /usr/local/click
>>> Click temporary installation directory => /usr/local/click-cross/usr/local/click
>>>
>>> than this:
>>>
>>> Click prefix => /usr/local/click
>>> Click temporary installation directory => /usr/local/click-cross
>>>
>>> Eddie
>>>
>>>
>>> On Wed, Nov 9, 2011 at 9:04 AM, Eddie Kohler <ekohler at gmail.com> wrote:
>>>> Hi Sascha,
>>>>
>>>> Hmm.
>>>>
>>>> Can you tell me a bit more about your deployment situation?... Are you
>>>> installing with a DESTDIR, or copying the whole tree somewhere else?
>>>> It is not immediately clear to me how this should be handled.
>>>>
>>>> Eddie
>>>>
>>>>
>>>> On Tue, Nov 8, 2011 at 7:09 AM, Sascha Alexander Jopen
>>>> <jopen at informatik.uni-bonn.de> wrote:
>>>>> Hey,
>>>>>
>>>>> does anybody cross compile click packages?
>>>>>
>>>>> If i cross compile click with the default prefix, but install it to a
>>>>> different location for further usage with click packages, the file
>>>>> config.mk in clickdatadir contains the original prefix. This is fine to
>>>>> define the directories for the final destination locations of the
>>>>> packaged to be cross compiled, but the package Makefiles use this
>>>>> information to find the installed click instance, too. One can configure
>>>>> a package with --with-click=PREFIX, but this doesn't help.
>>>>>
>>>>> I know that i can compile click with local elements instead of packages,
>>>>> but using packages is a cleaner way, i think.
>>>>>
>>>>> Are there any special configure flags or something similar i am missing,
>>>>> to get click packages cross compiled?
>>>>>
>>>>> Regards,
>>>>> Sascha
>>>>> _______________________________________________
>>>>> click mailing list
>>>>> click at amsterdam.lcs.mit.edu
>>>>> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
>>>>>
>>>>
>>
>>



More information about the click mailing list