whiterose

linux unikernel
Log | Files | Refs | README | LICENSE | git clone https://git.ne02ptzero.me/git/whiterose

Makefile (13393B)


      1 #
      2 # arch/arm/Makefile
      3 #
      4 # This file is included by the global makefile so that you can add your own
      5 # architecture-specific flags and dependencies.
      6 #
      7 # This file is subject to the terms and conditions of the GNU General Public
      8 # License.  See the file "COPYING" in the main directory of this archive
      9 # for more details.
     10 #
     11 # Copyright (C) 1995-2001 by Russell King
     12 
     13 LDFLAGS_vmlinux	:= --no-undefined -X --pic-veneer
     14 ifeq ($(CONFIG_CPU_ENDIAN_BE8),y)
     15 LDFLAGS_vmlinux	+= --be8
     16 KBUILD_LDFLAGS_MODULE	+= --be8
     17 endif
     18 
     19 ifeq ($(CONFIG_ARM_MODULE_PLTS),y)
     20 KBUILD_LDFLAGS_MODULE	+= -T $(srctree)/arch/arm/kernel/module.lds
     21 endif
     22 
     23 GZFLAGS		:=-9
     24 #KBUILD_CFLAGS	+=-pipe
     25 
     26 # Never generate .eh_frame
     27 KBUILD_CFLAGS	+= $(call cc-option,-fno-dwarf2-cfi-asm)
     28 
     29 # This should work on most of the modern platforms
     30 KBUILD_DEFCONFIG := multi_v7_defconfig
     31 
     32 # defines filename extension depending memory management type.
     33 ifeq ($(CONFIG_MMU),)
     34 MMUEXT		:= -nommu
     35 KBUILD_CFLAGS	+= $(call cc-option,-mno-unaligned-access)
     36 endif
     37 
     38 ifeq ($(CONFIG_FRAME_POINTER),y)
     39 KBUILD_CFLAGS	+=-fno-omit-frame-pointer -mapcs -mno-sched-prolog
     40 endif
     41 
     42 ifeq ($(CONFIG_CPU_BIG_ENDIAN),y)
     43 KBUILD_CPPFLAGS	+= -mbig-endian
     44 CHECKFLAGS	+= -D__ARMEB__
     45 AS		+= -EB
     46 KBUILD_LDFLAGS	+= -EB
     47 else
     48 KBUILD_CPPFLAGS	+= -mlittle-endian
     49 CHECKFLAGS	+= -D__ARMEL__
     50 AS		+= -EL
     51 KBUILD_LDFLAGS	+= -EL
     52 endif
     53 
     54 #
     55 # The Scalar Replacement of Aggregates (SRA) optimization pass in GCC 4.9 and
     56 # later may result in code being generated that handles signed short and signed
     57 # char struct members incorrectly. So disable it.
     58 # (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65932)
     59 #
     60 KBUILD_CFLAGS	+= $(call cc-option,-fno-ipa-sra)
     61 
     62 # This selects which instruction set is used.
     63 # Note that GCC does not numerically define an architecture version
     64 # macro, but instead defines a whole series of macros which makes
     65 # testing for a specific architecture or later rather impossible.
     66 arch-$(CONFIG_CPU_32v7M)	=-D__LINUX_ARM_ARCH__=7 -march=armv7-m -Wa,-march=armv7-m
     67 arch-$(CONFIG_CPU_32v7)		=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
     68 arch-$(CONFIG_CPU_32v6)		=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
     69 # Only override the compiler option if ARMv6. The ARMv6K extensions are
     70 # always available in ARMv7
     71 ifeq ($(CONFIG_CPU_32v6),y)
     72 arch-$(CONFIG_CPU_32v6K)	=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6k,-march=armv5t -Wa$(comma)-march=armv6k)
     73 endif
     74 arch-$(CONFIG_CPU_32v5)		=-D__LINUX_ARM_ARCH__=5 $(call cc-option,-march=armv5te,-march=armv4t)
     75 arch-$(CONFIG_CPU_32v4T)	=-D__LINUX_ARM_ARCH__=4 -march=armv4t
     76 arch-$(CONFIG_CPU_32v4)		=-D__LINUX_ARM_ARCH__=4 -march=armv4
     77 arch-$(CONFIG_CPU_32v3)		=-D__LINUX_ARM_ARCH__=3 -march=armv3m
     78 
     79 # Evaluate arch cc-option calls now
     80 arch-y := $(arch-y)
     81 
     82 # This selects how we optimise for the processor.
     83 tune-$(CONFIG_CPU_ARM7TDMI)	=-mtune=arm7tdmi
     84 tune-$(CONFIG_CPU_ARM720T)	=-mtune=arm7tdmi
     85 tune-$(CONFIG_CPU_ARM740T)	=-mtune=arm7tdmi
     86 tune-$(CONFIG_CPU_ARM9TDMI)	=-mtune=arm9tdmi
     87 tune-$(CONFIG_CPU_ARM940T)	=-mtune=arm9tdmi
     88 tune-$(CONFIG_CPU_ARM946E)	=$(call cc-option,-mtune=arm9e,-mtune=arm9tdmi)
     89 tune-$(CONFIG_CPU_ARM920T)	=-mtune=arm9tdmi
     90 tune-$(CONFIG_CPU_ARM922T)	=-mtune=arm9tdmi
     91 tune-$(CONFIG_CPU_ARM925T)	=-mtune=arm9tdmi
     92 tune-$(CONFIG_CPU_ARM926T)	=-mtune=arm9tdmi
     93 tune-$(CONFIG_CPU_FA526)	=-mtune=arm9tdmi
     94 tune-$(CONFIG_CPU_SA110)	=-mtune=strongarm110
     95 tune-$(CONFIG_CPU_SA1100)	=-mtune=strongarm1100
     96 tune-$(CONFIG_CPU_XSCALE)	=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale
     97 tune-$(CONFIG_CPU_XSC3)		=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale
     98 tune-$(CONFIG_CPU_FEROCEON)	=$(call cc-option,-mtune=marvell-f,-mtune=xscale)
     99 tune-$(CONFIG_CPU_V6)		=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
    100 tune-$(CONFIG_CPU_V6K)		=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
    101 
    102 # Evaluate tune cc-option calls now
    103 tune-y := $(tune-y)
    104 
    105 ifeq ($(CONFIG_AEABI),y)
    106 CFLAGS_ABI	:=-mabi=aapcs-linux -mfpu=vfp
    107 else
    108 CFLAGS_ABI	:=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) $(call cc-option,-mno-thumb-interwork,)
    109 endif
    110 
    111 ifeq ($(CONFIG_ARM_UNWIND),y)
    112 CFLAGS_ABI	+=-funwind-tables
    113 endif
    114 
    115 # Accept old syntax despite ".syntax unified"
    116 AFLAGS_NOWARN	:=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W)
    117 
    118 ifeq ($(CONFIG_THUMB2_KERNEL),y)
    119 AFLAGS_AUTOIT	:=$(call as-option,-Wa$(comma)-mimplicit-it=always,-Wa$(comma)-mauto-it)
    120 CFLAGS_ISA	:=-mthumb $(AFLAGS_AUTOIT) $(AFLAGS_NOWARN)
    121 AFLAGS_ISA	:=$(CFLAGS_ISA) -Wa$(comma)-mthumb
    122 # Work around buggy relocation from gas if requested:
    123 ifeq ($(CONFIG_THUMB2_AVOID_R_ARM_THM_JUMP11),y)
    124 KBUILD_CFLAGS_MODULE	+=-fno-optimize-sibling-calls
    125 endif
    126 else
    127 CFLAGS_ISA	:=$(call cc-option,-marm,) $(AFLAGS_NOWARN)
    128 AFLAGS_ISA	:=$(CFLAGS_ISA)
    129 endif
    130 
    131 # Need -Uarm for gcc < 3.x
    132 KBUILD_CFLAGS	+=$(CFLAGS_ABI) $(CFLAGS_ISA) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm
    133 KBUILD_AFLAGS	+=$(CFLAGS_ABI) $(AFLAGS_ISA) $(arch-y) $(tune-y) -include asm/unified.h -msoft-float
    134 
    135 CHECKFLAGS	+= -D__arm__
    136 
    137 #Default value
    138 head-y		:= arch/arm/kernel/head$(MMUEXT).o
    139 
    140 # Text offset. This list is sorted numerically by address in order to
    141 # provide a means to avoid/resolve conflicts in multi-arch kernels.
    142 textofs-y	:= 0x00008000
    143 # We don't want the htc bootloader to corrupt kernel during resume
    144 textofs-$(CONFIG_PM_H1940)      := 0x00108000
    145 # SA1111 DMA bug: we don't want the kernel to live in precious DMA-able memory
    146 ifeq ($(CONFIG_ARCH_SA1100),y)
    147 textofs-$(CONFIG_SA1111) := 0x00208000
    148 endif
    149 textofs-$(CONFIG_ARCH_MSM8X60) := 0x00208000
    150 textofs-$(CONFIG_ARCH_MSM8960) := 0x00208000
    151 textofs-$(CONFIG_ARCH_MESON) := 0x00208000
    152 textofs-$(CONFIG_ARCH_AXXIA) := 0x00308000
    153 
    154 # Machine directory name.  This list is sorted alphanumerically
    155 # by CONFIG_* macro name.
    156 machine-$(CONFIG_ARCH_ACTIONS)		+= actions
    157 machine-$(CONFIG_ARCH_ALPINE)		+= alpine
    158 machine-$(CONFIG_ARCH_ARTPEC)		+= artpec
    159 machine-$(CONFIG_ARCH_AT91)		+= at91
    160 machine-$(CONFIG_ARCH_AXXIA)		+= axxia
    161 machine-$(CONFIG_ARCH_BCM)		+= bcm
    162 machine-$(CONFIG_ARCH_BERLIN)		+= berlin
    163 machine-$(CONFIG_ARCH_CLPS711X)		+= clps711x
    164 machine-$(CONFIG_ARCH_CNS3XXX)		+= cns3xxx
    165 machine-$(CONFIG_ARCH_DAVINCI)		+= davinci
    166 machine-$(CONFIG_ARCH_DIGICOLOR)	+= digicolor
    167 machine-$(CONFIG_ARCH_DOVE)		+= dove
    168 machine-$(CONFIG_ARCH_EBSA110)		+= ebsa110
    169 machine-$(CONFIG_ARCH_EFM32)		+= efm32
    170 machine-$(CONFIG_ARCH_EP93XX)		+= ep93xx
    171 machine-$(CONFIG_ARCH_EXYNOS)		+= exynos
    172 machine-$(CONFIG_ARCH_FOOTBRIDGE)	+= footbridge
    173 machine-$(CONFIG_ARCH_GEMINI)		+= gemini
    174 machine-$(CONFIG_ARCH_HIGHBANK)		+= highbank
    175 machine-$(CONFIG_ARCH_HISI)		+= hisi
    176 machine-$(CONFIG_ARCH_INTEGRATOR)	+= integrator
    177 machine-$(CONFIG_ARCH_IOP13XX)		+= iop13xx
    178 machine-$(CONFIG_ARCH_IOP32X)		+= iop32x
    179 machine-$(CONFIG_ARCH_IOP33X)		+= iop33x
    180 machine-$(CONFIG_ARCH_IXP4XX)		+= ixp4xx
    181 machine-$(CONFIG_ARCH_KEYSTONE)		+= keystone
    182 machine-$(CONFIG_ARCH_KS8695)		+= ks8695
    183 machine-$(CONFIG_ARCH_LPC18XX)		+= lpc18xx
    184 machine-$(CONFIG_ARCH_LPC32XX)		+= lpc32xx
    185 machine-$(CONFIG_ARCH_MESON)		+= meson
    186 machine-$(CONFIG_ARCH_MMP)		+= mmp
    187 machine-$(CONFIG_ARCH_MPS2)		+= vexpress
    188 machine-$(CONFIG_ARCH_MOXART)		+= moxart
    189 machine-$(CONFIG_ARCH_MV78XX0)		+= mv78xx0
    190 machine-$(CONFIG_ARCH_MVEBU)		+= mvebu
    191 machine-$(CONFIG_ARCH_MXC)		+= imx
    192 machine-$(CONFIG_ARCH_MEDIATEK)		+= mediatek
    193 machine-$(CONFIG_ARCH_MILBEAUT)		+= milbeaut
    194 machine-$(CONFIG_ARCH_MXS)		+= mxs
    195 machine-$(CONFIG_ARCH_NETX)		+= netx
    196 machine-$(CONFIG_ARCH_NOMADIK)		+= nomadik
    197 machine-$(CONFIG_ARCH_NPCM)		+= npcm
    198 machine-$(CONFIG_ARCH_NSPIRE)		+= nspire
    199 machine-$(CONFIG_ARCH_OXNAS)		+= oxnas
    200 machine-$(CONFIG_ARCH_OMAP1)		+= omap1
    201 machine-$(CONFIG_ARCH_OMAP2PLUS)	+= omap2
    202 machine-$(CONFIG_ARCH_ORION5X)		+= orion5x
    203 machine-$(CONFIG_ARCH_PICOXCELL)	+= picoxcell
    204 machine-$(CONFIG_ARCH_PXA)		+= pxa
    205 machine-$(CONFIG_ARCH_QCOM)		+= qcom
    206 machine-$(CONFIG_ARCH_RDA)		+= rda
    207 machine-$(CONFIG_ARCH_REALVIEW)		+= realview
    208 machine-$(CONFIG_ARCH_ROCKCHIP)		+= rockchip
    209 machine-$(CONFIG_ARCH_RPC)		+= rpc
    210 machine-$(CONFIG_ARCH_S3C24XX)		+= s3c24xx
    211 machine-$(CONFIG_ARCH_S3C64XX)		+= s3c64xx
    212 machine-$(CONFIG_ARCH_S5PV210)		+= s5pv210
    213 machine-$(CONFIG_ARCH_SA1100)		+= sa1100
    214 machine-$(CONFIG_ARCH_RENESAS)	 	+= shmobile
    215 machine-$(CONFIG_ARCH_SIRF)		+= prima2
    216 machine-$(CONFIG_ARCH_SOCFPGA)		+= socfpga
    217 machine-$(CONFIG_ARCH_STI)		+= sti
    218 machine-$(CONFIG_ARCH_STM32)		+= stm32
    219 machine-$(CONFIG_ARCH_SUNXI)		+= sunxi
    220 machine-$(CONFIG_ARCH_TANGO)		+= tango
    221 machine-$(CONFIG_ARCH_TEGRA)		+= tegra
    222 machine-$(CONFIG_ARCH_U300)		+= u300
    223 machine-$(CONFIG_ARCH_U8500)		+= ux500
    224 machine-$(CONFIG_ARCH_VERSATILE)	+= versatile
    225 machine-$(CONFIG_ARCH_VEXPRESS)		+= vexpress
    226 machine-$(CONFIG_ARCH_VT8500)		+= vt8500
    227 machine-$(CONFIG_ARCH_W90X900)		+= w90x900
    228 machine-$(CONFIG_ARCH_ZX)		+= zx
    229 machine-$(CONFIG_ARCH_ZYNQ)		+= zynq
    230 machine-$(CONFIG_PLAT_SPEAR)		+= spear
    231 
    232 # Platform directory name.  This list is sorted alphanumerically
    233 # by CONFIG_* macro name.
    234 plat-$(CONFIG_ARCH_EXYNOS)	+= samsung
    235 plat-$(CONFIG_ARCH_OMAP)	+= omap
    236 plat-$(CONFIG_ARCH_S3C64XX)	+= samsung
    237 plat-$(CONFIG_ARCH_S5PV210)	+= samsung
    238 plat-$(CONFIG_PLAT_IOP)		+= iop
    239 plat-$(CONFIG_PLAT_ORION)	+= orion
    240 plat-$(CONFIG_PLAT_PXA)		+= pxa
    241 plat-$(CONFIG_PLAT_S3C24XX)	+= samsung
    242 plat-$(CONFIG_PLAT_VERSATILE)	+= versatile
    243 
    244 ifeq ($(CONFIG_ARCH_EBSA110),y)
    245 # This is what happens if you forget the IOCS16 line.
    246 # PCMCIA cards stop working.
    247 CFLAGS_3c589_cs.o :=-DISA_SIXTEEN_BIT_PERIPHERAL
    248 export CFLAGS_3c589_cs.o
    249 endif
    250 
    251 # The byte offset of the kernel image in RAM from the start of RAM.
    252 TEXT_OFFSET := $(textofs-y)
    253 
    254 # The first directory contains additional information for the boot setup code
    255 ifneq ($(machine-y),)
    256 MACHINE  := arch/arm/mach-$(word 1,$(machine-y))/
    257 else
    258 MACHINE  :=
    259 endif
    260 ifeq ($(CONFIG_ARCH_MULTIPLATFORM),y)
    261 MACHINE  :=
    262 endif
    263 
    264 machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y))
    265 platdirs := $(patsubst %,arch/arm/plat-%/,$(sort $(plat-y)))
    266 
    267 ifneq ($(CONFIG_ARCH_MULTIPLATFORM),y)
    268 ifneq ($(CONFIG_ARM_SINGLE_ARMV7M),y)
    269 KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs) $(platdirs))
    270 endif
    271 endif
    272 
    273 export	TEXT_OFFSET GZFLAGS MMUEXT
    274 
    275 # Do we have FASTFPE?
    276 FASTFPE		:=arch/arm/fastfpe
    277 ifeq ($(FASTFPE),$(wildcard $(FASTFPE)))
    278 FASTFPE_OBJ	:=$(FASTFPE)/
    279 endif
    280 
    281 core-$(CONFIG_FPE_NWFPE)	+= arch/arm/nwfpe/
    282 core-$(CONFIG_FPE_FASTFPE)	+= $(FASTFPE_OBJ)
    283 core-$(CONFIG_VFP)		+= arch/arm/vfp/
    284 core-$(CONFIG_XEN)		+= arch/arm/xen/
    285 core-$(CONFIG_KVM_ARM_HOST) 	+= arch/arm/kvm/
    286 core-$(CONFIG_VDSO)		+= arch/arm/vdso/
    287 
    288 # If we have a machine-specific directory, then include it in the build.
    289 core-y				+= arch/arm/kernel/ arch/arm/mm/ arch/arm/common/
    290 core-y				+= arch/arm/probes/
    291 core-y				+= arch/arm/net/
    292 core-y				+= arch/arm/crypto/
    293 core-y				+= arch/arm/firmware/
    294 core-y				+= $(machdirs) $(platdirs)
    295 
    296 drivers-$(CONFIG_OPROFILE)      += arch/arm/oprofile/
    297 
    298 libs-y				:= arch/arm/lib/ $(libs-y)
    299 
    300 # Default target when executing plain make
    301 boot := arch/arm/boot
    302 ifeq ($(CONFIG_XIP_KERNEL),y)
    303 KBUILD_IMAGE := $(boot)/xipImage
    304 else
    305 KBUILD_IMAGE := $(boot)/zImage
    306 endif
    307 
    308 ifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y)
    309 prepare: stack_protector_prepare
    310 stack_protector_prepare: prepare0
    311 	$(eval KBUILD_CFLAGS += \
    312 		-fplugin-arg-arm_ssp_per_task_plugin-tso=$(shell	\
    313 			awk '{if ($$2 == "THREAD_SZ_ORDER") print $$3;}'\
    314 				include/generated/asm-offsets.h)	\
    315 		-fplugin-arg-arm_ssp_per_task_plugin-offset=$(shell	\
    316 			awk '{if ($$2 == "TI_STACK_CANARY") print $$3;}'\
    317 				include/generated/asm-offsets.h))
    318 endif
    319 
    320 all:	$(notdir $(KBUILD_IMAGE))
    321 
    322 
    323 archheaders:
    324 	$(Q)$(MAKE) $(build)=arch/arm/tools uapi
    325 
    326 archprepare:
    327 	$(Q)$(MAKE) $(build)=arch/arm/tools kapi
    328 
    329 # Convert bzImage to zImage
    330 bzImage: zImage
    331 
    332 BOOT_TARGETS	= zImage Image xipImage bootpImage uImage
    333 INSTALL_TARGETS	= zinstall uinstall install
    334 
    335 PHONY += bzImage $(BOOT_TARGETS) $(INSTALL_TARGETS)
    336 
    337 bootpImage uImage: zImage
    338 zImage: Image
    339 
    340 $(BOOT_TARGETS): vmlinux
    341 	$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
    342 	@$(kecho) '  Kernel: $(boot)/$@ is ready'
    343 
    344 $(INSTALL_TARGETS):
    345 	$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@
    346 
    347 PHONY += vdso_install
    348 vdso_install:
    349 ifeq ($(CONFIG_VDSO),y)
    350 	$(Q)$(MAKE) $(build)=arch/arm/vdso $@
    351 endif
    352 
    353 # We use MRPROPER_FILES and CLEAN_FILES now
    354 archclean:
    355 	$(Q)$(MAKE) $(clean)=$(boot)
    356 
    357 # My testing targets (bypasses dependencies)
    358 bp:;	$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/bootpImage
    359 
    360 
    361 define archhelp
    362   echo  '* zImage        - Compressed kernel image (arch/$(ARCH)/boot/zImage)'
    363   echo  '  Image         - Uncompressed kernel image (arch/$(ARCH)/boot/Image)'
    364   echo  '* xipImage      - XIP kernel image, if configured (arch/$(ARCH)/boot/xipImage)'
    365   echo  '  uImage        - U-Boot wrapped zImage'
    366   echo  '  bootpImage    - Combined zImage and initial RAM disk'
    367   echo  '                  (supply initrd image via make variable INITRD=<path>)'
    368   echo  '  install       - Install uncompressed kernel'
    369   echo  '  zinstall      - Install compressed kernel'
    370   echo  '  uinstall      - Install U-Boot wrapped compressed kernel'
    371   echo  '                  Install using (your) ~/bin/$(INSTALLKERNEL) or'
    372   echo  '                  (distribution) /sbin/$(INSTALLKERNEL) or'
    373   echo  '                  install to $$(INSTALL_PATH) and run lilo'
    374   echo  '  vdso_install  - Install unstripped vdso.so to $$(INSTALL_MOD_PATH)/vdso'
    375 endef