1# 2# (C) Copyright 2000 3# Wolfgang Denk, DENX Software Engineering, wd@denx.de. 4# 5# See file CREDITS for list of people who contributed to this 6# project. 7# 8# This program is free software; you can redistribute it and/or 9# modify it under the terms of the GNU General Public License as 10# published by the Free Software Foundation; either version 2 of 11# the License, or (at your option) any later version. 12# 13# This program is distributed in the hope that it will be useful, 14# but WITHOUT ANY WARRANTY; without even the implied warranty of 15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16# GNU General Public License for more details. 17# 18# You should have received a copy of the GNU General Public License 19# along with this program; if not, write to the Free Software 20# Foundation, Inc., 59 Temple Place, Suite 330, Boston, 21# MA 02111-1307 USA 22# 23 24######################################################################### 25 26# clean the slate ... 27PLATFORM_RELFLAGS = 28PLATFORM_CPPFLAGS = 29PLATFORM_LDFLAGS = 30 31# 32# When cross-compiling on NetBSD, we have to define __PPC__ or else we 33# will pick up a va_list declaration that is incompatible with the 34# actual argument lists emitted by the compiler. 35# 36# [Tested on NetBSD/i386 1.5 + cross-powerpc-netbsd-1.3] 37 38ifeq ($(ARCH),ppc) 39ifeq ($(CROSS_COMPILE),powerpc-netbsd-) 40PLATFORM_CPPFLAGS+= -D__PPC__ 41endif 42ifeq ($(CROSS_COMPILE),powerpc-openbsd-) 43PLATFORM_CPPFLAGS+= -D__PPC__ 44endif 45endif 46 47ifeq ($(ARCH),arm) 48ifeq ($(CROSS_COMPILE),powerpc-netbsd-) 49PLATFORM_CPPFLAGS+= -D__ARM__ 50endif 51ifeq ($(CROSS_COMPILE),powerpc-openbsd-) 52PLATFORM_CPPFLAGS+= -D__ARM__ 53endif 54endif 55 56ifdef ARCH 57sinclude $(TOPDIR)/$(ARCH)_config.mk # include architecture dependend rules 58endif 59ifdef CPU 60sinclude $(TOPDIR)/cpu/$(CPU)/config.mk # include CPU specific rules 61endif 62ifdef SOC 63sinclude $(TOPDIR)/cpu/$(CPU)/$(SOC)/config.mk # include SoC specific rules 64endif 65ifdef VENDOR 66BOARDDIR = $(VENDOR)/$(BOARD) 67else 68BOARDDIR = $(BOARD) 69endif 70ifdef BOARD 71sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk # include board specific rules 72endif 73 74######################################################################### 75 76CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ 77 else if [ -x /bin/bash ]; then echo /bin/bash; \ 78 else echo sh; fi ; fi) 79 80ifeq ($(HOSTOS)-$(HOSTARCH),darwin-ppc) 81HOSTCC = cc 82else 83HOSTCC = gcc 84endif 85HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer 86HOSTSTRIP = strip 87 88######################################################################### 89# 90# Option checker (courtesy linux kernel) to ensure 91# only supported compiler options are used 92# 93cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \ 94 > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;) 95 96# 97# Include the make variables (CC, etc...) 98# 99AS = $(CROSS_COMPILE)as 100LD = $(CROSS_COMPILE)ld 101CC = $(CROSS_COMPILE)gcc 102CPP = $(CC) -E 103AR = $(CROSS_COMPILE)ar 104NM = $(CROSS_COMPILE)nm 105STRIP = $(CROSS_COMPILE)strip 106OBJCOPY = $(CROSS_COMPILE)objcopy 107OBJDUMP = $(CROSS_COMPILE)objdump 108RANLIB = $(CROSS_COMPILE)RANLIB 109 110RELFLAGS= $(PLATFORM_RELFLAGS) 111DBGFLAGS= -g #-DDEBUG 112OPTFLAGS= -Os #-fomit-frame-pointer 113ifndef LDSCRIPT 114#LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug 115LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds 116endif 117OBJCFLAGS += --gap-fill=0xff 118 119gccincdir := $(shell $(CC) -print-file-name=include) 120 121CPPFLAGS := $(DBGFLAGS) $(OPTFLAGS) $(RELFLAGS) \ 122 -D__KERNEL__ -DTEXT_BASE=$(TEXT_BASE) \ 123 -I$(TOPDIR)/include \ 124 -fno-builtin -ffreestanding -nostdinc -isystem \ 125 $(gccincdir) -pipe $(PLATFORM_CPPFLAGS) 126 127ifdef BUILD_TAG 128CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes \ 129 -DBUILD_TAG='"$(BUILD_TAG)"' 130else 131CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes 132endif 133 134# avoid trigraph warnings while parsing pci.h (produced by NIOS gcc-2.9) 135# this option have to be placed behind -Wall -- that's why it is here 136ifeq ($(ARCH),nios) 137ifeq ($(findstring 2.9,$(shell $(CC) --version)),2.9) 138CFLAGS := $(CPPFLAGS) -Wall -Wno-trigraphs 139endif 140endif 141 142AFLAGS_DEBUG := -Wa,-gstabs 143AFLAGS := $(AFLAGS_DEBUG) -D__ASSEMBLY__ $(CPPFLAGS) 144 145LDFLAGS += -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS) 146 147# Location of a usable BFD library, where we define "usable" as 148# "built for ${HOST}, supports ${TARGET}". Sensible values are 149# - When cross-compiling: the root of the cross-environment 150# - Linux/ppc (native): /usr 151# - NetBSD/ppc (native): you lose ... (must extract these from the 152# binutils build directory, plus the native and U-Boot include 153# files don't like each other) 154# 155# So far, this is used only by tools/gdb/Makefile. 156 157ifeq ($(HOSTOS)-$(HOSTARCH),darwin-ppc) 158BFD_ROOT_DIR = /usr/local/tools 159else 160ifeq ($(HOSTARCH),$(ARCH)) 161# native 162BFD_ROOT_DIR = /usr 163else 164#BFD_ROOT_DIR = /LinuxPPC/CDK # Linux/i386 165#BFD_ROOT_DIR = /usr/pkg/cross # NetBSD/i386 166BFD_ROOT_DIR = /opt/powerpc 167endif 168endif 169 170ifeq ($(PCI_CLOCK),PCI_66M) 171CFLAGS := $(CFLAGS) -DPCI_66M 172endif 173 174######################################################################### 175 176export CONFIG_SHELL HPATH HOSTCC HOSTCFLAGS CROSS_COMPILE \ 177 AS LD CC CPP AR NM STRIP OBJCOPY OBJDUMP \ 178 MAKE 179export TEXT_BASE PLATFORM_CPPFLAGS PLATFORM_RELFLAGS CPPFLAGS CFLAGS AFLAGS 180 181######################################################################### 182 183%.s: %.S 184 $(CPP) $(AFLAGS) -o $@ $(CURDIR)/$< 185%.o: %.S 186 $(CC) $(AFLAGS) -c -o $@ $(CURDIR)/$< 187%.o: %.c 188 $(CC) $(CFLAGS) -c -o $@ $< 189 190######################################################################### 191