[Click] Cross compile click packages

Eddie Kohler ekohler at gmail.com
Mon Jan 9 13:22:32 EST 2012


Hi Sascha, sorry for my own late reply.

Well, this code used to work; that is why Click separately checks for 
dynamic linking on the build & host compilers. To figure out this error 
I'd need to see the config.log.

Unfortunately click-mkmindriver does not work with packages.

Eddie



On 12/3/11 6:36 PM, Sascha Alexander Jopen wrote:
> 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