Skip to content

Commit

Permalink
kbuild: introduce ccflags-y, asflags-y and ldflags-y
Browse files Browse the repository at this point in the history
Introduce ccflags-y, asflags-y and ldflags-y so we soon can
deprecate use of EXTRA_CFLAGS, EXTRA_AFLAGS and EXTRA_LDFLAGS.
This patch does not touch any in-tree users - thats next round.
Lets get this committed first and then fix the users of the
soon to be deprecated variants next.

The rationale behind this change is to introduce support for
makefile fragments like:

ccflags-$(CONFIG_WHATEVER_DEBUG) := -DDEBUG

As a replacement for the uglier:
ifeq ($(CONFIG_WHATEVER_DEBUG),y)
        EXTRA_CFLAGS := -DDEBUG
endif

Signed-off-by: Sam Ravnborg <[email protected]>
  • Loading branch information
Sam Ravnborg committed Oct 15, 2007
1 parent 06c5040 commit f77bf01
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 26 deletions.
37 changes: 18 additions & 19 deletions Documentation/kbuild/makefiles.txt
Original file line number Diff line number Diff line change
Expand Up @@ -276,40 +276,39 @@ more details, with real examples.

--- 3.7 Compilation flags

EXTRA_CFLAGS, EXTRA_AFLAGS, EXTRA_LDFLAGS
ccflags-y, asflags-y and ldflags-y
The three flags listed above applies only to the kbuild makefile
where they are assigned. They are used for all the normal
cc, as and ld invocation happenign during a recursive build.
Note: Flags with the same behaviour were previously named:
EXTRA_CFLAGS, EXTRA_AFLAGS and EXTRA_LDFLAGS.
They are yet supported but their use are deprecated.

All the EXTRA_ variables apply only to the kbuild makefile
where they are assigned. The EXTRA_ variables apply to all
commands executed in the kbuild makefile.

$(EXTRA_CFLAGS) specifies options for compiling C files with
$(CC).
ccflags-y specifies options for compiling C files with $(CC).

Example:
# drivers/sound/emu10k1/Makefile
EXTRA_CFLAGS += -I$(obj)
ifdef DEBUG
EXTRA_CFLAGS += -DEMU10K1_DEBUG
endif
ccflags-y += -I$(obj)
ccflags-$(DEBUG) += -DEMU10K1_DEBUG


This variable is necessary because the top Makefile owns the
variable $(KBUILD_CFLAGS) and uses it for compilation flags for the
entire tree.

$(EXTRA_AFLAGS) is a similar string for per-directory options
asflags-y is a similar string for per-directory options
when compiling assembly language source.

Example:
#arch/x86_64/kernel/Makefile
EXTRA_AFLAGS := -traditional
asflags-y := -traditional


$(EXTRA_LDFLAGS) is a string for per-directory options to $(LD).
ldflags-y is a string for per-directory options to $(LD).

Example:
#arch/m68k/fpsp040/Makefile
EXTRA_LDFLAGS := -x
ldflags-y := -x

CFLAGS_$@, AFLAGS_$@

Expand Down Expand Up @@ -495,9 +494,9 @@ more details, with real examples.

Example:
#fs/reiserfs/Makefile
EXTRA_CFLAGS := $(call cc-ifversion, -lt, 0402, -O1)
ccflags-y := $(call cc-ifversion, -lt, 0402, -O1)

In this example, EXTRA_CFLAGS will be assigned the value -O1 if the
In this example, ccflags-y will be assigned the value -O1 if the
$(CC) version is less than 4.2.
cc-ifversion takes all the shell operators:
-eq, -ne, -lt, -le, -gt, and -ge
Expand Down Expand Up @@ -783,7 +782,7 @@ When kbuild executes, the following steps are followed (roughly):
Example:
#arch/s390/Makefile
LDFLAGS := -m elf_s390
Note: EXTRA_LDFLAGS can be used to further customise
Note: ldflags-y can be used to further customise
the flags used. See chapter 3.7.

