Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion rules.mk
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ ifndef DUMP
-include $(TOOLCHAIN_DIR)/info.mk
export GCC_HONOUR_COPTS:=0
TARGET_CROSS:=$(if $(TARGET_CROSS),$(TARGET_CROSS),$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))-)
TARGET_CFLAGS+= -fhonour-copts $(if $(CONFIG_GCC_VERSION_4_4)$(CONFIG_GCC_VERSION_4_5),,-Wno-error=unused-but-set-variable)
TARGET_CFLAGS+= $(if $(CONFIG_GCC_VERSION_4_4)$(CONFIG_GCC_VERSION_4_5),,-Wno-error=unused-but-set-variable)
TARGET_CPPFLAGS+= -I$(TOOLCHAIN_DIR)/usr/include -I$(TOOLCHAIN_DIR)/include
TARGET_LDFLAGS+= -L$(TOOLCHAIN_DIR)/usr/lib -L$(TOOLCHAIN_DIR)/lib
TARGET_PATH:=$(TOOLCHAIN_DIR)/bin:$(TARGET_PATH)
Expand Down
207 changes: 207 additions & 0 deletions toolchain/Config.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
#

menuconfig EXTERNAL_TOOLCHAIN
bool
prompt "Use external toolchain" if DEVEL
help
If enabled, OpenWrt will compile using an existing toolchain instead of compiling one

config NATIVE_TOOLCHAIN
bool
prompt "Use host's toolchain" if DEVEL
depends EXTERNAL_TOOLCHAIN
select NO_STRIP
help
If enabled, OpenWrt will compile using the native toolchain for your host instead of compiling one

config TARGET_NAME
string
prompt "Target name" if DEVEL
depends EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
default "arm-unknown-linux-gnu" if arm
default "armeb-unknown-linux-gnu" if armeb
default "i486-unknown-linux-gnu" if i386
default "mips-unknown-linux-gnu" if mips
default "mipsel-unknown-linux-gnu" if mipsel
default "powerpc-unknown-linux-gnu" if powerpc
default "x86_64-unknown-linux-gnu" if x86_64

config TOOLCHAIN_PREFIX
string
prompt "Toolchain prefix" if DEVEL
depends EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
default "arm-unknown-linux-gnu-" if arm
default "armeb-unknown-linux-gnu-" if armeb
default "i486-unknown-linux-gnu-" if i386
default "mips-unknown-linux-gnu-" if mips
default "mipsel-unknown-linux-gnu-" if mipsel
default "powerpc-unknown-linux-gnu-" if powerpc
default "x86_64-unknown-linux-gnu-" if x86_64

config TOOLCHAIN_ROOT
string
prompt "Toolchain root" if DEVEL
depends EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
default "/opt/cross/arm-unknown-linux-gnu" if arm
default "/opt/cross/armeb-unknown-linux-gnu" if armeb
default "/opt/cross/i486-unknown-linux-gnu" if i386
default "/opt/cross/mips-unknown-linux-gnu" if mips
default "/opt/cross/mipsel-unknown-linux-gnu" if mipsel
default "/opt/cross/powerpc-unknown-linux-gnu" if powerpc
default "/opt/cross/x86_64-unknown-linux-gnu" if x86_64

config TOOLCHAIN_BIN_PATH
string
prompt "Toolchain program path" if DEVEL
depends EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
default "./usr/bin ./bin"
help
Specify additional directories searched for toolchain binaries (override PATH)
Use ./DIR for directories relative to the root above

config TOOLCHAIN_INC_PATH
string
prompt "Toolchain include path" if DEVEL
depends EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
default "./usr/include ./include"
help
Specify additional directories searched for header files (override CPPFLAGS)
Use ./DIR for directories relative to the root above

config TOOLCHAIN_LIB_PATH
string
prompt "Toolchain library path" if DEVEL
depends EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
default "./usr/lib ./lib"
help
Specify additional directories searched for libraries (override LDFLAGS)
Use ./DIR for directories relative to the root above
config INSTALL_LIBSTDCPP
bool
prompt "Does external toolchain have working C++ compiler?" if DEVEL
depends EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
default y
help
Build/install c++ compiler and libstdc++?

config NEED_TOOLCHAIN
bool
depends DEVEL
default y if !EXTERNAL_TOOLCHAIN

menuconfig TOOLCHAINOPTS
bool "Toolchain Options" if DEVEL
depends NEED_TOOLCHAIN

