您的位置:首页 > 其它

uboot-1.1.6_s3c2440/config.mk 阅读

2015-06-22 10:35 239 查看
#########################################################################

# 判断是否在在其他目录下生成

ifneq ($(OBJTREE),$(SRCTREE))

ifeq ($(CURDIR),$(SRCTREE))

dir :=

else

# 将当前目录下的SRCTRE/部分去掉

dir := $(subst $(SRCTREE)/,,$(CURDIR))

endif

# 定义obj 和src

obj := $(if $(dir),$(OBJTREE)/$(dir)/,$(OBJTREE)/)

src := $(if $(dir),$(SRCTREE)/$(dir)/,$(SRCTREE)/)

$(shell mkdir -p $(obj))

else

# 在本目录下生成则obj,src为空

obj :=

src :=

endif #ifneq ($(OBJTREE),$(SRCTREE))

# clean the slate ...

# 清除记录

PLATFORM_RELFLAGS =

PLATFORM_CPPFLAGS =

PLATFORM_LDFLAGS =

# sinclude表示silent include,即使出错也不报错

# include arm_config.mk

# 设置了PLATFORM_CPPFLAGS

ifdef ARCH

sinclude $(TOPDIR)/$(ARCH)_config.mk # include architecture dependend rules

endif

# include cpu/arm920t/config.mk

# 设置了 PLATFORM_RELFLAGS,PLATFORM_CPPFLAGS

ifdef CPU

sinclude $(TOPDIR)/cpu/$(CPU)/config.mk # include  CPU
specific rules

endif

# 没有 cpu/arm920t/s3c24x0/config.mk

ifdef SOC

sinclude $(TOPDIR)/cpu/$(CPU)/$(SOC)/config.mk
# include  SoC specific rules

endif

# include board/100ask24x0/config.mk

# TEXT_BASE=0x33F80000

ifdef VENDOR

BOARDDIR = $(VENDOR)/$(BOARD)

else

BOARDDIR = $(BOARD)

endif

ifdef BOARD

sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk
# include board specific rules

endif

#########################################################################

# 若定义了BASH且“$BASH”文件是可执行文件,则CONFIG_SHELL的值为“$BASH”。

# 否则判断“/bin/bash”,则CONFIG_SHELL的值为“/bin/bash”。

# 否则“sh”赋值给SHELL变量,则CONFIG_SHELL的值为“sh”。

CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
   else if [ -x /bin/bash ]; then echo /bin/bash; \
   else echo sh; fi ; fi)

#定义了HOSTCC,HOSTCFLAGS和HOSTSTRIP

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是否支持传递参数1,若是显示参数1,否则显示参数2

# FLAGS +=$(call cc-option,option1,option2)

# CC=arm-linux-gcc, -S 仅编译, -xc 指定输入文件的语言为c

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...)

# 对于arm开发板,CROSS_COMPILE在lib_arm/config.mk文件中定义:

AS = $(CROSS_COMPILE)as

LD = $(CROSS_COMPILE)ld

CC = $(CROSS_COMPILE)gcc

CPP = $(CC) -E

AR = $(CROSS_COMPILE)ar

NM = $(CROSS_COMPILE)nm

STRIP = $(CROSS_COMPILE)strip

OBJCOPY = $(CROSS_COMPILE)objcopy

OBJDUMP = $(CROSS_COMPILE)objdump

RANLIB = $(CROSS_COMPILE)RANLIB

# 设置ARFLAGS

# $(findstring <find>,<in>) 在 MAKEFLAGS 中找 s

ifneq (,$(findstring s,$(MAKEFLAGS)))

ARFLAGS = cr

else

ARFLAGS = crv

endif

RELFLAGS= $(PLATFORM_RELFLAGS)

DBGFLAGS= -g # -DDEBUG

OPTFLAGS= -Os #-fomit-frame-pointer

# 定义了链接脚本LDSCRIP,判断CONFIG_NAND_U_BOOT是否设置

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

# include目录

gccincdir := $(shell $(CC) -print-file-name=include)

# 合成CPPFLAGS

CPPFLAGS := $(DBGFLAGS) $(OPTFLAGS) $(RELFLAGS)
\
-D__KERNEL__ -DTEXT_BASE=$(TEXT_BASE)
\

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

# $(CPPFLAGS) sets -g, which causes gcc to pass a suitable -g<format>

# option to the assembler.

AFLAGS_DEBUG :=

AFLAGS := $(AFLAGS_DEBUG) -D__ASSEMBLY__ $(CPPFLAGS)

LDFLAGS += -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS)

# BFD Library:Binary File Descriptor(二进制文件描述)

# 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

#########################################################################
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  makefile u-boot