Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 164af597 authored by Michael Ellerman's avatar Michael Ellerman
Browse files

powerpc/Makefile: Use cflags-y/aflags-y for setting endian options



When we introduced the little endian support, we added the endian flags
to CC directly using override. I don't know the history of why we did
that, I suspect no one does.

Although this mostly works, it has one bug, which is that CROSS32CC
doesn't get -mbig-endian. That means when the compiler is little endian
by default and the user is building big endian, vdso32 is incorrectly
compiled as little endian and the kernel fails to build.

Instead we can add the endian flags to cflags-y/aflags-y, and then
append those to KBUILD_CFLAGS/KBUILD_AFLAGS.

This has the advantage of being 1) less ugly, 2) the documented way of
adding flags in the arch Makefile and 3) it fixes building vdso32 with a
LE toolchain.

Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 97f6e0cc
Loading
Loading
Loading
Loading
+12 −10
Original line number Original line Diff line number Diff line
@@ -66,29 +66,28 @@ endif
UTS_MACHINE := $(OLDARCH)
UTS_MACHINE := $(OLDARCH)


ifeq ($(CONFIG_CPU_LITTLE_ENDIAN),y)
ifeq ($(CONFIG_CPU_LITTLE_ENDIAN),y)
override CC	+= -mlittle-endian
ifneq ($(cc-name),clang)
override CC	+= -mno-strict-align
endif
override AS	+= -mlittle-endian
override LD	+= -EL
override LD	+= -EL
override CROSS32CC += -mlittle-endian
override CROSS32AS += -mlittle-endian
override CROSS32AS += -mlittle-endian
LDEMULATION	:= lppc
LDEMULATION	:= lppc
GNUTARGET	:= powerpcle
GNUTARGET	:= powerpcle
MULTIPLEWORD	:= -mno-multiple
MULTIPLEWORD	:= -mno-multiple
KBUILD_CFLAGS_MODULE += $(call cc-option,-mno-save-toc-indirect)
KBUILD_CFLAGS_MODULE += $(call cc-option,-mno-save-toc-indirect)
else
else
ifeq ($(call cc-option-yn,-mbig-endian),y)
override CC	+= -mbig-endian
override AS	+= -mbig-endian
endif
override LD	+= -EB
override LD	+= -EB
LDEMULATION	:= ppc
LDEMULATION	:= ppc
GNUTARGET	:= powerpc
GNUTARGET	:= powerpc
MULTIPLEWORD	:= -mmultiple
MULTIPLEWORD	:= -mmultiple
endif
endif


cflags-$(CONFIG_CPU_BIG_ENDIAN)		+= $(call cc-option,-mbig-endian)
cflags-$(CONFIG_CPU_LITTLE_ENDIAN)	+= -mlittle-endian
ifneq ($(cc-name),clang)
  cflags-$(CONFIG_CPU_LITTLE_ENDIAN)	+= -mno-strict-align
endif

aflags-$(CONFIG_CPU_BIG_ENDIAN)		+= $(call cc-option,-mbig-endian)
aflags-$(CONFIG_CPU_LITTLE_ENDIAN)	+= -mlittle-endian

ifeq ($(HAS_BIARCH),y)
ifeq ($(HAS_BIARCH),y)
override AS	+= -a$(CONFIG_WORD_SIZE)
override AS	+= -a$(CONFIG_WORD_SIZE)
override LD	+= -m elf$(CONFIG_WORD_SIZE)$(LDEMULATION)
override LD	+= -m elf$(CONFIG_WORD_SIZE)$(LDEMULATION)
@@ -232,6 +231,9 @@ cpu-as-$(CONFIG_E200) += -Wa,-me200
KBUILD_AFLAGS += $(cpu-as-y)
KBUILD_AFLAGS += $(cpu-as-y)
KBUILD_CFLAGS += $(cpu-as-y)
KBUILD_CFLAGS += $(cpu-as-y)


KBUILD_AFLAGS += $(aflags-y)
KBUILD_CFLAGS += $(cflags-y)

head-y				:= arch/powerpc/kernel/head_$(CONFIG_WORD_SIZE).o
head-y				:= arch/powerpc/kernel/head_$(CONFIG_WORD_SIZE).o
head-$(CONFIG_8xx)		:= arch/powerpc/kernel/head_8xx.o
head-$(CONFIG_8xx)		:= arch/powerpc/kernel/head_8xx.o
head-$(CONFIG_40x)		:= arch/powerpc/kernel/head_40x.o
head-$(CONFIG_40x)		:= arch/powerpc/kernel/head_40x.o