menuconfig EXTRA_TARGET_ARCH
bool
prompt "Enable an extra toolchain target architecture" if TOOLCHAINOPTS
depends !sparc
default y if powerpc64
default n
help
Some builds may require a 'biarch' toolchain. This option
allows you to specify an additional target arch.

Most people will answer N here.

config EXTRA_TARGET_ARCH_NAME
string
default "powerpc64" if powerpc64
prompt "Extra architecture name" if EXTRA_TARGET_ARCH
help
Specify the cpu name (eg powerpc64 or x86_64) of the
additional target architecture.

config EXTRA_TARGET_ARCH_OPTS
string
default "-m64" if powerpc64
prompt "Extra architecture compiler options" if EXTRA_TARGET_ARCH
help
If you're specifying an addition target architecture,
you'll probably need to also provide options to make
the compiler use this alternate arch.

For example, if you're building a compiler that can build
both powerpc and powerpc64 binaries, you'll need to
specify -m64 here.

comment "Binary tools"
depends TOOLCHAINOPTS

source "toolchain/binutils/Config.in"

comment "Compiler"
depends TOOLCHAINOPTS

source "toolchain/gcc/Config.in"

comment "C Library"
depends TOOLCHAINOPTS

choice
prompt "C Library implementation" if TOOLCHAINOPTS
default USE_UCLIBC
help
Select the C library implementation.

config USE_EGLIBC
bool "Use eglibc"
depends !avr32

config USE_UCLIBC
bool "Use uClibc"

endchoice

source "toolchain/eglibc/Config.in"
source "toolchain/uClibc/Config.in"

comment "Debuggers"
depends TOOLCHAINOPTS

config GDB
bool
depends !avr32
prompt "Build gdb" if TOOLCHAINOPTS
default y
help
Enable if you want to build the gdb

config INSIGHT
bool
prompt "Build insight-gdb" if TOOLCHAINOPTS
select GDB
default n
help
Enable if you want to build insight-gdb

config USE_UCLIBC
bool
default y if !TOOLCHAINOPTS && !EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN

config USE_EXTERNAL_LIBC
bool
default y if EXTERNAL_TOOLCHAIN || NATIVE_TOOLCHAIN

source "toolchain/gcc/Config.version"

source "toolchain/eglibc/Config.version"
source "toolchain/uClibc/Config.version"

config LIBC
string
default "eglibc" if USE_EGLIBC
default "uClibc" if USE_UCLIBC

config LIBC_VERSION
string
default EGLIBC_VERSION if USE_EGLIBC
default UCLIBC_VERSION if USE_UCLIBC

config TARGET_SUFFIX
string
default "gnueabi" if (USE_EGLIBC) && (arm || armeb)
default "gnu" if (USE_EGLIBC) && !(arm || armeb)
default "uclibcgnueabi" if USE_UCLIBC && (arm || armeb)
default "uclibc" if USE_UCLIBC && !(arm || armeb)
86 changes: 86 additions & 0 deletions toolchain/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
#
# Copyright (C) 2007-2009 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
# Main makefile for the toolchain
#
# Steps:
# 1) toolchain/binutils/install
# build & install binutils
# 2) toolchain/gcc/prepare
# build & install a minimal gcc, needed for steps 3 & 4
# 3) toolchain/kernel-headers/install
# install kernel headers, needed for step 4
# 4) toolchain/libc/prepare
# build & install libc headers & support files, needed for step 5
# 5) toolchain/gcc/compile
# build & install an initial gcc, needed for step 6
# 6) toolchain/libc/compile
# build & install the final libc
# 7) toolchain/gcc/install
# build & install the final gcc
# 8) toolchain/libc/install
# build & install libc utilities
#

curdir:=toolchain

# subdirectories to descend into
$(curdir)/builddirs := $(if $(CONFIG_GDB),gdb) $(if $(CONFIG_INSIGHT),insight) $(if $(CONFIG_EXTERNAL_TOOLCHAIN),wrapper,kernel-headers binutils gcc/minimal gcc/initial gcc/final $(LIBC)/headers $(LIBC))
ifdef CONFIG_USE_UCLIBC
$(curdir)/builddirs += $(LIBC)/utils
endif
$(curdir)/builddirs-compile:=$($(curdir)/builddirs-prepare)
$(curdir)/builddirs-install:=$($(curdir)/builddirs-compile)