LDFLAGS_MODULE Options for $(LD) when linking modules
Expand Down Expand Up @@ -1100,7 +1099,7 @@ When kbuild executes, the following steps are followed (roughly):

When building the *.lds target, kbuild uses the variables:
KBUILD_CPPFLAGS : Set in top-level Makefile
EXTRA_CPPFLAGS : May be set in the kbuild makefile
cppflags-y : May be set in the kbuild makefile
CPPFLAGS_$(@F) : Target specific flags.
Note that the full filename is used in this
assignment.
Expand Down
4 changes: 4 additions & 0 deletions scripts/Makefile.build
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ EXTRA_AFLAGS :=
EXTRA_CFLAGS :=
EXTRA_CPPFLAGS :=
EXTRA_LDFLAGS :=
asflags-y :=
ccflags-y :=
cppflags-y :=
ldflags-y :=

# Read .config if it exist, otherwise ignore
-include include/config/auto.conf
Expand Down
16 changes: 11 additions & 5 deletions scripts/Makefile.lib
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
# Backward compatibility
asflags-y += $(EXTRA_AFLAGS)
ccflags-y += $(EXTRA_CFLAGS)
cppflags-y += $(EXTRA_CPPFLAGS)
ldflags-y += $(EXTRA_LDFLAGS)

# Figure out what we need to build from the various variables
# ===========================================================================

Expand Down Expand Up @@ -84,9 +90,9 @@ basename_flags = -D"KBUILD_BASENAME=KBUILD_STR($(call name-fix,$(basetarget)))"
modname_flags = $(if $(filter 1,$(words $(modname))),\
-D"KBUILD_MODNAME=KBUILD_STR($(call name-fix,$(modname)))")

_c_flags = $(KBUILD_CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$(basetarget).o)
_a_flags = $(KBUILD_AFLAGS) $(EXTRA_AFLAGS) $(AFLAGS_$(basetarget).o)
_cpp_flags = $(KBUILD_CPPFLAGS) $(EXTRA_CPPFLAGS) $(CPPFLAGS_$(@F))
_c_flags = $(KBUILD_CFLAGS) $(ccflags-y) $(CFLAGS_$(basetarget).o)
_a_flags = $(KBUILD_AFLAGS) $(asflags-y) $(AFLAGS_$(basetarget).o)
_cpp_flags = $(KBUILD_CPPFLAGS) $(cppflags-y) $(CPPFLAGS_$(@F))

# If building the kernel in a separate objtree expand all occurrences
# of -Idir to -I$(srctree)/dir except for absolute paths (starting with '/').
Expand Down Expand Up @@ -115,7 +121,7 @@ a_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(KBUILD_CPPFLAGS) \

cpp_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(__cpp_flags)

ld_flags = $(LDFLAGS) $(EXTRA_LDFLAGS)
ld_flags = $(LDFLAGS) $(ldflags-y)

# Finds the multi-part object the current object will be linked into
modname-multi = $(sort $(foreach m,$(multi-used),\
Expand Down Expand Up @@ -145,7 +151,7 @@ $(obj)/%:: $(src)/%_shipped
# ---------------------------------------------------------------------------

quiet_cmd_ld = LD $@
cmd_ld = $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LDFLAGS_$(@F)) \
cmd_ld = $(LD) $(LDFLAGS) $(ldflags-y) $(LDFLAGS_$(@F)) \
$(filter-out FORCE,$^) -o $@

# Objcopy
Expand Down
4 changes: 2 additions & 2 deletions scripts/makelst
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
# with correct relocations from System.map
# Requires the following lines in makefile:
#%.lst: %.c
# $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@) -g -c -o $*.o $<
# $(srctree)/scripts/makelst $*.o $(objtree)/System.map $(OBJDUMP)
# $(CC) $(c_flags) -g -c -o $*.o $< &&
# $(srctree)/scripts/makelst $*.o System.map $(OBJDUMP) > $@
#
# Copyright (C) 2000 IBM Corporation
# Author(s): DJ Barrow ([email protected],[email protected])
Expand Down

0 comments on commit f77bf01

Please sign in to comment.