1 # 2 # (C) Copyright 2000-2006 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 ifneq ($(OBJTREE),$(SRCTREE)) 27 ifeq ($(CURDIR),$(SRCTREE)) 28 dir := 29 else 30 dir := $(subst $(SRCTREE)/,,$(CURDIR)) 31 endif 32 33 obj := $(if $(dir),$(OBJTREE)/$(dir)/,$(OBJTREE)/) 34 src := $(if $(dir),$(SRCTREE)/$(dir)/,$(SRCTREE)/) 35 36 $(shell mkdir -p $(obj)) 37 else 38 obj := 39 src := 40 endif 41 42 # clean the slate ... 43 PLATFORM_RELFLAGS = 44 PLATFORM_CPPFLAGS = 45 PLATFORM_LDFLAGS = 46 47 ######################################################################### 48 49 HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \ 50 $(HOSTCPPFLAGS) 51 HOSTSTRIP = strip 52 53 # 54 # Mac OS X / Darwin's C preprocessor is Apple specific. It 55 # generates numerous errors and warnings. We want to bypass it 56 # and use GNU C's cpp. To do this we pass the -traditional-cpp 57 # option to the compiler. Note that the -traditional-cpp flag 58 # DOES NOT have the same semantics as GNU C's flag, all it does 59 # is invoke the GNU preprocessor in stock ANSI/ISO C fashion. 60 # 61 # Apple's linker is similar, thanks to the new 2 stage linking 62 # multiple symbol definitions are treated as errors, hence the 63 # -multiply_defined suppress option to turn off this error. 64 # 65 66 ifeq ($(HOSTOS),darwin) 67 HOSTCC = cc 68 HOSTCFLAGS += -traditional-cpp 69 HOSTLDFLAGS += -multiply_defined suppress 70 else 71 HOSTCC = gcc 72 endif 73 74 ifeq ($(HOSTOS),cygwin) 75 HOSTCFLAGS += -ansi 76 endif 77 78 # We build some files with extra pedantic flags to try to minimize things 79 # that won't build on some weird host compiler -- though there are lots of 80 # exceptions for files that aren't complaint. 81 82 HOSTCFLAGS_NOPED = $(filter-out -pedantic,$(HOSTCFLAGS)) 83 HOSTCFLAGS += -pedantic 84 85 ######################################################################### 86 # 87 # Option checker (courtesy linux kernel) to ensure 88 # only supported compiler options are used 89 # 90 cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \ 91 > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;) 92 93 # 94 # Include the make variables (CC, etc...) 95 # 96 AS = $(CROSS_COMPILE)as 97 LD = $(CROSS_COMPILE)ld 98 CC = $(CROSS_COMPILE)gcc 99 CPP = $(CC) -E 100 AR = $(CROSS_COMPILE)ar 101 NM = $(CROSS_COMPILE)nm 102 LDR = $(CROSS_COMPILE)ldr 103 STRIP = $(CROSS_COMPILE)strip 104 OBJCOPY = $(CROSS_COMPILE)objcopy 105 OBJDUMP = $(CROSS_COMPILE)objdump 106 RANLIB = $(CROSS_COMPILE)RANLIB 107 108 ######################################################################### 109 110 # Load generated board configuration 111 sinclude $(OBJTREE)/include/autoconf.mk 112 113 ifdef ARCH 114 sinclude $(TOPDIR)/lib_$(ARCH)/config.mk # include architecture dependend rules 115 endif 116 ifdef CPU 117 sinclude $(TOPDIR)/cpu/$(CPU)/config.mk # include CPU specific rules 118 endif 119 ifdef SOC 120 sinclude $(TOPDIR)/cpu/$(CPU)/$(SOC)/config.mk # include SoC specific rules 121 endif 122 ifdef VENDOR 123 BOARDDIR = $(VENDOR)/$(BOARD) 124 else 125 BOARDDIR = $(BOARD) 126 endif 127 ifdef BOARD 128 sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk # include board specific rules 129 endif 130 131 ######################################################################### 132 133 ifneq (,$(findstring s,$(MAKEFLAGS))) 134 ARFLAGS = cr 135 else 136 ARFLAGS = crv 137 endif 138 RELFLAGS= $(PLATFORM_RELFLAGS) 139 DBGFLAGS= -g # -DDEBUG 140 OPTFLAGS= -Os #-fomit-frame-pointer 141 ifndef LDSCRIPT 142 #LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug 143 ifeq ($(CONFIG_NAND_U_BOOT),y) 144 LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds 145 else 146 LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds 147 endif 148 endif 149 OBJCFLAGS += --gap-fill=0xff 150 151 gccincdir := $(shell $(CC) -print-file-name=include) 152 153 CPPFLAGS := $(DBGFLAGS) $(OPTFLAGS) $(RELFLAGS) \ 154 -D__KERNEL__ 155 ifneq ($(TEXT_BASE),) 156 CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE) 157 endif 158 159 ifneq ($(RESET_VECTOR_ADDRESS),) 160 CPPFLAGS += -DRESET_VECTOR_ADDRESS=$(RESET_VECTOR_ADDRESS) 161 endif 162 163 ifneq ($(OBJTREE),$(SRCTREE)) 164 CPPFLAGS += -I$(OBJTREE)/include2 -I$(OBJTREE)/include 165 endif 166 167 CPPFLAGS += -I$(TOPDIR)/include 168 CPPFLAGS += -fno-builtin -ffreestanding -nostdinc \ 169 -isystem $(gccincdir) -pipe $(PLATFORM_CPPFLAGS) 170 171 ifdef BUILD_TAG 172 CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes \ 173 -DBUILD_TAG='"$(BUILD_TAG)"' 174 else 175 CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes 176 endif 177 178 CFLAGS += $(call cc-option,-fno-stack-protector) 179 180 # avoid trigraph warnings while parsing pci.h (produced by NIOS gcc-2.9) 181 # this option have to be placed behind -Wall -- that's why it is here 182 ifeq ($(ARCH),nios) 183 ifeq ($(findstring 2.9,$(shell $(CC) --version)),2.9) 184 CFLAGS := $(CPPFLAGS) -Wall -Wno-trigraphs 185 endif 186 endif 187 188 # $(CPPFLAGS) sets -g, which causes gcc to pass a suitable -g<format> 189 # option to the assembler. 190 AFLAGS_DEBUG := 191 192 # turn jbsr into jsr for m68k 193 ifeq ($(ARCH),m68k) 194 ifeq ($(findstring 3.4,$(shell $(CC) --version)),3.4) 195 AFLAGS_DEBUG := -Wa,-gstabs,-S 196 endif 197 endif 198 199 AFLAGS := $(AFLAGS_DEBUG) -D__ASSEMBLY__ $(CPPFLAGS) 200 201 LDFLAGS += -Bstatic -T $(obj)u-boot.lds $(PLATFORM_LDFLAGS) 202 ifneq ($(TEXT_BASE),) 203 LDFLAGS += -Ttext $(TEXT_BASE) 204 endif 205 206 # Location of a usable BFD library, where we define "usable" as 207 # "built for ${HOST}, supports ${TARGET}". Sensible values are 208 # - When cross-compiling: the root of the cross-environment 209 # - Linux/ppc (native): /usr 210 # - NetBSD/ppc (native): you lose ... (must extract these from the 211 # binutils build directory, plus the native and U-Boot include 212 # files don't like each other) 213 # 214 # So far, this is used only by tools/gdb/Makefile. 215 216 ifeq ($(HOSTOS),darwin) 217 BFD_ROOT_DIR = /usr/local/tools 218 else 219 ifeq ($(HOSTARCH),$(ARCH)) 220 # native 221 BFD_ROOT_DIR = /usr 222 else 223 #BFD_ROOT_DIR = /LinuxPPC/CDK # Linux/i386 224 #BFD_ROOT_DIR = /usr/pkg/cross # NetBSD/i386 225 BFD_ROOT_DIR = /opt/powerpc 226 endif 227 endif 228 229 ######################################################################### 230 231 export HOSTCC HOSTCFLAGS HOSTLDFLAGS PEDCFLAGS HOSTSTRIP CROSS_COMPILE \ 232 AS LD CC CPP AR NM STRIP OBJCOPY OBJDUMP MAKE 233 export TEXT_BASE PLATFORM_CPPFLAGS PLATFORM_RELFLAGS CPPFLAGS CFLAGS AFLAGS 234 235 ######################################################################### 236 237 # Allow boards to use custom optimize flags on a per dir/file basis 238 BCURDIR := $(notdir $(CURDIR)) 239 $(obj)%.s: %.S 240 $(CPP) $(AFLAGS) $(AFLAGS_$(@F)) $(AFLAGS_$(BCURDIR)) -o $@ $< 241 $(obj)%.o: %.S 242 $(CC) $(AFLAGS) $(AFLAGS_$(@F)) $(AFLAGS_$(BCURDIR)) -o $@ $< -c 243 $(obj)%.o: %.c 244 $(CC) $(CFLAGS) $(CFLAGS_$(@F)) $(CFLAGS_$(BCURDIR)) -o $@ $< -c 245 $(obj)%.i: %.c 246 $(CPP) $(CFLAGS) $(CFLAGS_$(@F)) $(CFLAGS_$(BCURDIR)) -o $@ $< -c 247 $(obj)%.s: %.c 248 $(CC) $(CFLAGS) $(CFLAGS_$(@F)) $(CFLAGS_$(BCURDIR)) -o $@ $< -c -S 249 250 ######################################################################### 251