xref: /linux/arch/um/Makefile (revision 0b5aedfe0e6654ec54f35109e1929a1cf7fc4cdd)
11da177e4SLinus Torvalds#
24f193362SPaul Smith# This file is included by the global makefile so that you can add your own
34f193362SPaul Smith# architecture-specific flags and dependencies.
44f193362SPaul Smith#
54c9e1385SJeff Dike# Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
61da177e4SLinus Torvalds# Licensed under the GPL
71da177e4SLinus Torvalds#
81da177e4SLinus Torvalds
9e40f04d0SRamkumar Ramachandra# select defconfig based on actual architecture
10e40f04d0SRamkumar Ramachandraifeq ($(SUBARCH),x86)
11e40f04d0SRamkumar Ramachandra  ifeq ($(shell uname -m),x86_64)
12e40f04d0SRamkumar Ramachandra        KBUILD_DEFCONFIG := x86_64_defconfig
13e40f04d0SRamkumar Ramachandra  else
14e40f04d0SRamkumar Ramachandra        KBUILD_DEFCONFIG := i386_defconfig
15e40f04d0SRamkumar Ramachandra  endif
16e40f04d0SRamkumar Ramachandraelse
17e40f04d0SRamkumar Ramachandra        KBUILD_DEFCONFIG := $(SUBARCH)_defconfig
18e40f04d0SRamkumar Ramachandraendif
19e40f04d0SRamkumar Ramachandra
201da177e4SLinus TorvaldsARCH_DIR := arch/um
211da177e4SLinus TorvaldsOS := $(shell uname -s)
221da177e4SLinus Torvalds# We require bash because the vmlinux link and loader script cpp use bash
231da177e4SLinus Torvalds# features.
241da177e4SLinus TorvaldsSHELL := /bin/bash
251da177e4SLinus Torvalds
261da177e4SLinus Torvaldsfilechk_gen_header = $<
271da177e4SLinus Torvalds
281da177e4SLinus Torvaldscore-y			+= $(ARCH_DIR)/kernel/		\
291da177e4SLinus Torvalds			   $(ARCH_DIR)/drivers/		\
301da177e4SLinus Torvalds			   $(ARCH_DIR)/os-$(OS)/
311da177e4SLinus Torvalds
328569c914SAl ViroMODE_INCLUDE	+= -I$(srctree)/$(ARCH_DIR)/include/shared/skas
331da177e4SLinus Torvalds
347bbe7204SAl ViroHEADER_ARCH 	:= $(SUBARCH)
357bbe7204SAl Viro
36fff6540cSRichard Weinbergerifneq ($(filter $(SUBARCH),x86 x86_64 i386),)
377bbe7204SAl Viro	HEADER_ARCH := x86
387bbe7204SAl Viroendif
39fff6540cSRichard Weinberger
40fff6540cSRichard Weinbergerifdef CONFIG_64BIT
4112783aa0SRichard Weinberger	KBUILD_CFLAGS += -mcmodel=large
427bbe7204SAl Viroendif
437bbe7204SAl Viro
445c48b108SAl ViroHOST_DIR := arch/$(HEADER_ARCH)
455c48b108SAl Viro
46a436bb7bSMasahiro Yamadainclude $(ARCH_DIR)/Makefile-skas
47a436bb7bSMasahiro Yamadainclude $(HOST_DIR)/Makefile.um
485c48b108SAl Viro
495c48b108SAl Virocore-y += $(HOST_DIR)/um/
501da177e4SLinus Torvalds
5122409f9cSAl ViroSHARED_HEADERS	:= $(ARCH_DIR)/include/shared
5222409f9cSAl ViroARCH_INCLUDE	:= -I$(srctree)/$(SHARED_HEADERS)
535c48b108SAl ViroARCH_INCLUDE	+= -I$(srctree)/$(HOST_DIR)/um/shared
545c48b108SAl ViroKBUILD_CPPFLAGS += -I$(srctree)/$(HOST_DIR)/um
551da177e4SLinus Torvalds
5698105d47SPaolo 'Blaisorblade' Giarrusso# -Dvmap=kernel_vmap prevents anything from referencing the libpcap.o symbol so
5798105d47SPaolo 'Blaisorblade' Giarrusso# named - it's a common symbol in libpcap, so we get a binary which crashes.
58fd748104SPaolo 'Blaisorblade' Giarrusso#
5998105d47SPaolo 'Blaisorblade' Giarrusso# Same things for in6addr_loopback and mktime - found in libc. For these two we
6098105d47SPaolo 'Blaisorblade' Giarrusso# only get link-time error, luckily.
6198105d47SPaolo 'Blaisorblade' Giarrusso#
6298105d47SPaolo 'Blaisorblade' Giarrusso# These apply to USER_CFLAGS to.
63ecc354a9SPaolo 'Blaisorblade' Giarrusso
64dc5be20aSAl ViroKBUILD_CFLAGS += $(CFLAGS) $(CFLAGS-y) -D__arch_um__ \
65fd748104SPaolo 'Blaisorblade' Giarrusso	$(ARCH_INCLUDE) $(MODE_INCLUDE) -Dvmap=kernel_vmap	\
66818f6ef4SJeff Dike	-Din6addr_loopback=kernel_in6addr_loopback \
672c51a4bcSAl Viro	-Din6addr_any=kernel_in6addr_any -Dstrrchr=kernel_strrchr
68fd748104SPaolo 'Blaisorblade' Giarrusso
69222d394dSSam RavnborgKBUILD_AFLAGS += $(ARCH_INCLUDE)
70ecc354a9SPaolo 'Blaisorblade' Giarrusso
71298e20baSRichard WeinbergerUSER_CFLAGS = $(patsubst $(KERNEL_DEFINES),,$(patsubst -I%,,$(KBUILD_CFLAGS))) \
72298e20baSRichard Weinberger		$(ARCH_INCLUDE) $(MODE_INCLUDE) $(filter -I%,$(CFLAGS)) \
73*0b5aedfeSRichard Weinberger		-D_FILE_OFFSET_BITS=64 -idirafter $(srctree)/include \
74*0b5aedfeSRichard Weinberger		-idirafter $(obj)/include -D__KERNEL__ -D__UM_HOST__
75d45e44d4Sakpm@osdl.org
76d45e44d4Sakpm@osdl.org#This will adjust *FLAGS accordingly to the platform.
77a436bb7bSMasahiro Yamadainclude $(ARCH_DIR)/Makefile-os-$(OS)
78ecc354a9SPaolo 'Blaisorblade' Giarrusso
79c9b284b2SH. Peter AnvinKBUILD_CPPFLAGS += -I$(srctree)/$(HOST_DIR)/include \
80abbf1590SDavid Howells		   -I$(srctree)/$(HOST_DIR)/include/uapi \
81abbf1590SDavid Howells		   -I$(HOST_DIR)/include/generated \
82abbf1590SDavid Howells		   -I$(HOST_DIR)/include/generated/uapi
831de1502cSAl Viro
841da177e4SLinus Torvalds# -Derrno=kernel_errno - This turns all kernel references to errno into
851da177e4SLinus Torvalds# kernel_errno to separate them from the libc errno.  This allows -fno-common
86a0f97e06SSam Ravnborg# in KBUILD_CFLAGS.  Otherwise, it would cause ld to complain about the two different
871da177e4SLinus Torvalds# errnos.
8898105d47SPaolo 'Blaisorblade' Giarrusso# These apply to kernelspace only.
89f15cf515SJeff Dike#
90f15cf515SJeff Dike# strip leading and trailing whitespace to make the USER_CFLAGS removal of these
91f15cf515SJeff Dike# defines more robust
921da177e4SLinus Torvalds
93f15cf515SJeff DikeKERNEL_DEFINES = $(strip -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask \
94f15cf515SJeff Dike			 -Dmktime=kernel_mktime $(ARCH_KERNEL_DEFINES))
95a0f97e06SSam RavnborgKBUILD_CFLAGS += $(KERNEL_DEFINES)
961da177e4SLinus Torvalds
974f193362SPaul SmithPHONY += linux
981da177e4SLinus Torvalds
991da177e4SLinus Torvaldsall: linux
1001da177e4SLinus Torvalds
1011da177e4SLinus Torvaldslinux: vmlinux
102a4b741e3SJeff Dike	@echo '  LINK $@'
103cb8aa3d2SPaolo 'Blaisorblade' Giarrusso	$(Q)ln -f $< $@
1041da177e4SLinus Torvalds
1051da177e4SLinus Torvaldsdefine archhelp
1061da177e4SLinus Torvalds  echo '* linux		- Binary kernel image (./linux) - for backward'
1071da177e4SLinus Torvalds  echo '		   compatibility only, this creates a hard link to the'
1084b3f686dSMatt LaPlante  echo '		   real kernel binary, the "vmlinux" binary you'
1091da177e4SLinus Torvalds  echo '		   find in the kernel root.'
1101da177e4SLinus Torvaldsendef
1111da177e4SLinus Torvalds
1125c48b108SAl ViroKBUILD_KCONFIG := $(HOST_DIR)/um/Kconfig
1131da177e4SLinus Torvalds
114c9b284b2SH. Peter Anvinarchheaders:
115d4bc590fSMichal Marek	$(Q)$(MAKE) KBUILD_SRC= ARCH=$(HEADER_ARCH) archheaders
116c9b284b2SH. Peter Anvin
1174de1c5f6SAl Viroarchprepare: include/generated/user_constants.h
1181da177e4SLinus Torvalds
1191da177e4SLinus TorvaldsLINK-$(CONFIG_LD_SCRIPT_STATIC) += -static
1201da177e4SLinus TorvaldsLINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib
1211da177e4SLinus Torvalds
122275e6e1eSPaolo 'Blaisorblade' GiarrussoCFLAGS_NO_HARDENING := $(call cc-option, -fno-PIC,) $(call cc-option, -fno-pic,) \
123275e6e1eSPaolo 'Blaisorblade' Giarrusso	$(call cc-option, -fno-stack-protector,) \
124275e6e1eSPaolo 'Blaisorblade' Giarrusso	$(call cc-option, -fno-stack-protector-all,)
125275e6e1eSPaolo 'Blaisorblade' Giarrusso
12651b563fcSSam Ravnborg# Options used by linker script
12751b563fcSSam Ravnborgexport LDS_START      := $(START)
12851b563fcSSam Ravnborgexport LDS_ELF_ARCH   := $(ELF_ARCH)
12951b563fcSSam Ravnborgexport LDS_ELF_FORMAT := $(ELF_FORMAT)
1301da177e4SLinus Torvalds
1311da177e4SLinus Torvalds# The wrappers will select whether using "malloc" or the kernel allocator.
1321da177e4SLinus TorvaldsLINK_WRAPS = -Wl,--wrap,malloc -Wl,--wrap,free -Wl,--wrap,calloc
1331da177e4SLinus Torvalds
134260c0cb8SJeff DikeLD_FLAGS_CMDLINE = $(foreach opt,$(LDFLAGS),-Wl,$(opt))
1350ba7fe03SJeff Dike
1361f2bfbd0SSam Ravnborg# Used by link-vmlinux.sh which has special support for um link
1371f2bfbd0SSam Ravnborgexport CFLAGS_vmlinux := $(LINK-y) $(LINK_WRAPS) $(LD_FLAGS_CMDLINE)
1381da177e4SLinus Torvalds
1391da177e4SLinus Torvalds# When cleaning we don't include .config, so we don't include
1401da177e4SLinus Torvalds# TT or skas makefiles and don't clean skas_ptregs.h.
1419e636452SAl ViroCLEAN_FILES += linux x.i gmon.out
1421da177e4SLinus Torvalds
1431da177e4SLinus Torvaldsarchclean:
1441da177e4SLinus Torvalds	@find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \
1451da177e4SLinus Torvalds		-o -name '*.gcov' \) -type f -print | xargs rm -f
1461da177e4SLinus Torvalds
1471da177e4SLinus Torvalds# Generated files
1484ee189a9SJeff Dike
149392f4b7dSH. Peter Anvin$(HOST_DIR)/um/user-offsets.s: __headers FORCE
1505c48b108SAl Viro	$(Q)$(MAKE) $(build)=$(HOST_DIR)/um $@
1514ee189a9SJeff Dike
152f64a227bSSam Ravnborgdefine filechk_gen-asm-offsets
153f64a227bSSam Ravnborg        (set -e; \
154f64a227bSSam Ravnborg         echo "/*"; \
155f64a227bSSam Ravnborg         echo " * DO NOT MODIFY."; \
156f64a227bSSam Ravnborg         echo " *"; \
157f64a227bSSam Ravnborg         echo " * This file was generated by arch/$(ARCH)/Makefile"; \
158f64a227bSSam Ravnborg         echo " *"; \
159f64a227bSSam Ravnborg         echo " */"; \
160f64a227bSSam Ravnborg         echo ""; \
161f64a227bSSam Ravnborg         sed -ne "/^->/{s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"; \
162ecba97d4SAl Viro         echo ""; )
163f64a227bSSam Ravnborgendef
164f64a227bSSam Ravnborg
1655c48b108SAl Viroinclude/generated/user_constants.h: $(HOST_DIR)/um/user-offsets.s
1668d0b9dc9SAl Viro	$(call filechk,gen-asm-offsets)
1678d0b9dc9SAl Viro
1685c48b108SAl Viroexport SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING OS DEV_NULL_PATH
169