49a5ba46c5
When building the kernel without passing the O= command line parameter there's no point to use absolute paths for them. Usually relative paths are preferred because they survive directory moves, work across networked file systems and chrooted environments. Absolute paths are still used if an output directory is given. Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
261 lines
8.2 KiB
Makefile
261 lines
8.2 KiB
Makefile
#
|
|
# arch/sh/Makefile
|
|
#
|
|
# Copyright (C) 1999 Kaz Kojima
|
|
# Copyright (C) 2002, 2003, 2004 Paul Mundt
|
|
# Copyright (C) 2002 M. R. Brown
|
|
#
|
|
# This file is subject to the terms and conditions of the GNU General Public
|
|
# License. See the file "COPYING" in the main directory of this archive
|
|
# for more details.
|
|
#
|
|
isa-y := any
|
|
isa-$(CONFIG_SH_DSP) := sh
|
|
isa-$(CONFIG_CPU_SH2) := sh2
|
|
isa-$(CONFIG_CPU_SH2A) := sh2a
|
|
isa-$(CONFIG_CPU_SH3) := sh3
|
|
isa-$(CONFIG_CPU_SH4) := sh4
|
|
isa-$(CONFIG_CPU_SH4A) := sh4a
|
|
isa-$(CONFIG_CPU_SH4AL_DSP) := sh4al
|
|
isa-$(CONFIG_CPU_SH5) := shmedia
|
|
isa-$(CONFIG_SH_DSP) := $(isa-y)-dsp
|
|
|
|
ifndef CONFIG_SH_DSP
|
|
ifndef CONFIG_SH_FPU
|
|
isa-y := $(isa-y)-nofpu
|
|
endif
|
|
endif
|
|
|
|
isa-y := $(isa-y)-up
|
|
|
|
cflags-$(CONFIG_CPU_SH2) := $(call cc-option,-m2,)
|
|
cflags-$(CONFIG_CPU_SH2A) += $(call cc-option,-m2a,) \
|
|
$(call cc-option,-m2a-nofpu,)
|
|
cflags-$(CONFIG_CPU_SH3) := $(call cc-option,-m3,)
|
|
cflags-$(CONFIG_CPU_SH4) := $(call cc-option,-m4,) \
|
|
$(call cc-option,-mno-implicit-fp,-m4-nofpu)
|
|
cflags-$(CONFIG_CPU_SH4A) += $(call cc-option,-m4a,) \
|
|
$(call cc-option,-m4a-nofpu,)
|
|
cflags-$(CONFIG_CPU_SH5) := $(call cc-option,-m5-32media-nofpu,)
|
|
|
|
cflags-$(CONFIG_CPU_BIG_ENDIAN) += -mb
|
|
cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -ml
|
|
|
|
#
|
|
# -Wa,-isa= tuning implies -Wa,-dsp for the versions of binutils that
|
|
# support it, while -Wa,-dsp by itself limits the range of usable opcodes
|
|
# on certain CPU subtypes. Try the ISA variant first, and if that fails,
|
|
# fall back on -Wa,-dsp for the old binutils versions. Even without DSP
|
|
# opcodes, we always want the best ISA tuning the version of binutils
|
|
# will provide.
|
|
#
|
|
isaflags-y := $(call as-option,-Wa$(comma)-isa=$(isa-y),)
|
|
|
|
isaflags-$(CONFIG_SH_DSP) := \
|
|
$(call as-option,-Wa$(comma)-isa=$(isa-y),-Wa$(comma)-dsp)
|
|
|
|
cflags-y += $(isaflags-y) -ffreestanding
|
|
|
|
cflags-$(CONFIG_MORE_COMPILE_OPTIONS) += \
|
|
$(shell echo $(CONFIG_COMPILE_OPTIONS) | sed -e 's/"//g')
|
|
|
|
OBJCOPYFLAGS := -O binary -R .note -R .note.gnu.build-id -R .comment \
|
|
-R .stab -R .stabstr -S
|
|
|
|
# Give the various platforms the opportunity to set default image types
|
|
defaultimage-$(CONFIG_SUPERH32) := zImage
|
|
|
|
# Set some sensible Kbuild defaults
|
|
KBUILD_DEFCONFIG := r7780mp_defconfig
|
|
KBUILD_IMAGE := $(defaultimage-y)
|
|
|
|
#
|
|
# Choosing incompatible machines durings configuration will result in
|
|
# error messages during linking.
|
|
#
|
|
ifdef CONFIG_SUPERH32
|
|
LDFLAGS_vmlinux += -e _stext
|
|
else
|
|
LDFLAGS_vmlinux += --defsym phys_stext=_stext-$(CONFIG_PAGE_OFFSET) \
|
|
--defsym phys_stext_shmedia=phys_stext+1 \
|
|
-e phys_stext_shmedia
|
|
endif
|
|
|
|
ifdef CONFIG_CPU_LITTLE_ENDIAN
|
|
LDFLAGS_vmlinux += --defsym 'jiffies=jiffies_64'
|
|
LDFLAGS += -EL
|
|
else
|
|
LDFLAGS_vmlinux += --defsym 'jiffies=jiffies_64+4'
|
|
LDFLAGS += -EB
|
|
endif
|
|
|
|
KBUILD_CFLAGS += -pipe $(cflags-y)
|
|
KBUILD_AFLAGS += $(cflags-y)
|
|
|
|
head-y := arch/sh/kernel/init_task.o
|
|
head-$(CONFIG_SUPERH32) += arch/sh/kernel/head_32.o
|
|
head-$(CONFIG_SUPERH64) += arch/sh/kernel/head_64.o
|
|
|
|
LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
|
|
|
|
core-y += arch/sh/kernel/ arch/sh/mm/
|
|
core-$(CONFIG_SH_FPU_EMU) += arch/sh/math-emu/
|
|
|
|
# Boards
|
|
machdir-$(CONFIG_SH_SOLUTION_ENGINE) += se/770x
|
|
machdir-$(CONFIG_SH_7722_SOLUTION_ENGINE) += se/7722
|
|
machdir-$(CONFIG_SH_7751_SOLUTION_ENGINE) += se/7751
|
|
machdir-$(CONFIG_SH_7780_SOLUTION_ENGINE) += se/7780
|
|
machdir-$(CONFIG_SH_7343_SOLUTION_ENGINE) += se/7343
|
|
machdir-$(CONFIG_SH_HP6XX) += hp6xx
|
|
machdir-$(CONFIG_SH_DREAMCAST) += dreamcast
|
|
machdir-$(CONFIG_SH_MPC1211) += mpc1211
|
|
machdir-$(CONFIG_SH_SH03) += sh03
|
|
machdir-$(CONFIG_SH_SECUREEDGE5410) += snapgear
|
|
machdir-$(CONFIG_SH_RTS7751R2D) += renesas/rts7751r2d
|
|
machdir-$(CONFIG_SH_7751_SYSTEMH) += renesas/systemh
|
|
machdir-$(CONFIG_SH_EDOSK7705) += renesas/edosk7705
|
|
machdir-$(CONFIG_SH_HIGHLANDER) += renesas/r7780rp
|
|
machdir-$(CONFIG_SH_MIGOR) += renesas/migor
|
|
machdir-$(CONFIG_SH_SDK7780) += renesas/sdk7780
|
|
machdir-$(CONFIG_SH_X3PROTO) += renesas/x3proto
|
|
machdir-$(CONFIG_SH_SH4202_MICRODEV) += superh/microdev
|
|
machdir-$(CONFIG_SH_LANDISK) += landisk
|
|
machdir-$(CONFIG_SH_TITAN) += titan
|
|
machdir-$(CONFIG_SH_SHMIN) += shmin
|
|
machdir-$(CONFIG_SH_7206_SOLUTION_ENGINE) += se/7206
|
|
machdir-$(CONFIG_SH_7619_SOLUTION_ENGINE) += se/7619
|
|
machdir-$(CONFIG_SH_LBOX_RE2) += lboxre2
|
|
machdir-$(CONFIG_SH_MAGIC_PANEL_R2) += magicpanelr2
|
|
machdir-$(CONFIG_SH_CAYMAN) += cayman
|
|
|
|
incdir-y := $(notdir $(machdir-y))
|
|
|
|
ifneq ($(machdir-y),)
|
|
core-y += $(addprefix arch/sh/boards/, \
|
|
$(filter-out ., $(patsubst %,%/,$(machdir-y))))
|
|
endif
|
|
|
|
# Companion chips
|
|
core-$(CONFIG_HD6446X_SERIES) += arch/sh/cchips/hd6446x/
|
|
|
|
cpuincdir-$(CONFIG_CPU_SH2) := cpu-sh2
|
|
cpuincdir-$(CONFIG_CPU_SH2A) := cpu-sh2a
|
|
cpuincdir-$(CONFIG_CPU_SH3) := cpu-sh3
|
|
cpuincdir-$(CONFIG_CPU_SH4) := cpu-sh4
|
|
cpuincdir-$(CONFIG_CPU_SH5) := cpu-sh5
|
|
|
|
libs-$(CONFIG_SUPERH32) := arch/sh/lib/ $(libs-y)
|
|
libs-$(CONFIG_SUPERH64) := arch/sh/lib64/ $(libs-y)
|
|
libs-y += $(LIBGCC)
|
|
|
|
drivers-y += arch/sh/drivers/
|
|
drivers-$(CONFIG_OPROFILE) += arch/sh/oprofile/
|
|
|
|
boot := arch/sh/boot
|
|
|
|
ifneq ($(KBUILD_SRC),)
|
|
incdir-prefix := $(srctree)/include/asm-sh/
|
|
else
|
|
incdir-prefix :=
|
|
endif
|
|
|
|
# Update machine arch and proc symlinks if something which affects
|
|
# them changed. We use .arch and .mach to indicate when they were
|
|
# updated last, otherwise make uses the target directory mtime.
|
|
|
|
include/asm-sh/.cpu: $(wildcard include/config/cpu/*.h) \
|
|
include/config/auto.conf FORCE
|
|
@echo ' SYMLINK include/asm-sh/cpu -> include/asm-sh/$(cpuincdir-y)'
|
|
$(Q)if [ ! -d include/asm-sh ]; then mkdir -p include/asm-sh; fi
|
|
$(Q)ln -fsn $(incdir-prefix)$(cpuincdir-y) include/asm-sh/cpu
|
|
@touch $@
|
|
|
|
# Most boards have their own mach directories. For the ones that
|
|
# don't, just reference the parent directory so the semantics are
|
|
# kept roughly the same.
|
|
#
|
|
# When multiple boards are compiled in at the same time, preference
|
|
# for the mach link is given to whichever has a directory for its
|
|
# headers. However, this is only a workaround until platforms that
|
|
# can live in the same kernel image back away from relying on the
|
|
# mach link.
|
|
|
|
include/asm-sh/.mach: $(wildcard include/config/sh/*.h) \
|
|
include/config/auto.conf FORCE
|
|
$(Q)if [ ! -d include/asm-sh ]; then mkdir -p include/asm-sh; fi
|
|
$(Q)rm -f include/asm-sh/mach
|
|
$(Q)for i in $(incdir-y); do \
|
|
if [ -d $(srctree)/include/asm-sh/$$i ]; then \
|
|
echo -n ' SYMLINK include/asm-sh/mach -> '; \
|
|
echo -e "include/asm-sh/$$i"; \
|
|
ln -fsn $(incdir-prefix)$$i \
|
|
include/asm-sh/mach; \
|
|
else \
|
|
if [ ! -d include/asm-sh/mach ]; then \
|
|
echo -n ' SYMLINK include/asm-sh/mach -> '; \
|
|
echo -e 'include/asm-sh'; \
|
|
ln -fsn $(incdir-prefix)../asm-sh include/asm-sh/mach; \
|
|
fi; \
|
|
fi; \
|
|
done
|
|
@touch $@
|
|
|
|
PHONY += maketools FORCE
|
|
|
|
maketools: include/linux/version.h FORCE
|
|
$(Q)$(MAKE) $(build)=arch/sh/tools include/asm-sh/machtypes.h
|
|
|
|
all: $(KBUILD_IMAGE)
|
|
|
|
zImage uImage uImage.srec vmlinux.srec: vmlinux
|
|
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
|
|
|
compressed: zImage
|
|
|
|
archprepare: include/asm-sh/.cpu include/asm-sh/.mach maketools \
|
|
arch/sh/lib64/syscalltab.h
|
|
|
|
archclean:
|
|
$(Q)$(MAKE) $(clean)=$(boot)
|
|
|
|
define archhelp
|
|
@echo '* zImage - Compressed kernel image'
|
|
@echo ' vmlinux.srec - Create an ELF S-record'
|
|
@echo ' uImage - Create a bootable image for U-Boot'
|
|
@echo ' uImage.srec - Create an S-record for U-Boot'
|
|
endef
|
|
|
|
define filechk_gen-syscalltab
|
|
(set -e; \
|
|
echo "/*"; \
|
|
echo " * DO NOT MODIFY."; \
|
|
echo " *"; \
|
|
echo " * This file was generated by arch/sh/Makefile"; \
|
|
echo " * Any changes will be reverted at build time."; \
|
|
echo " */"; \
|
|
echo ""; \
|
|
echo "#ifndef __SYSCALLTAB_H"; \
|
|
echo "#define __SYSCALLTAB_H"; \
|
|
echo ""; \
|
|
echo "#include <linux/kernel.h>"; \
|
|
echo ""; \
|
|
echo "struct syscall_info {"; \
|
|
echo " const char *name;"; \
|
|
echo "} syscall_info_table[] = {"; \
|
|
sed -e '/^.*\.long /!d;s// { "/;s/\(\([^/]*\)\/\)\{1\}.*/\2/; \
|
|
s/[ \t]*$$//g;s/$$/" },/;s/\("\)sys_/\1/g'; \
|
|
echo "};"; \
|
|
echo ""; \
|
|
echo "#define NUM_SYSCALL_INFO_ENTRIES ARRAY_SIZE(syscall_info_table)";\
|
|
echo ""; \
|
|
echo "#endif /* __SYSCALLTAB_H */" )
|
|
endef
|
|
|
|
arch/sh/lib64/syscalltab.h: arch/sh/kernel/syscalls_64.S
|
|
$(call filechk,gen-syscalltab)
|
|
|
|
CLEAN_FILES += arch/sh/lib64/syscalltab.h \
|
|
include/asm-sh/machtypes.h \
|
|
include/asm-sh/cpu include/asm-sh/.cpu \
|
|
include/asm-sh/mach include/asm-sh/.mach
|