28eab0d773
When compile-testing on powerpc, I get errors like this: net/nfs.c:422: undefined reference to `__stack_chk_fail_local' This seems to be because -fstack-protector is on by default, so let's explicitly disable it on all architectures that support the option. The Ubuntu toolchain is affected by this problem, and according to Mike Frysinger, Gentoo has been running with SSP enabled for years. More and more distros are turning SSP on by default, so this problem is likely to get worse in the future. Also, powerpc just happens to be one of the arches I do compile-testing on. There may be other arches affected by this too. Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
259 lines
6.7 KiB
Makefile
259 lines
6.7 KiB
Makefile
#
|
|
# (C) Copyright 2000-2006
|
|
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
|
#
|
|
# See file CREDITS for list of people who contributed to this
|
|
# project.
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License as
|
|
# published by the Free Software Foundation; either version 2 of
|
|
# the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
# MA 02111-1307 USA
|
|
#
|
|
|
|
#########################################################################
|
|
|
|
ifneq ($(OBJTREE),$(SRCTREE))
|
|
ifeq ($(CURDIR),$(SRCTREE))
|
|
dir :=
|
|
else
|
|
dir := $(subst $(SRCTREE)/,,$(CURDIR))
|
|
endif
|
|
|
|
obj := $(if $(dir),$(OBJTREE)/$(dir)/,$(OBJTREE)/)
|
|
src := $(if $(dir),$(SRCTREE)/$(dir)/,$(SRCTREE)/)
|
|
|
|
$(shell mkdir -p $(obj))
|
|
else
|
|
obj :=
|
|
src :=
|
|
endif
|
|
|
|
# clean the slate ...
|
|
PLATFORM_RELFLAGS =
|
|
PLATFORM_CPPFLAGS =
|
|
PLATFORM_LDFLAGS =
|
|
|
|
#
|
|
# When cross-compiling on NetBSD, we have to define __PPC__ or else we
|
|
# will pick up a va_list declaration that is incompatible with the
|
|
# actual argument lists emitted by the compiler.
|
|
#
|
|
# [Tested on NetBSD/i386 1.5 + cross-powerpc-netbsd-1.3]
|
|
|
|
ifeq ($(ARCH),ppc)
|
|
ifeq ($(CROSS_COMPILE),powerpc-netbsd-)
|
|
PLATFORM_CPPFLAGS+= -D__PPC__
|
|
endif
|
|
ifeq ($(CROSS_COMPILE),powerpc-openbsd-)
|
|
PLATFORM_CPPFLAGS+= -D__PPC__
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(ARCH),arm)
|
|
ifeq ($(CROSS_COMPILE),powerpc-netbsd-)
|
|
PLATFORM_CPPFLAGS+= -D__ARM__
|
|
endif
|
|
ifeq ($(CROSS_COMPILE),powerpc-openbsd-)
|
|
PLATFORM_CPPFLAGS+= -D__ARM__
|
|
endif
|
|
endif
|
|
|
|
#########################################################################
|
|
|
|
CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
|
|
else if [ -x /bin/bash ]; then echo /bin/bash; \
|
|
else echo sh; fi ; fi)
|
|
|
|
ifeq ($(HOSTOS)-$(HOSTARCH),darwin-ppc)
|
|
HOSTCC = cc
|
|
else
|
|
HOSTCC = gcc
|
|
endif
|
|
HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
|
|
HOSTSTRIP = strip
|
|
|
|
#########################################################################
|
|
#
|
|
# Option checker (courtesy linux kernel) to ensure
|
|
# only supported compiler options are used
|
|
#
|
|
cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
|
|
> /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
|
|
|
|
#
|
|
# Include the make variables (CC, etc...)
|
|
#
|
|
AS = $(CROSS_COMPILE)as
|
|
LD = $(CROSS_COMPILE)ld
|
|
CC = $(CROSS_COMPILE)gcc
|
|
CPP = $(CC) -E
|
|
AR = $(CROSS_COMPILE)ar
|
|
NM = $(CROSS_COMPILE)nm
|
|
LDR = $(CROSS_COMPILE)ldr
|
|
STRIP = $(CROSS_COMPILE)strip
|
|
OBJCOPY = $(CROSS_COMPILE)objcopy
|
|
OBJDUMP = $(CROSS_COMPILE)objdump
|
|
RANLIB = $(CROSS_COMPILE)RANLIB
|
|
|
|
#########################################################################
|
|
|
|
# Load generated board configuration
|
|
sinclude $(OBJTREE)/include/autoconf.mk
|
|
|
|
ifdef ARCH
|
|
sinclude $(TOPDIR)/$(ARCH)_config.mk # include architecture dependend rules
|
|
endif
|
|
ifdef CPU
|
|
sinclude $(TOPDIR)/cpu/$(CPU)/config.mk # include CPU specific rules
|
|
endif
|
|
ifdef SOC
|
|
sinclude $(TOPDIR)/cpu/$(CPU)/$(SOC)/config.mk # include SoC specific rules
|
|
endif
|
|
ifdef VENDOR
|
|
BOARDDIR = $(VENDOR)/$(BOARD)
|
|
else
|
|
BOARDDIR = $(BOARD)
|
|
endif
|
|
ifdef BOARD
|
|
sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk # include board specific rules
|
|
endif
|
|
|
|
#########################################################################
|
|
|
|
ifneq (,$(findstring s,$(MAKEFLAGS)))
|
|
ARFLAGS = cr
|
|
else
|
|
ARFLAGS = crv
|
|
endif
|
|
RELFLAGS= $(PLATFORM_RELFLAGS)
|
|
DBGFLAGS= -g # -DDEBUG
|
|
OPTFLAGS= -Os #-fomit-frame-pointer
|
|
ifndef LDSCRIPT
|
|
#LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug
|
|
ifeq ($(CONFIG_NAND_U_BOOT),y)
|
|
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
|
|
else
|
|
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
|
|
endif
|
|
endif
|
|
OBJCFLAGS += --gap-fill=0xff
|
|
|
|
gccincdir := $(shell $(CC) -print-file-name=include)
|
|
|
|
CPPFLAGS := $(DBGFLAGS) $(OPTFLAGS) $(RELFLAGS) \
|
|
-D__KERNEL__
|
|
ifneq ($(TEXT_BASE),)
|
|
CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE)
|
|
endif
|
|
|
|
ifneq ($(OBJTREE),$(SRCTREE))
|
|
CPPFLAGS += -I$(OBJTREE)/include2 -I$(OBJTREE)/include
|
|
endif
|
|
|
|
CPPFLAGS += -I$(TOPDIR)/include
|
|
CPPFLAGS += -fno-builtin -ffreestanding -nostdinc \
|
|
-isystem $(gccincdir) -pipe $(PLATFORM_CPPFLAGS)
|
|
|
|
ifdef BUILD_TAG
|
|
CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes \
|
|
-DBUILD_TAG='"$(BUILD_TAG)"'
|
|
else
|
|
CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes
|
|
endif
|
|
|
|
CFLAGS += $(call cc-option,-fno-stack-protector)
|
|
|
|
# avoid trigraph warnings while parsing pci.h (produced by NIOS gcc-2.9)
|
|
# this option have to be placed behind -Wall -- that's why it is here
|
|
ifeq ($(ARCH),nios)
|
|
ifeq ($(findstring 2.9,$(shell $(CC) --version)),2.9)
|
|
CFLAGS := $(CPPFLAGS) -Wall -Wno-trigraphs
|
|
endif
|
|
endif
|
|
|
|
# $(CPPFLAGS) sets -g, which causes gcc to pass a suitable -g<format>
|
|
# option to the assembler.
|
|
AFLAGS_DEBUG :=
|
|
|
|
# turn jbsr into jsr for m68k
|
|
ifeq ($(ARCH),m68k)
|
|
ifeq ($(findstring 3.4,$(shell $(CC) --version)),3.4)
|
|
AFLAGS_DEBUG := -Wa,-gstabs,-S
|
|
endif
|
|
endif
|
|
|
|
AFLAGS := $(AFLAGS_DEBUG) -D__ASSEMBLY__ $(CPPFLAGS)
|
|
|
|
LDFLAGS += -Bstatic -T $(LDSCRIPT) $(PLATFORM_LDFLAGS)
|
|
ifneq ($(TEXT_BASE),)
|
|
LDFLAGS += -Ttext $(TEXT_BASE)
|
|
endif
|
|
|
|
# Location of a usable BFD library, where we define "usable" as
|
|
# "built for ${HOST}, supports ${TARGET}". Sensible values are
|
|
# - When cross-compiling: the root of the cross-environment
|
|
# - Linux/ppc (native): /usr
|
|
# - NetBSD/ppc (native): you lose ... (must extract these from the
|
|
# binutils build directory, plus the native and U-Boot include
|
|
# files don't like each other)
|
|
#
|
|
# So far, this is used only by tools/gdb/Makefile.
|
|
|
|
ifeq ($(HOSTOS)-$(HOSTARCH),darwin-ppc)
|
|
BFD_ROOT_DIR = /usr/local/tools
|
|
else
|
|
ifeq ($(HOSTARCH),$(ARCH))
|
|
# native
|
|
BFD_ROOT_DIR = /usr
|
|
else
|
|
#BFD_ROOT_DIR = /LinuxPPC/CDK # Linux/i386
|
|
#BFD_ROOT_DIR = /usr/pkg/cross # NetBSD/i386
|
|
BFD_ROOT_DIR = /opt/powerpc
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(PCI_CLOCK),PCI_66M)
|
|
CFLAGS := $(CFLAGS) -DPCI_66M
|
|
endif
|
|
|
|
#########################################################################
|
|
|
|
export CONFIG_SHELL HPATH HOSTCC HOSTCFLAGS CROSS_COMPILE \
|
|
AS LD CC CPP AR NM STRIP OBJCOPY OBJDUMP \
|
|
MAKE
|
|
export TEXT_BASE PLATFORM_CPPFLAGS PLATFORM_RELFLAGS CPPFLAGS CFLAGS AFLAGS
|
|
|
|
#########################################################################
|
|
|
|
ifndef REMOTE_BUILD
|
|
|
|
%.s: %.S
|
|
$(CPP) $(AFLAGS) -o $@ $<
|
|
%.o: %.S
|
|
$(CC) $(AFLAGS) -c -o $@ $<
|
|
%.o: %.c
|
|
$(CC) $(CFLAGS) -c -o $@ $<
|
|
|
|
else
|
|
|
|
$(obj)%.s: %.S
|
|
$(CPP) $(AFLAGS) -o $@ $<
|
|
$(obj)%.o: %.S
|
|
$(CC) $(AFLAGS) -c -o $@ $<
|
|
$(obj)%.o: %.c
|
|
$(CC) $(CFLAGS) -c -o $@ $<
|
|
endif
|
|
|
|
#########################################################################
|