User Tools

Site Tools


doc:devel:crosscompile

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
doc:devel:crosscompile [2012/12/18 18:13]
uvray313
doc:devel:crosscompile [2014/07/21 10:35] (current)
nijn Typo fixed
Line 11: Line 11:
   * Follow the build instructions outlined in [[doc:​howto:​build|OpenWrt Buildroot – Usage]]   * Follow the build instructions outlined in [[doc:​howto:​build|OpenWrt Buildroot – Usage]]
   * Locate the toolchain binaries in the ''​staging_dir/​toolchain-//​architecture//​_gcc-//​compilerver//​_uClibc-//​libcver///​bin/''​ directory   * Locate the toolchain binaries in the ''​staging_dir/​toolchain-//​architecture//​_gcc-//​compilerver//​_uClibc-//​libcver///​bin/''​ directory
-  * Add the toolchain ​directory to the ''​PATH''​ environment variable: +  * Add that directory to the ''​PATH''​ environment variable: 
-    * ''​PATH=$PATH:​(your toolchain directory here)''​+    * ''​PATH=$PATH:​(your toolchain/bin directory here)''​
     * ''​export PATH''​     * ''​export PATH''​
-  * Set the ''​STAGING_DIR''​ environment variable to the toolchain dir and export it: +  * Set the ''​STAGING_DIR''​ environment variable to the above toolchain dir and export it: 
-    * ''​STAGING_DIR=(your ​staging ​directory here)''​+    * ''​STAGING_DIR=(your ​toolchain ​directory here)''​
     * ''​export STAGING_DIR''​     * ''​export STAGING_DIR''​
   * Download and unpack the code to be compiled, change into the unpacked directory   * Download and unpack the code to be compiled, change into the unpacked directory
-  * Pass the //target// to the build system of the package to compile +  * Pass the //host// and //build// to the build system of the package to trigger cross-compile 
-    * For GNU configure, use ''​%%--target=%%//​architecture//​-openwrt-linux-uclibc''​ +    * For GNU configure, use ''​%%--build=%%//​architecture//​-unkown-linux-gny %%--host=%%//​architecture//​-openwrt-linux-uclibc'' ​(for example: ''​./​configure %%--build=%%x86_64-unkown-linux-gnu ​ --host=mips-openwrt-linux-uclibc''​) 
-    * For GNU make, override the ''​CC''​ and ''​LD''​ environment variables+      * Run ''​./​config.guess''​ to get the ''​%%--build=%%''​ option. 
 +      * Check the output and ensure that '''​checking whether we are cross compiling... yes'''​ is yes. 
 +    * For GNU make, override the ''​CC''​ and ''​LD''​ environment variables ​(usually not needed if GNU configure was used)
        * ''​make CC=//​architecture//​-openwrt-linux-uclibc-gcc''​ ''​LD=//​architecture//​-openwrt-linux-uclibc-ld''​        * ''​make CC=//​architecture//​-openwrt-linux-uclibc-gcc''​ ''​LD=//​architecture//​-openwrt-linux-uclibc-ld''​
 +  * The compiled program will be somewhere inside the folder your run ./configure and make from, try doing ''​find -iname *program*''​
 +  * Run ''​file program''​ to confirm cross-compiling was successful. ​
   * If compilation aborts due to missing header files or shared objects, you might need to override ''​CFLAGS''​ and ''​LDFLAGS''​ to point to the ''​staging_dir/​target-//​architecture//​_uClibc-//​libcver///​usr/​include''​ and ''​.../​usr/​lib''​ directories   * If compilation aborts due to missing header files or shared objects, you might need to override ''​CFLAGS''​ and ''​LDFLAGS''​ to point to the ''​staging_dir/​target-//​architecture//​_uClibc-//​libcver///​usr/​include''​ and ''​.../​usr/​lib''​ directories
   * Debugging requires gdb in the toolchain. Default config does not include it. Include using ''​make menuconfig''​. [Advanced configuration options->​Toolchain Options->​Build gdb]   * Debugging requires gdb in the toolchain. Default config does not include it. Include using ''​make menuconfig''​. [Advanced configuration options->​Toolchain Options->​Build gdb]
   * Remote debugging can be done using script ''​.///​scripts///​remote-gdb''​   * Remote debugging can be done using script ''​.///​scripts///​remote-gdb''​
  
-When compilation is finished, copy the resulting binary and realted ​libraries to the target device to test it. It might be necessary to set ''​LD_LIBRARY_PATH''​ on the target to point the binary to libraries in nonstandard ​locations.+When compilation is finished, copy the resulting binary and related ​libraries to the target device to test it. It might be necessary to set ''​LD_LIBRARY_PATH''​ on the target to point the binary to libraries in non-standard ​locations.
  
 If the program works well enough, you maybe want to build a real package for the opkg package manager and make it easily accessible for everyone out there. If the program works well enough, you maybe want to build a real package for the opkg package manager and make it easily accessible for everyone out there.
doc/devel/crosscompile.1355850811.txt.bz2 · Last modified: 2012/12/18 18:13 by uvray313