linux-bk/scripts/Makefile.build
<<
>>
Prefs
   1# ==========================================================================
   2# Building
   3# ==========================================================================
   4
   5src := $(obj)
   6
   7.PHONY: __build
   8__build:
   9
  10# Read .config if it exist, otherwise ignore
  11-include .config
  12
  13include $(if $(wildcard $(obj)/Kbuild), $(obj)/Kbuild, $(obj)/Makefile)
  14
  15include scripts/Makefile.lib
  16
  17ifdef host-progs
  18ifneq ($(hostprogs-y),$(host-progs))
  19$(warning kbuild: $(obj)/Makefile - Usage of host-progs is deprecated. Please replace with hostprogs-y!)
  20hostprogs-y += $(host-progs)
  21endif
  22endif
  23
  24# Do not include host rules unles needed
  25ifneq ($(hostprogs-y)$(hostprogs-m),)
  26include scripts/Makefile.host
  27endif
  28
  29ifneq ($(KBUILD_SRC),)
  30# Create output directory if not already present
  31_dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj))
  32
  33# Create directories for object files if directory does not exist
  34# Needed when obj-y := dir/file.o syntax is used
  35_dummy := $(foreach d,$(obj-dirs), $(shell [ -d $(d) ] || mkdir -p $(d)))
  36endif
  37
  38
  39ifdef EXTRA_TARGETS
  40$(warning kbuild: $(obj)/Makefile - Usage of EXTRA_TARGETS is obsolete in 2.6. Please fix!)
  41endif
  42
  43ifdef build-targets
  44$(warning kbuild: $(obj)/Makefile - Usage of build-targets is obsolete in 2.6. Please fix!)
  45endif
  46
  47ifdef export-objs
  48$(warning kbuild: $(obj)/Makefile - Usage of export-objs is obsolete in 2.6. Please fix!)
  49endif
  50
  51ifdef O_TARGET
  52$(warning kbuild: $(obj)/Makefile - Usage of O_TARGET := $(O_TARGET) is obsolete in 2.6. Please fix!)
  53endif
  54
  55ifdef L_TARGET
  56$(error kbuild: $(obj)/Makefile - Use of L_TARGET is replaced by lib-y in 2.6. Please fix!)
  57endif
  58
  59ifdef list-multi
  60$(warning kbuild: $(obj)/Makefile - list-multi := $(list-multi) is obsolete in 2.6. Please fix!)
  61endif
  62
  63ifndef obj
  64$(warning kbuild: Makefile.build is included improperly)
  65endif
  66
  67# ===========================================================================
  68
  69ifneq ($(strip $(lib-y) $(lib-m) $(lib-n) $(lib-)),)
  70lib-target := $(obj)/lib.a
  71endif
  72
  73ifneq ($(strip $(obj-y) $(obj-m) $(obj-n) $(obj-) $(lib-target)),)
  74builtin-target := $(obj)/built-in.o
  75endif
  76
  77# We keep a list of all modules in $(MODVERDIR)
  78
  79__build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \
  80         $(if $(KBUILD_MODULES),$(obj-m)) \
  81         $(subdir-ym) $(always)
  82        @:
  83
  84# Linus' kernel sanity checking tool
  85ifneq ($(KBUILD_CHECKSRC),0)
  86  CHECKFLAGS += -I$(shell $(CC) -print-file-name=include)
  87  ifeq ($(KBUILD_CHECKSRC),2)
  88    quiet_cmd_force_checksrc = CHECK   $<
  89          cmd_force_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
  90  else
  91      quiet_cmd_checksrc     = CHECK   $<
  92            cmd_checksrc     = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
  93  endif
  94endif
  95
  96
  97# Compile C sources (.c)
  98# ---------------------------------------------------------------------------
  99
 100# Default is built-in, unless we know otherwise
 101modkern_cflags := $(CFLAGS_KERNEL)
 102quiet_modtag := $(empty)   $(empty)
 103
 104$(real-objs-m)        : modkern_cflags := $(CFLAGS_MODULE)
 105$(real-objs-m:.o=.i)  : modkern_cflags := $(CFLAGS_MODULE)
 106$(real-objs-m:.o=.s)  : modkern_cflags := $(CFLAGS_MODULE)
 107$(real-objs-m:.o=.lst): modkern_cflags := $(CFLAGS_MODULE)
 108
 109$(real-objs-m)        : quiet_modtag := [M]
 110$(real-objs-m:.o=.i)  : quiet_modtag := [M]
 111$(real-objs-m:.o=.s)  : quiet_modtag := [M]
 112$(real-objs-m:.o=.lst): quiet_modtag := [M]
 113
 114$(obj-m)              : quiet_modtag := [M]
 115
 116# Default for not multi-part modules
 117modname = $(*F)
 118
 119$(multi-objs-m)         : modname = $(modname-multi)
 120$(multi-objs-m:.o=.i)   : modname = $(modname-multi)
 121$(multi-objs-m:.o=.s)   : modname = $(modname-multi)
 122$(multi-objs-m:.o=.lst) : modname = $(modname-multi)
 123$(multi-objs-y)         : modname = $(modname-multi)
 124$(multi-objs-y:.o=.i)   : modname = $(modname-multi)
 125$(multi-objs-y:.o=.s)   : modname = $(modname-multi)
 126$(multi-objs-y:.o=.lst) : modname = $(modname-multi)
 127
 128quiet_cmd_cc_s_c = CC $(quiet_modtag)  $@
 129cmd_cc_s_c       = $(CC) $(c_flags) -S -o $@ $< 
 130
 131%.s: %.c FORCE
 132        $(call if_changed_dep,cc_s_c)
 133
 134quiet_cmd_cc_i_c = CPP $(quiet_modtag) $@
 135cmd_cc_i_c       = $(CPP) $(c_flags)   -o $@ $<
 136
 137%.i: %.c FORCE
 138        $(call if_changed_dep,cc_i_c)
 139
 140# C (.c) files
 141# The C file is compiled and updated dependency information is generated.
 142# (See cmd_cc_o_c + relevant part of rule_cc_o_c)
 143
 144quiet_cmd_cc_o_c = CC $(quiet_modtag)  $@
 145
 146ifndef CONFIG_MODVERSIONS
 147cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
 148
 149else
 150# When module versioning is enabled the following steps are executed:
 151# o compile a .tmp_<file>.o from <file>.c
 152# o if .tmp_<file>.o doesn't contain a __ksymtab version, i.e. does
 153#   not export symbols, we just rename .tmp_<file>.o to <file>.o and
 154#   are done.
 155# o otherwise, we calculate symbol versions using the good old
 156#   genksyms on the preprocessed source and postprocess them in a way
 157#   that they are usable as a linker script
 158# o generate <file>.o from .tmp_<file>.o using the linker to
 159#   replace the unresolved symbols __crc_exported_symbol with
 160#   the actual value of the checksum generated by genksyms
 161
 162cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $<
 163cmd_modversions =                                                       \
 164        if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then     \
 165                $(CPP) -D__GENKSYMS__ $(c_flags) $<                     \
 166                | $(GENKSYMS)                                           \
 167                > $(@D)/.tmp_$(@F:.o=.ver);                             \
 168                                                                        \
 169                $(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F)              \
 170                        -T $(@D)/.tmp_$(@F:.o=.ver);                    \
 171                rm -f $(@D)/.tmp_$(@F) $(@D)/.tmp_$(@F:.o=.ver);        \
 172        else                                                            \
 173                mv $(@D)/.tmp_$(@F) $@;                                 \
 174        fi;
 175endif
 176
 177define rule_cc_o_c
 178        $(if $($(quiet)cmd_checksrc),echo '  $($(quiet)cmd_checksrc)';)   \
 179        $(cmd_checksrc)                                                   \
 180        $(if $($(quiet)cmd_cc_o_c),echo '  $($(quiet)cmd_cc_o_c)';)       \
 181        $(cmd_cc_o_c);                                                    \
 182        $(cmd_modversions)                                                \
 183        scripts/basic/fixdep $(depfile) $@ '$(cmd_cc_o_c)' > $(@D)/.$(@F).tmp;  \
 184        rm -f $(depfile);                                                 \
 185        mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd
 186endef
 187
 188# Built-in and composite module parts
 189
 190%.o: %.c FORCE
 191        $(call cmd,force_checksrc)
 192        $(call if_changed_rule,cc_o_c)
 193
 194# Single-part modules are special since we need to mark them in $(MODVERDIR)
 195
 196$(single-used-m): %.o: %.c FORCE
 197        $(call cmd,force_checksrc)
 198        $(call if_changed_rule,cc_o_c)
 199        @{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod)
 200
 201quiet_cmd_cc_lst_c = MKLST   $@
 202      cmd_cc_lst_c = $(CC) $(c_flags) -g -c -o $*.o $< && \
 203                     $(CONFIG_SHELL) $(srctree)/scripts/makelst $*.o \
 204                                     System.map $(OBJDUMP) > $@
 205
 206%.lst: %.c FORCE
 207        $(call if_changed_dep,cc_lst_c)
 208
 209# Compile assembler sources (.S)
 210# ---------------------------------------------------------------------------
 211
 212modkern_aflags := $(AFLAGS_KERNEL)
 213
 214$(real-objs-m)      : modkern_aflags := $(AFLAGS_MODULE)
 215$(real-objs-m:.o=.s): modkern_aflags := $(AFLAGS_MODULE)
 216
 217quiet_cmd_as_s_S = CPP $(quiet_modtag) $@
 218cmd_as_s_S       = $(CPP) $(a_flags)   -o $@ $< 
 219
 220%.s: %.S FORCE
 221        $(call if_changed_dep,as_s_S)
 222
 223quiet_cmd_as_o_S = AS $(quiet_modtag)  $@
 224cmd_as_o_S       = $(CC) $(a_flags) -c -o $@ $<
 225
 226%.o: %.S FORCE
 227        $(call if_changed_dep,as_o_S)
 228
 229targets += $(real-objs-y) $(real-objs-m) $(lib-y)
 230targets += $(extra-y) $(MAKECMDGOALS) $(always)
 231
 232# Linker scripts preprocessor (.lds.S -> .lds)
 233# ---------------------------------------------------------------------------
 234quiet_cmd_cpp_lds_S = LDS     $@
 235      cmd_cpp_lds_S = $(CPP) $(cpp_flags) -D__ASSEMBLY__ -o $@ $<
 236
 237%.lds: %.lds.S FORCE
 238        $(call if_changed_dep,cpp_lds_S)
 239
 240# Build the compiled-in targets
 241# ---------------------------------------------------------------------------
 242
 243# To build objects in subdirs, we need to descend into the directories
 244$(sort $(subdir-obj-y)): $(subdir-ym) ;
 245
 246#
 247# Rule to compile a set of .o files into one .o file
 248#
 249ifdef builtin-target
 250quiet_cmd_link_o_target = LD      $@
 251# If the list of objects to link is empty, just create an empty built-in.o
 252cmd_link_o_target = $(if $(strip $(obj-y)),\
 253                      $(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^),\
 254                      rm -f $@; $(AR) rcs $@)
 255
 256$(builtin-target): $(obj-y) FORCE
 257        $(call if_changed,link_o_target)
 258
 259targets += $(builtin-target)
 260endif # builtin-target
 261
 262#
 263# Rule to compile a set of .o files into one .a file
 264#
 265ifdef lib-target
 266quiet_cmd_link_l_target = AR      $@
 267cmd_link_l_target = rm -f $@; $(AR) $(EXTRA_ARFLAGS) rcs $@ $(lib-y)
 268
 269$(lib-target): $(lib-y) FORCE
 270        $(call if_changed,link_l_target)
 271
 272targets += $(lib-target)
 273endif
 274
 275#
 276# Rule to link composite objects
 277#
 278#  Composite objects are specified in kbuild makefile as follows:
 279#    <composite-object>-objs := <list of .o files>
 280#  or
 281#    <composite-object>-y    := <list of .o files>
 282link_multi_deps =                     \
 283$(filter $(addprefix $(obj)/,         \
 284$($(subst $(obj)/,,$(@:.o=-objs)))    \
 285$($(subst $(obj)/,,$(@:.o=-y)))), $^)
 286 
 287quiet_cmd_link_multi-y = LD      $@
 288cmd_link_multi-y = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps)
 289
 290quiet_cmd_link_multi-m = LD [M]  $@
 291cmd_link_multi-m = $(LD) $(ld_flags) $(LDFLAGS_MODULE) -o $@ $(link_multi_deps)
 292
 293# We would rather have a list of rules like
 294#       foo.o: $(foo-objs)
 295# but that's not so easy, so we rather make all composite objects depend
 296# on the set of all their parts
 297$(multi-used-y) : %.o: $(multi-objs-y) FORCE
 298        $(call if_changed,link_multi-y)
 299
 300$(multi-used-m) : %.o: $(multi-objs-m) FORCE
 301        $(call if_changed,link_multi-m)
 302        @{ echo $(@:.o=.ko); echo $(link_multi_deps); } > $(MODVERDIR)/$(@F:.o=.mod)
 303
 304targets += $(multi-used-y) $(multi-used-m)
 305
 306
 307# Descending
 308# ---------------------------------------------------------------------------
 309
 310.PHONY: $(subdir-ym)
 311$(subdir-ym):
 312        $(Q)$(MAKE) $(build)=$@
 313
 314# Add FORCE to the prequisites of a target to force it to be always rebuilt.
 315# ---------------------------------------------------------------------------
 316
 317.PHONY: FORCE
 318
 319FORCE:
 320
 321# Read all saved command lines and dependencies for the $(targets) we
 322# may be building above, using $(if_changed{,_dep}). As an
 323# optimization, we don't need to read them if the target does not
 324# exist, we will rebuild anyway in that case.
 325
 326targets := $(wildcard $(sort $(targets)))
 327cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
 328
 329ifneq ($(cmd_files),)
 330  include $(cmd_files)
 331endif
 332
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.