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