122433fc5SMasahiro Yamada# ========================================================================== 222433fc5SMasahiro Yamada# Building 322433fc5SMasahiro Yamada# ========================================================================== 422433fc5SMasahiro Yamada 56825a95bSMasahiro Yamada# Modified for U-Boot 66825a95bSMasahiro Yamadaifeq ($(CONFIG_TPL_BUILD),y) 76825a95bSMasahiro Yamada src := $(patsubst tpl/%,%,$(obj)) 86825a95bSMasahiro Yamadaelse 96825a95bSMasahiro Yamada ifeq ($(CONFIG_SPL_BUILD),y) 106825a95bSMasahiro Yamada src := $(patsubst spl/%,%,$(obj)) 116825a95bSMasahiro Yamada else 1222433fc5SMasahiro Yamada src := $(obj) 136825a95bSMasahiro Yamada endif 146825a95bSMasahiro Yamadaendif 1522433fc5SMasahiro Yamada 1622433fc5SMasahiro YamadaPHONY := __build 1722433fc5SMasahiro Yamada__build: 1822433fc5SMasahiro Yamada 1922433fc5SMasahiro Yamada# Init all relevant variables used in kbuild files so 2022433fc5SMasahiro Yamada# 1) they have correct type 2122433fc5SMasahiro Yamada# 2) they do not inherit any value from the environment 2222433fc5SMasahiro Yamadaobj-y := 2322433fc5SMasahiro Yamadaobj-m := 2422433fc5SMasahiro Yamadalib-y := 2522433fc5SMasahiro Yamadalib-m := 2622433fc5SMasahiro Yamadaalways := 2722433fc5SMasahiro Yamadatargets := 2822433fc5SMasahiro Yamadasubdir-y := 2922433fc5SMasahiro Yamadasubdir-m := 3022433fc5SMasahiro YamadaEXTRA_AFLAGS := 3122433fc5SMasahiro YamadaEXTRA_CFLAGS := 3222433fc5SMasahiro YamadaEXTRA_CPPFLAGS := 3322433fc5SMasahiro YamadaEXTRA_LDFLAGS := 3422433fc5SMasahiro Yamadaasflags-y := 3522433fc5SMasahiro Yamadaccflags-y := 3622433fc5SMasahiro Yamadacppflags-y := 3722433fc5SMasahiro Yamadaldflags-y := 3822433fc5SMasahiro Yamada 3922433fc5SMasahiro Yamadasubdir-asflags-y := 4022433fc5SMasahiro Yamadasubdir-ccflags-y := 4122433fc5SMasahiro Yamada 4222433fc5SMasahiro Yamada# Read auto.conf if it exists, otherwise ignore 4322433fc5SMasahiro Yamada-include include/config/auto.conf 4422433fc5SMasahiro Yamada 45*01072b44SMasahiro Yamada# Added for U-Boot: Load U-Boot configuration 46*01072b44SMasahiro Yamadaifeq ($(CONFIG_TPL_BUILD),y) 47*01072b44SMasahiro Yamada -include include/tpl-autoconf.mk 48*01072b44SMasahiro Yamadaelse 49*01072b44SMasahiro Yamada ifeq ($(CONFIG_SPL_BUILD),y) 50*01072b44SMasahiro Yamada -include include/spl-autoconf.mk 51*01072b44SMasahiro Yamada else 52*01072b44SMasahiro Yamada -include include/autoconf.mk 53*01072b44SMasahiro Yamada endif 54*01072b44SMasahiro Yamadaendif 55*01072b44SMasahiro Yamada 5622433fc5SMasahiro Yamadainclude scripts/Kbuild.include 5722433fc5SMasahiro Yamada 586825a95bSMasahiro Yamada# Added for U-Boot 596825a95bSMasahiro Yamada# We must include config.mk after Kbuild.include 606825a95bSMasahiro Yamada# so that some config.mk can use cc-option. 616825a95bSMasahiro Yamadainclude config.mk 626825a95bSMasahiro Yamada 6322433fc5SMasahiro Yamada# For backward compatibility check that these variables do not change 6422433fc5SMasahiro Yamadasave-cflags := $(CFLAGS) 6522433fc5SMasahiro Yamada 6622433fc5SMasahiro Yamada# The filename Kbuild has precedence over Makefile 6722433fc5SMasahiro Yamadakbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) 6822433fc5SMasahiro Yamadakbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile) 6922433fc5SMasahiro Yamadainclude $(kbuild-file) 7022433fc5SMasahiro Yamada 7122433fc5SMasahiro Yamada# If the save-* variables changed error out 7222433fc5SMasahiro Yamadaifeq ($(KBUILD_NOPEDANTIC),) 7322433fc5SMasahiro Yamada ifneq ("$(save-cflags)","$(CFLAGS)") 7422433fc5SMasahiro Yamada $(error CFLAGS was changed in "$(kbuild-file)". Fix it to use ccflags-y) 7522433fc5SMasahiro Yamada endif 7622433fc5SMasahiro Yamadaendif 7722433fc5SMasahiro Yamada 7822433fc5SMasahiro Yamada# 7922433fc5SMasahiro Yamada# make W=... settings 8022433fc5SMasahiro Yamada# 8122433fc5SMasahiro Yamada# W=1 - warnings that may be relevant and does not occur too often 8222433fc5SMasahiro Yamada# W=2 - warnings that occur quite often but may still be relevant 8322433fc5SMasahiro Yamada# W=3 - the more obscure warnings, can most likely be ignored 8422433fc5SMasahiro Yamada# 8522433fc5SMasahiro Yamada# $(call cc-option, -W...) handles gcc -W.. options which 8622433fc5SMasahiro Yamada# are not supported by all versions of the compiler 8722433fc5SMasahiro Yamadaifdef KBUILD_ENABLE_EXTRA_GCC_CHECKS 8822433fc5SMasahiro Yamadawarning- := $(empty) 8922433fc5SMasahiro Yamada 9022433fc5SMasahiro Yamadawarning-1 := -Wextra -Wunused -Wno-unused-parameter 9122433fc5SMasahiro Yamadawarning-1 += -Wmissing-declarations 9222433fc5SMasahiro Yamadawarning-1 += -Wmissing-format-attribute 9322433fc5SMasahiro Yamadawarning-1 += -Wmissing-prototypes 9422433fc5SMasahiro Yamadawarning-1 += -Wold-style-definition 9522433fc5SMasahiro Yamadawarning-1 += $(call cc-option, -Wmissing-include-dirs) 9622433fc5SMasahiro Yamadawarning-1 += $(call cc-option, -Wunused-but-set-variable) 9722433fc5SMasahiro Yamadawarning-1 += $(call cc-disable-warning, missing-field-initializers) 9822433fc5SMasahiro Yamada 9922433fc5SMasahiro Yamadawarning-2 := -Waggregate-return 10022433fc5SMasahiro Yamadawarning-2 += -Wcast-align 10122433fc5SMasahiro Yamadawarning-2 += -Wdisabled-optimization 10222433fc5SMasahiro Yamadawarning-2 += -Wnested-externs 10322433fc5SMasahiro Yamadawarning-2 += -Wshadow 10422433fc5SMasahiro Yamadawarning-2 += $(call cc-option, -Wlogical-op) 10522433fc5SMasahiro Yamadawarning-2 += $(call cc-option, -Wmissing-field-initializers) 10622433fc5SMasahiro Yamada 10722433fc5SMasahiro Yamadawarning-3 := -Wbad-function-cast 10822433fc5SMasahiro Yamadawarning-3 += -Wcast-qual 10922433fc5SMasahiro Yamadawarning-3 += -Wconversion 11022433fc5SMasahiro Yamadawarning-3 += -Wpacked 11122433fc5SMasahiro Yamadawarning-3 += -Wpadded 11222433fc5SMasahiro Yamadawarning-3 += -Wpointer-arith 11322433fc5SMasahiro Yamadawarning-3 += -Wredundant-decls 11422433fc5SMasahiro Yamadawarning-3 += -Wswitch-default 11522433fc5SMasahiro Yamadawarning-3 += $(call cc-option, -Wpacked-bitfield-compat) 11622433fc5SMasahiro Yamadawarning-3 += $(call cc-option, -Wvla) 11722433fc5SMasahiro Yamada 11822433fc5SMasahiro Yamadawarning := $(warning-$(findstring 1, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS))) 11922433fc5SMasahiro Yamadawarning += $(warning-$(findstring 2, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS))) 12022433fc5SMasahiro Yamadawarning += $(warning-$(findstring 3, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS))) 12122433fc5SMasahiro Yamada 12222433fc5SMasahiro Yamadaifeq ("$(strip $(warning))","") 12322433fc5SMasahiro Yamada $(error W=$(KBUILD_ENABLE_EXTRA_GCC_CHECKS) is unknown) 12422433fc5SMasahiro Yamadaendif 12522433fc5SMasahiro Yamada 12622433fc5SMasahiro YamadaKBUILD_CFLAGS += $(warning) 12722433fc5SMasahiro Yamadaendif 12822433fc5SMasahiro Yamada 12922433fc5SMasahiro Yamadainclude scripts/Makefile.lib 13022433fc5SMasahiro Yamada 13122433fc5SMasahiro Yamadaifdef host-progs 13222433fc5SMasahiro Yamadaifneq ($(hostprogs-y),$(host-progs)) 13322433fc5SMasahiro Yamada$(warning kbuild: $(obj)/Makefile - Usage of host-progs is deprecated. Please replace with hostprogs-y!) 13422433fc5SMasahiro Yamadahostprogs-y += $(host-progs) 13522433fc5SMasahiro Yamadaendif 13622433fc5SMasahiro Yamadaendif 13722433fc5SMasahiro Yamada 13822433fc5SMasahiro Yamada# Do not include host rules unless needed 13922433fc5SMasahiro Yamadaifneq ($(hostprogs-y)$(hostprogs-m),) 14022433fc5SMasahiro Yamadainclude scripts/Makefile.host 14122433fc5SMasahiro Yamadaendif 14222433fc5SMasahiro Yamada 1436825a95bSMasahiro Yamada# Uncommented for U-Boot 1446825a95bSMasahiro Yamada# We need to create output dicrectory for SPL and TPL even for in-tree build 1456825a95bSMasahiro Yamada#ifneq ($(KBUILD_SRC),) 14622433fc5SMasahiro Yamada# Create output directory if not already present 14722433fc5SMasahiro Yamada_dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj)) 14822433fc5SMasahiro Yamada 14922433fc5SMasahiro Yamada# Create directories for object files if directory does not exist 15022433fc5SMasahiro Yamada# Needed when obj-y := dir/file.o syntax is used 15122433fc5SMasahiro Yamada_dummy := $(foreach d,$(obj-dirs), $(shell [ -d $(d) ] || mkdir -p $(d))) 1526825a95bSMasahiro Yamada#endif 15322433fc5SMasahiro Yamada 15422433fc5SMasahiro Yamadaifndef obj 15522433fc5SMasahiro Yamada$(warning kbuild: Makefile.build is included improperly) 15622433fc5SMasahiro Yamadaendif 15722433fc5SMasahiro Yamada 15822433fc5SMasahiro Yamada# =========================================================================== 15922433fc5SMasahiro Yamada 16022433fc5SMasahiro Yamadaifneq ($(strip $(lib-y) $(lib-m) $(lib-n) $(lib-)),) 16122433fc5SMasahiro Yamadalib-target := $(obj)/lib.a 16222433fc5SMasahiro Yamadaendif 16322433fc5SMasahiro Yamada 16422433fc5SMasahiro Yamadaifneq ($(strip $(obj-y) $(obj-m) $(obj-n) $(obj-) $(subdir-m) $(lib-target)),) 16522433fc5SMasahiro Yamadabuiltin-target := $(obj)/built-in.o 16622433fc5SMasahiro Yamadaendif 16722433fc5SMasahiro Yamada 16822433fc5SMasahiro Yamadamodorder-target := $(obj)/modules.order 16922433fc5SMasahiro Yamada 17022433fc5SMasahiro Yamada# We keep a list of all modules in $(MODVERDIR) 17122433fc5SMasahiro Yamada 17222433fc5SMasahiro Yamada__build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \ 17322433fc5SMasahiro Yamada $(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \ 17422433fc5SMasahiro Yamada $(subdir-ym) $(always) 17522433fc5SMasahiro Yamada @: 17622433fc5SMasahiro Yamada 17722433fc5SMasahiro Yamada# Linus' kernel sanity checking tool 17822433fc5SMasahiro Yamadaifneq ($(KBUILD_CHECKSRC),0) 17922433fc5SMasahiro Yamada ifeq ($(KBUILD_CHECKSRC),2) 18022433fc5SMasahiro Yamada quiet_cmd_force_checksrc = CHECK $< 18122433fc5SMasahiro Yamada cmd_force_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ; 18222433fc5SMasahiro Yamada else 18322433fc5SMasahiro Yamada quiet_cmd_checksrc = CHECK $< 18422433fc5SMasahiro Yamada cmd_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ; 18522433fc5SMasahiro Yamada endif 18622433fc5SMasahiro Yamadaendif 18722433fc5SMasahiro Yamada 18822433fc5SMasahiro Yamada# Do section mismatch analysis for each module/built-in.o 18922433fc5SMasahiro Yamadaifdef CONFIG_DEBUG_SECTION_MISMATCH 19022433fc5SMasahiro Yamada cmd_secanalysis = ; scripts/mod/modpost $@ 19122433fc5SMasahiro Yamadaendif 19222433fc5SMasahiro Yamada 19322433fc5SMasahiro Yamada# Compile C sources (.c) 19422433fc5SMasahiro Yamada# --------------------------------------------------------------------------- 19522433fc5SMasahiro Yamada 19622433fc5SMasahiro Yamada# Default is built-in, unless we know otherwise 19722433fc5SMasahiro Yamadamodkern_cflags = \ 19822433fc5SMasahiro Yamada $(if $(part-of-module), \ 19922433fc5SMasahiro Yamada $(KBUILD_CFLAGS_MODULE) $(CFLAGS_MODULE), \ 20022433fc5SMasahiro Yamada $(KBUILD_CFLAGS_KERNEL) $(CFLAGS_KERNEL)) 20122433fc5SMasahiro Yamadaquiet_modtag := $(empty) $(empty) 20222433fc5SMasahiro Yamada 20322433fc5SMasahiro Yamada$(real-objs-m) : part-of-module := y 20422433fc5SMasahiro Yamada$(real-objs-m:.o=.i) : part-of-module := y 20522433fc5SMasahiro Yamada$(real-objs-m:.o=.s) : part-of-module := y 20622433fc5SMasahiro Yamada$(real-objs-m:.o=.lst): part-of-module := y 20722433fc5SMasahiro Yamada 20822433fc5SMasahiro Yamada$(real-objs-m) : quiet_modtag := [M] 20922433fc5SMasahiro Yamada$(real-objs-m:.o=.i) : quiet_modtag := [M] 21022433fc5SMasahiro Yamada$(real-objs-m:.o=.s) : quiet_modtag := [M] 21122433fc5SMasahiro Yamada$(real-objs-m:.o=.lst): quiet_modtag := [M] 21222433fc5SMasahiro Yamada 21322433fc5SMasahiro Yamada$(obj-m) : quiet_modtag := [M] 21422433fc5SMasahiro Yamada 21522433fc5SMasahiro Yamada# Default for not multi-part modules 21622433fc5SMasahiro Yamadamodname = $(basetarget) 21722433fc5SMasahiro Yamada 21822433fc5SMasahiro Yamada$(multi-objs-m) : modname = $(modname-multi) 21922433fc5SMasahiro Yamada$(multi-objs-m:.o=.i) : modname = $(modname-multi) 22022433fc5SMasahiro Yamada$(multi-objs-m:.o=.s) : modname = $(modname-multi) 22122433fc5SMasahiro Yamada$(multi-objs-m:.o=.lst) : modname = $(modname-multi) 22222433fc5SMasahiro Yamada$(multi-objs-y) : modname = $(modname-multi) 22322433fc5SMasahiro Yamada$(multi-objs-y:.o=.i) : modname = $(modname-multi) 22422433fc5SMasahiro Yamada$(multi-objs-y:.o=.s) : modname = $(modname-multi) 22522433fc5SMasahiro Yamada$(multi-objs-y:.o=.lst) : modname = $(modname-multi) 22622433fc5SMasahiro Yamada 22722433fc5SMasahiro Yamadaquiet_cmd_cc_s_c = CC $(quiet_modtag) $@ 22822433fc5SMasahiro Yamadacmd_cc_s_c = $(CC) $(c_flags) -fverbose-asm -S -o $@ $< 22922433fc5SMasahiro Yamada 23022433fc5SMasahiro Yamada$(obj)/%.s: $(src)/%.c FORCE 23122433fc5SMasahiro Yamada $(call if_changed_dep,cc_s_c) 23222433fc5SMasahiro Yamada 23322433fc5SMasahiro Yamadaquiet_cmd_cc_i_c = CPP $(quiet_modtag) $@ 23422433fc5SMasahiro Yamadacmd_cc_i_c = $(CPP) $(c_flags) -o $@ $< 23522433fc5SMasahiro Yamada 23622433fc5SMasahiro Yamada$(obj)/%.i: $(src)/%.c FORCE 23722433fc5SMasahiro Yamada $(call if_changed_dep,cc_i_c) 23822433fc5SMasahiro Yamada 23922433fc5SMasahiro Yamadacmd_gensymtypes = \ 24022433fc5SMasahiro Yamada $(CPP) -D__GENKSYMS__ $(c_flags) $< | \ 24122433fc5SMasahiro Yamada $(GENKSYMS) $(if $(1), -T $(2)) \ 24222433fc5SMasahiro Yamada $(patsubst y,-s _,$(CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX)) \ 24322433fc5SMasahiro Yamada $(if $(KBUILD_PRESERVE),-p) \ 24422433fc5SMasahiro Yamada -r $(firstword $(wildcard $(2:.symtypes=.symref) /dev/null)) 24522433fc5SMasahiro Yamada 24622433fc5SMasahiro Yamadaquiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@ 24722433fc5SMasahiro Yamadacmd_cc_symtypes_c = \ 24822433fc5SMasahiro Yamada set -e; \ 24922433fc5SMasahiro Yamada $(call cmd_gensymtypes,true,$@) >/dev/null; \ 25022433fc5SMasahiro Yamada test -s $@ || rm -f $@ 25122433fc5SMasahiro Yamada 25222433fc5SMasahiro Yamada$(obj)/%.symtypes : $(src)/%.c FORCE 25322433fc5SMasahiro Yamada $(call cmd,cc_symtypes_c) 25422433fc5SMasahiro Yamada 25522433fc5SMasahiro Yamada# C (.c) files 25622433fc5SMasahiro Yamada# The C file is compiled and updated dependency information is generated. 25722433fc5SMasahiro Yamada# (See cmd_cc_o_c + relevant part of rule_cc_o_c) 25822433fc5SMasahiro Yamada 25922433fc5SMasahiro Yamadaquiet_cmd_cc_o_c = CC $(quiet_modtag) $@ 26022433fc5SMasahiro Yamada 26122433fc5SMasahiro Yamadaifndef CONFIG_MODVERSIONS 26222433fc5SMasahiro Yamadacmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< 26322433fc5SMasahiro Yamada 26422433fc5SMasahiro Yamadaelse 26522433fc5SMasahiro Yamada# When module versioning is enabled the following steps are executed: 26622433fc5SMasahiro Yamada# o compile a .tmp_<file>.o from <file>.c 26722433fc5SMasahiro Yamada# o if .tmp_<file>.o doesn't contain a __ksymtab version, i.e. does 26822433fc5SMasahiro Yamada# not export symbols, we just rename .tmp_<file>.o to <file>.o and 26922433fc5SMasahiro Yamada# are done. 27022433fc5SMasahiro Yamada# o otherwise, we calculate symbol versions using the good old 27122433fc5SMasahiro Yamada# genksyms on the preprocessed source and postprocess them in a way 27222433fc5SMasahiro Yamada# that they are usable as a linker script 27322433fc5SMasahiro Yamada# o generate <file>.o from .tmp_<file>.o using the linker to 27422433fc5SMasahiro Yamada# replace the unresolved symbols __crc_exported_symbol with 27522433fc5SMasahiro Yamada# the actual value of the checksum generated by genksyms 27622433fc5SMasahiro Yamada 27722433fc5SMasahiro Yamadacmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $< 27822433fc5SMasahiro Yamadacmd_modversions = \ 27922433fc5SMasahiro Yamada if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then \ 28022433fc5SMasahiro Yamada $(call cmd_gensymtypes,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \ 28122433fc5SMasahiro Yamada > $(@D)/.tmp_$(@F:.o=.ver); \ 28222433fc5SMasahiro Yamada \ 28322433fc5SMasahiro Yamada $(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) \ 28422433fc5SMasahiro Yamada -T $(@D)/.tmp_$(@F:.o=.ver); \ 28522433fc5SMasahiro Yamada rm -f $(@D)/.tmp_$(@F) $(@D)/.tmp_$(@F:.o=.ver); \ 28622433fc5SMasahiro Yamada else \ 28722433fc5SMasahiro Yamada mv -f $(@D)/.tmp_$(@F) $@; \ 28822433fc5SMasahiro Yamada fi; 28922433fc5SMasahiro Yamadaendif 29022433fc5SMasahiro Yamada 29122433fc5SMasahiro Yamadaifdef CONFIG_FTRACE_MCOUNT_RECORD 29222433fc5SMasahiro Yamadaifdef BUILD_C_RECORDMCOUNT 29322433fc5SMasahiro Yamadaifeq ("$(origin RECORDMCOUNT_WARN)", "command line") 29422433fc5SMasahiro Yamada RECORDMCOUNT_FLAGS = -w 29522433fc5SMasahiro Yamadaendif 29622433fc5SMasahiro Yamada# Due to recursion, we must skip empty.o. 29722433fc5SMasahiro Yamada# The empty.o file is created in the make process in order to determine 29822433fc5SMasahiro Yamada# the target endianness and word size. It is made before all other C 29922433fc5SMasahiro Yamada# files, including recordmcount. 30022433fc5SMasahiro Yamadasub_cmd_record_mcount = \ 30122433fc5SMasahiro Yamada if [ $(@) != "scripts/mod/empty.o" ]; then \ 30222433fc5SMasahiro Yamada $(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) "$(@)"; \ 30322433fc5SMasahiro Yamada fi; 30422433fc5SMasahiro Yamadarecordmcount_source := $(srctree)/scripts/recordmcount.c \ 30522433fc5SMasahiro Yamada $(srctree)/scripts/recordmcount.h 30622433fc5SMasahiro Yamadaelse 30722433fc5SMasahiro Yamadasub_cmd_record_mcount = set -e ; perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \ 30822433fc5SMasahiro Yamada "$(if $(CONFIG_CPU_BIG_ENDIAN),big,little)" \ 30922433fc5SMasahiro Yamada "$(if $(CONFIG_64BIT),64,32)" \ 31022433fc5SMasahiro Yamada "$(OBJDUMP)" "$(OBJCOPY)" "$(CC) $(KBUILD_CFLAGS)" \ 31122433fc5SMasahiro Yamada "$(LD)" "$(NM)" "$(RM)" "$(MV)" \ 31222433fc5SMasahiro Yamada "$(if $(part-of-module),1,0)" "$(@)"; 31322433fc5SMasahiro Yamadarecordmcount_source := $(srctree)/scripts/recordmcount.pl 31422433fc5SMasahiro Yamadaendif 31522433fc5SMasahiro Yamadacmd_record_mcount = \ 31622433fc5SMasahiro Yamada if [ "$(findstring -pg,$(_c_flags))" = "-pg" ]; then \ 31722433fc5SMasahiro Yamada $(sub_cmd_record_mcount) \ 31822433fc5SMasahiro Yamada fi; 31922433fc5SMasahiro Yamadaendif 32022433fc5SMasahiro Yamada 32122433fc5SMasahiro Yamadadefine rule_cc_o_c 32222433fc5SMasahiro Yamada $(call echo-cmd,checksrc) $(cmd_checksrc) \ 32322433fc5SMasahiro Yamada $(call echo-cmd,cc_o_c) $(cmd_cc_o_c); \ 32422433fc5SMasahiro Yamada $(cmd_modversions) \ 32522433fc5SMasahiro Yamada $(call echo-cmd,record_mcount) \ 32622433fc5SMasahiro Yamada $(cmd_record_mcount) \ 32722433fc5SMasahiro Yamada scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' > \ 32822433fc5SMasahiro Yamada $(dot-target).tmp; \ 32922433fc5SMasahiro Yamada rm -f $(depfile); \ 33022433fc5SMasahiro Yamada mv -f $(dot-target).tmp $(dot-target).cmd 33122433fc5SMasahiro Yamadaendef 33222433fc5SMasahiro Yamada 33322433fc5SMasahiro Yamada# Built-in and composite module parts 33422433fc5SMasahiro Yamada$(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE 33522433fc5SMasahiro Yamada $(call cmd,force_checksrc) 33622433fc5SMasahiro Yamada $(call if_changed_rule,cc_o_c) 33722433fc5SMasahiro Yamada 33822433fc5SMasahiro Yamada# Single-part modules are special since we need to mark them in $(MODVERDIR) 33922433fc5SMasahiro Yamada 34022433fc5SMasahiro Yamada$(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE 34122433fc5SMasahiro Yamada $(call cmd,force_checksrc) 34222433fc5SMasahiro Yamada $(call if_changed_rule,cc_o_c) 34322433fc5SMasahiro Yamada @{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod) 34422433fc5SMasahiro Yamada 34522433fc5SMasahiro Yamadaquiet_cmd_cc_lst_c = MKLST $@ 34622433fc5SMasahiro Yamada cmd_cc_lst_c = $(CC) $(c_flags) -g -c -o $*.o $< && \ 34722433fc5SMasahiro Yamada $(CONFIG_SHELL) $(srctree)/scripts/makelst $*.o \ 34822433fc5SMasahiro Yamada System.map $(OBJDUMP) > $@ 34922433fc5SMasahiro Yamada 35022433fc5SMasahiro Yamada$(obj)/%.lst: $(src)/%.c FORCE 35122433fc5SMasahiro Yamada $(call if_changed_dep,cc_lst_c) 35222433fc5SMasahiro Yamada 35322433fc5SMasahiro Yamada# Compile assembler sources (.S) 35422433fc5SMasahiro Yamada# --------------------------------------------------------------------------- 35522433fc5SMasahiro Yamada 35622433fc5SMasahiro Yamadamodkern_aflags := $(KBUILD_AFLAGS_KERNEL) $(AFLAGS_KERNEL) 35722433fc5SMasahiro Yamada 35822433fc5SMasahiro Yamada$(real-objs-m) : modkern_aflags := $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE) 35922433fc5SMasahiro Yamada$(real-objs-m:.o=.s): modkern_aflags := $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE) 36022433fc5SMasahiro Yamada 36122433fc5SMasahiro Yamadaquiet_cmd_as_s_S = CPP $(quiet_modtag) $@ 36222433fc5SMasahiro Yamadacmd_as_s_S = $(CPP) $(a_flags) -o $@ $< 36322433fc5SMasahiro Yamada 36422433fc5SMasahiro Yamada$(obj)/%.s: $(src)/%.S FORCE 36522433fc5SMasahiro Yamada $(call if_changed_dep,as_s_S) 36622433fc5SMasahiro Yamada 36722433fc5SMasahiro Yamadaquiet_cmd_as_o_S = AS $(quiet_modtag) $@ 36822433fc5SMasahiro Yamadacmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< 36922433fc5SMasahiro Yamada 37022433fc5SMasahiro Yamada$(obj)/%.o: $(src)/%.S FORCE 37122433fc5SMasahiro Yamada $(call if_changed_dep,as_o_S) 37222433fc5SMasahiro Yamada 37322433fc5SMasahiro Yamadatargets += $(real-objs-y) $(real-objs-m) $(lib-y) 37422433fc5SMasahiro Yamadatargets += $(extra-y) $(MAKECMDGOALS) $(always) 37522433fc5SMasahiro Yamada 37622433fc5SMasahiro Yamada# Linker scripts preprocessor (.lds.S -> .lds) 37722433fc5SMasahiro Yamada# --------------------------------------------------------------------------- 37822433fc5SMasahiro Yamadaquiet_cmd_cpp_lds_S = LDS $@ 37922433fc5SMasahiro Yamada cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -C -U$(ARCH) \ 38022433fc5SMasahiro Yamada -D__ASSEMBLY__ -DLINKER_SCRIPT -o $@ $< 38122433fc5SMasahiro Yamada 38222433fc5SMasahiro Yamada$(obj)/%.lds: $(src)/%.lds.S FORCE 38322433fc5SMasahiro Yamada $(call if_changed_dep,cpp_lds_S) 38422433fc5SMasahiro Yamada 38522433fc5SMasahiro Yamada# ASN.1 grammar 38622433fc5SMasahiro Yamada# --------------------------------------------------------------------------- 38722433fc5SMasahiro Yamadaquiet_cmd_asn1_compiler = ASN.1 $@ 38822433fc5SMasahiro Yamada cmd_asn1_compiler = $(objtree)/scripts/asn1_compiler $< \ 38922433fc5SMasahiro Yamada $(subst .h,.c,$@) $(subst .c,.h,$@) 39022433fc5SMasahiro Yamada 39122433fc5SMasahiro Yamada.PRECIOUS: $(objtree)/$(obj)/%-asn1.c $(objtree)/$(obj)/%-asn1.h 39222433fc5SMasahiro Yamada 39322433fc5SMasahiro Yamada$(obj)/%-asn1.c $(obj)/%-asn1.h: $(src)/%.asn1 $(objtree)/scripts/asn1_compiler 39422433fc5SMasahiro Yamada $(call cmd,asn1_compiler) 39522433fc5SMasahiro Yamada 39622433fc5SMasahiro Yamada# Build the compiled-in targets 39722433fc5SMasahiro Yamada# --------------------------------------------------------------------------- 39822433fc5SMasahiro Yamada 39922433fc5SMasahiro Yamada# To build objects in subdirs, we need to descend into the directories 40022433fc5SMasahiro Yamada$(sort $(subdir-obj-y)): $(subdir-ym) ; 40122433fc5SMasahiro Yamada 40222433fc5SMasahiro Yamada# 40322433fc5SMasahiro Yamada# Rule to compile a set of .o files into one .o file 40422433fc5SMasahiro Yamada# 40522433fc5SMasahiro Yamadaifdef builtin-target 40622433fc5SMasahiro Yamadaquiet_cmd_link_o_target = LD $@ 40722433fc5SMasahiro Yamada# If the list of objects to link is empty, just create an empty built-in.o 40822433fc5SMasahiro Yamadacmd_link_o_target = $(if $(strip $(obj-y)),\ 40922433fc5SMasahiro Yamada $(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^) \ 41022433fc5SMasahiro Yamada $(cmd_secanalysis),\ 41122433fc5SMasahiro Yamada rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@) 41222433fc5SMasahiro Yamada 41322433fc5SMasahiro Yamada$(builtin-target): $(obj-y) FORCE 41422433fc5SMasahiro Yamada $(call if_changed,link_o_target) 41522433fc5SMasahiro Yamada 41622433fc5SMasahiro Yamadatargets += $(builtin-target) 41722433fc5SMasahiro Yamadaendif # builtin-target 41822433fc5SMasahiro Yamada 41922433fc5SMasahiro Yamada# 42022433fc5SMasahiro Yamada# Rule to create modules.order file 42122433fc5SMasahiro Yamada# 42222433fc5SMasahiro Yamada# Create commands to either record .ko file or cat modules.order from 42322433fc5SMasahiro Yamada# a subdirectory 42422433fc5SMasahiro Yamadamodorder-cmds = \ 42522433fc5SMasahiro Yamada $(foreach m, $(modorder), \ 42622433fc5SMasahiro Yamada $(if $(filter %/modules.order, $m), \ 42722433fc5SMasahiro Yamada cat $m;, echo kernel/$m;)) 42822433fc5SMasahiro Yamada 42922433fc5SMasahiro Yamada$(modorder-target): $(subdir-ym) FORCE 43022433fc5SMasahiro Yamada $(Q)(cat /dev/null; $(modorder-cmds)) > $@ 43122433fc5SMasahiro Yamada 43222433fc5SMasahiro Yamada# 43322433fc5SMasahiro Yamada# Rule to compile a set of .o files into one .a file 43422433fc5SMasahiro Yamada# 43522433fc5SMasahiro Yamadaifdef lib-target 43622433fc5SMasahiro Yamadaquiet_cmd_link_l_target = AR $@ 43722433fc5SMasahiro Yamadacmd_link_l_target = rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@ $(lib-y) 43822433fc5SMasahiro Yamada 43922433fc5SMasahiro Yamada$(lib-target): $(lib-y) FORCE 44022433fc5SMasahiro Yamada $(call if_changed,link_l_target) 44122433fc5SMasahiro Yamada 44222433fc5SMasahiro Yamadatargets += $(lib-target) 44322433fc5SMasahiro Yamadaendif 44422433fc5SMasahiro Yamada 44522433fc5SMasahiro Yamada# 44622433fc5SMasahiro Yamada# Rule to link composite objects 44722433fc5SMasahiro Yamada# 44822433fc5SMasahiro Yamada# Composite objects are specified in kbuild makefile as follows: 44922433fc5SMasahiro Yamada# <composite-object>-objs := <list of .o files> 45022433fc5SMasahiro Yamada# or 45122433fc5SMasahiro Yamada# <composite-object>-y := <list of .o files> 45222433fc5SMasahiro Yamadalink_multi_deps = \ 45322433fc5SMasahiro Yamada$(filter $(addprefix $(obj)/, \ 45422433fc5SMasahiro Yamada$($(subst $(obj)/,,$(@:.o=-objs))) \ 45522433fc5SMasahiro Yamada$($(subst $(obj)/,,$(@:.o=-y)))), $^) 45622433fc5SMasahiro Yamada 45722433fc5SMasahiro Yamadaquiet_cmd_link_multi-y = LD $@ 45822433fc5SMasahiro Yamadacmd_link_multi-y = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps) $(cmd_secanalysis) 45922433fc5SMasahiro Yamada 46022433fc5SMasahiro Yamadaquiet_cmd_link_multi-m = LD [M] $@ 46122433fc5SMasahiro Yamadacmd_link_multi-m = $(cmd_link_multi-y) 46222433fc5SMasahiro Yamada 46322433fc5SMasahiro Yamada# We would rather have a list of rules like 46422433fc5SMasahiro Yamada# foo.o: $(foo-objs) 46522433fc5SMasahiro Yamada# but that's not so easy, so we rather make all composite objects depend 46622433fc5SMasahiro Yamada# on the set of all their parts 46722433fc5SMasahiro Yamada$(multi-used-y) : %.o: $(multi-objs-y) FORCE 46822433fc5SMasahiro Yamada $(call if_changed,link_multi-y) 46922433fc5SMasahiro Yamada 47022433fc5SMasahiro Yamada$(multi-used-m) : %.o: $(multi-objs-m) FORCE 47122433fc5SMasahiro Yamada $(call if_changed,link_multi-m) 47222433fc5SMasahiro Yamada @{ echo $(@:.o=.ko); echo $(link_multi_deps); } > $(MODVERDIR)/$(@F:.o=.mod) 47322433fc5SMasahiro Yamada 47422433fc5SMasahiro Yamadatargets += $(multi-used-y) $(multi-used-m) 47522433fc5SMasahiro Yamada 47622433fc5SMasahiro Yamada 47722433fc5SMasahiro Yamada# Descending 47822433fc5SMasahiro Yamada# --------------------------------------------------------------------------- 47922433fc5SMasahiro Yamada 48022433fc5SMasahiro YamadaPHONY += $(subdir-ym) 48122433fc5SMasahiro Yamada$(subdir-ym): 48222433fc5SMasahiro Yamada $(Q)$(MAKE) $(build)=$@ 48322433fc5SMasahiro Yamada 48422433fc5SMasahiro Yamada# Add FORCE to the prequisites of a target to force it to be always rebuilt. 48522433fc5SMasahiro Yamada# --------------------------------------------------------------------------- 48622433fc5SMasahiro Yamada 48722433fc5SMasahiro YamadaPHONY += FORCE 48822433fc5SMasahiro Yamada 48922433fc5SMasahiro YamadaFORCE: 49022433fc5SMasahiro Yamada 49122433fc5SMasahiro Yamada# Read all saved command lines and dependencies for the $(targets) we 49222433fc5SMasahiro Yamada# may be building above, using $(if_changed{,_dep}). As an 49322433fc5SMasahiro Yamada# optimization, we don't need to read them if the target does not 49422433fc5SMasahiro Yamada# exist, we will rebuild anyway in that case. 49522433fc5SMasahiro Yamada 49622433fc5SMasahiro Yamadatargets := $(wildcard $(sort $(targets))) 49722433fc5SMasahiro Yamadacmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd)) 49822433fc5SMasahiro Yamada 49922433fc5SMasahiro Yamadaifneq ($(cmd_files),) 50022433fc5SMasahiro Yamada include $(cmd_files) 50122433fc5SMasahiro Yamadaendif 50222433fc5SMasahiro Yamada 50322433fc5SMasahiro Yamada# Declare the contents of the .PHONY variable as phony. We keep that 50422433fc5SMasahiro Yamada# information in a variable se we can use it in if_changed and friends. 50522433fc5SMasahiro Yamada 50622433fc5SMasahiro Yamada.PHONY: $(PHONY) 507