# builddir dependencies
ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
$(curdir)/gcc/minimal/compile:=$(curdir)/binutils/install
$(curdir)/kernel-headers/install:=$(curdir)/gcc/minimal/install
$(curdir)/gcc/initial/prepare:=$(curdir)/gcc/minimal/prepare
$(curdir)/gcc/final/prepare:=$(curdir)/gcc/initial/prepare

$(curdir)/$(LIBC)/headers/compile:=$(curdir)/kernel-headers/install
$(curdir)/gcc/initial/compile:=$(curdir)/$(LIBC)/headers/install
$(curdir)/$(LIBC)/compile:=$(curdir)/gcc/initial/install
$(curdir)/gcc/final/compile:=$(curdir)/$(LIBC)/install
$(curdir)/$(LIBC)/utils/compile:=$(curdir)/gcc/final/install
$(curdir)/$(LIBC)/prepare:=$(curdir)/$(LIBC)/headers/prepare
$(curdir)/$(LIBC)/utils/prepare:=$(curdir)/$(LIBC)/headers/prepare
endif

ifdef CONFIG_GCC_VERSION_LLVM
$(curdir)/builddirs += llvm
$(curdir)/gcc/minimal/compile += $(curdir)/llvm/install
endif

ifndef DUMP_TARGET_DB
ifneq ($(ARCH),)
$(TOOLCHAIN_DIR)/info.mk: .config
@for dir in $(TOOLCHAIN_DIR); do ( \
$(if $(QUIET),,set -x;) \
mkdir -p "$$dir"; \
cd "$$dir"; \
ln -sf lib lib64; \
mkdir -p stamp lib usr/include usr/lib ; \
); done
@grep GCC_VERSION $@ >/dev/null 2>&1 || $(INSTALL_DATA) $(TOPDIR)/toolchain/info.mk $@
@touch $@
endif
endif

# prerequisites for the individual targets
$(curdir)/ := .config prereq
$(curdir)//prepare = $(STAGING_DIR)/.prepared $(TOOLCHAIN_DIR)/info.mk
$(curdir)//compile = $(1)/prepare
$(curdir)//install = $(1)/compile

ifndef DUMP_TARGET_DB
$(TOOLCHAIN_DIR)/stamp/.gcc-initial_installed:
endif

$(eval $(call stampfile,$(curdir),toolchain,install,$(TOOLCHAIN_DIR)/stamp/.gcc-initial_installed,,$(TOOLCHAIN_DIR)))
$(eval $(call subdir,$(curdir)))

53 changes: 53 additions & 0 deletions toolchain/binutils/Config.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Choose binutils version.

choice
prompt "Binutils Version" if TOOLCHAINOPTS
default BINUTILS_VERSION_2_19_1 if ubicom32
default BINUTILS_VERSION_2_20_1 if avr32
default BINUTILS_VERSION_2_22
help
Select the version of binutils you wish to use.

config BINUTILS_VERSION_2_19_1
depends ubicom32
bool "binutils 2.19.1"

config BINUTILS_VERSION_2_20_1
depends avr32
bool "binutils 2.20.1"

config BINUTILS_VERSION_2_21
depends !ubicom32
depends !avr32 || (avr32 && BROKEN)
bool "binutils 2.21"

config BINUTILS_VERSION_2_21_1
depends !ubicom32
depends !avr32 || (avr32 && BROKEN)
bool "binutils 2.21.1"

config BINUTILS_VERSION_2_22
depends !ubicom32 || (ubicom32 && BROKEN)
depends !avr32 || (avr32 && BROKEN)
bool "binutils 2.22"

endchoice

config EXTRA_BINUTILS_CONFIG_OPTIONS
string
prompt "Additional binutils configure options" if TOOLCHAINOPTS
default ""
help
Any additional binutils options you may want to include....

config BINUTILS_VERSION
string
prompt "Binutils Version" if (TOOLCHAINOPTS && NULL)
default "2.19.1" if BINUTILS_VERSION_2_19_1
default "2.20.1" if BINUTILS_VERSION_2_20_1
default "2.21" if BINUTILS_VERSION_2_21
default "2.21.1" if BINUTILS_VERSION_2_21_1
default "2.22" if BINUTILS_VERSION_2_22
default "2.19.1" if ubicom32
default "2.20.1" if avr32
default "2.22"
Loading