2005-04-17 02:20:36 +04:00
#
# Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
# Licensed under the GPL
#
ARCH_DIR := arch/um
OS := $( shell uname -s)
# We require bash because the vmlinux link and loader script cpp use bash
# features.
SHELL := /bin/bash
filechk_gen_header = $<
core-y += $( ARCH_DIR) /kernel/ \
$( ARCH_DIR) /drivers/ \
$( ARCH_DIR) /os-$( OS) /
# Have to precede the include because the included Makefiles reference them.
SYMLINK_HEADERS := archparam.h system.h sigcontext.h processor.h ptrace.h \
2005-05-06 03:15:39 +04:00
module.h vm-flags.h elf.h
2005-04-17 02:20:36 +04:00
SYMLINK_HEADERS := $( foreach header,$( SYMLINK_HEADERS) ,include/asm-um/$( header) )
# XXX: The "os" symlink is only used by arch/um/include/os.h, which includes
# ../os/include/file.h
#
# These are cleaned up during mrproper. Please DO NOT fix it again, this is
# the Correct Thing(tm) to do!
ARCH_SYMLINKS = include/asm-um/arch $( ARCH_DIR) /include/sysdep $( ARCH_DIR) /os \
$( SYMLINK_HEADERS) $( ARCH_DIR) /include/uml-config.h
um-modes-$(CONFIG_MODE_TT) += tt
um-modes-$(CONFIG_MODE_SKAS) += skas
MODE_INCLUDE += $( foreach mode,$( um-modes-y) ,\
-I$( srctree) /$( ARCH_DIR) /kernel/$( mode) /include)
MAKEFILES-INCL += $( foreach mode,$( um-modes-y) ,\
$( srctree) /$( ARCH_DIR) /Makefile-$( mode) )
i f n e q ( $( MAKEFILES -INCL ) , )
include $( MAKEFILES-INCL)
e n d i f
ARCH_INCLUDE := -I$( ARCH_DIR) /include
2005-05-06 03:15:29 +04:00
i f n e q ( $( KBUILD_SRC ) , )
ARCH_INCLUDE += -I$( srctree) /$( ARCH_DIR) /include
e n d i f
2005-04-17 02:20:36 +04:00
SYS_DIR := $( ARCH_DIR) /include/sysdep-$( SUBARCH)
2005-07-14 11:33:41 +04:00
# -Dvmap=kernel_vmap affects everything, and prevents anything from
# referencing the libpcap.o symbol so named.
2005-09-21 20:39:32 +04:00
#
# Same things for in6addr_loopback - found in libc.
2005-04-17 02:20:36 +04:00
CFLAGS += $( CFLAGS-y) -D__arch_um__ -DSUBARCH= \" $( SUBARCH) \" \
2005-09-21 20:39:32 +04:00
$( ARCH_INCLUDE) $( MODE_INCLUDE) -Dvmap= kernel_vmap \
-Din6addr_loopback= kernel_in6addr_loopback
2005-09-04 02:57:30 +04:00
AFLAGS += $( ARCH_INCLUDE)
2005-04-17 02:20:36 +04:00
USER_CFLAGS := $( patsubst -I%,,$( CFLAGS) )
USER_CFLAGS := $( patsubst -D__KERNEL__,,$( USER_CFLAGS) ) $( ARCH_INCLUDE) \
2005-07-14 11:33:43 +04:00
$( MODE_INCLUDE)
2005-07-14 11:33:41 +04:00
# -Derrno=kernel_errno - This turns all kernel references to errno into
# kernel_errno to separate them from the libc errno. This allows -fno-common
# in CFLAGS. Otherwise, it would cause ld to complain about the two different
# errnos.
2005-04-17 02:20:36 +04:00
CFLAGS += -Derrno= kernel_errno -Dsigprocmask= kernel_sigprocmask
CFLAGS += $( call cc-option,-fno-unit-at-a-time,)
2005-07-14 11:33:43 +04:00
i n c l u d e $( srctree ) / $( ARCH_DIR ) / M a k e f i l e - $( SUBARCH )
2005-04-17 02:20:36 +04:00
#This will adjust *FLAGS accordingly to the platform.
i n c l u d e $( srctree ) / $( ARCH_DIR ) / M a k e f i l e - o s - $( OS )
# These are needed for clean and mrproper, since in that case .config is not
# included; the values here are meaningless
CONFIG_NEST_LEVEL ?= 0
CONFIG_KERNEL_HALF_GIGS ?= 0
SIZE = ( ( $( CONFIG_NEST_LEVEL) + $( CONFIG_KERNEL_HALF_GIGS) ) * 0x20000000)
.PHONY : linux
all : linux
linux : vmlinux
ln -f $< $@
d e f i n e a r c h h e l p
echo '* linux - Binary kernel image (./linux) - for backward'
echo ' compatibility only, this creates a hard link to the'
echo ' real kernel binary, the the "vmlinux" binary you'
echo ' find in the kernel root.'
e n d e f
2005-05-06 03:15:29 +04:00
i f n e q ( $( KBUILD_SRC ) , )
2005-09-04 02:57:12 +04:00
$( shell mkdir -p $ ( ARCH_DIR ) && ln -fsn $ ( srctree ) /$ ( ARCH_DIR ) /Kconfig .$ ( SUBARCH ) $ ( ARCH_DIR ) /Kconfig .arch )
2005-05-06 03:15:29 +04:00
e l s e
2005-09-04 02:57:12 +04:00
$( shell cd $ ( ARCH_DIR ) && ln -sf Kconfig .$ ( SUBARCH ) Kconfig .arch )
2005-05-06 03:15:29 +04:00
e n d i f
2005-04-17 02:20:36 +04:00
2005-09-29 01:27:23 +04:00
archprepare : $( ARCH_SYMLINKS ) $( ARCH_DIR ) /include /user_constants .h
prepare : $( ARCH_DIR ) /include /kern_constants .h
2005-04-17 02:20:36 +04:00
LINK-$(CONFIG_LD_SCRIPT_STATIC) += -static
LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib
CPP_MODE-$(CONFIG_MODE_TT) := -DMODE_TT
CONFIG_KERNEL_STACK_ORDER ?= 2
STACK_SIZE := $( shell echo $$ [ 4096 * ( 1 << $( CONFIG_KERNEL_STACK_ORDER) ) ] )
i f n d e f S T A R T
2005-07-14 11:33:38 +04:00
START = $( shell echo $$ [ $( TOP_ADDR) - $( SIZE) ] )
2005-04-17 02:20:36 +04:00
e n d i f
2005-07-14 11:33:38 +04:00
CPPFLAGS_vmlinux.lds = -U$( SUBARCH) \
2005-04-17 02:20:36 +04:00
-DSTART= $( START) -DELF_ARCH= $( ELF_ARCH) \
2005-07-14 11:33:38 +04:00
-DELF_FORMAT= " $( ELF_FORMAT) " $( CPP_MODE-y) \
-DKERNEL_STACK_SIZE= $( STACK_SIZE) \
-DUNMAP_PATH= arch/um/sys-$( SUBARCH) /unmap_fin.o
2005-04-17 02:20:36 +04:00
#The wrappers will select whether using "malloc" or the kernel allocator.
LINK_WRAPS = -Wl,--wrap,malloc -Wl,--wrap,free -Wl,--wrap,calloc
2005-07-14 11:33:43 +04:00
CFLAGS_vmlinux := $( LINK-y) $( LINK_WRAPS)
2005-04-17 02:20:36 +04:00
d e f i n e c m d _ v m l i n u x _ _
$( CC) $( CFLAGS_vmlinux) -o $@ \
-Wl,-T,$( vmlinux-lds) $( vmlinux-init) \
-Wl,--start-group $( vmlinux-main) -Wl,--end-group \
2005-05-06 03:15:18 +04:00
-lutil \
2005-04-17 02:20:36 +04:00
$( filter-out $( vmlinux-lds) $( vmlinux-init) $( vmlinux-main) \
FORCE ,$^) ; rm -f linux
e n d e f
#When cleaning we don't include .config, so we don't include
#TT or skas makefiles and don't clean skas_ptregs.h.
CLEAN_FILES += linux x.i gmon.out $( ARCH_DIR) /include/uml-config.h \
2005-09-29 01:27:23 +04:00
$( ARCH_DIR) /include/user_constants.h \
$( ARCH_DIR) /include/kern_constants.h $( ARCH_DIR) /Kconfig.arch
2005-04-17 02:20:36 +04:00
MRPROPER_FILES += $( SYMLINK_HEADERS) $( ARCH_SYMLINKS) \
2005-09-10 21:44:53 +04:00
$( addprefix $( ARCH_DIR) /kernel/,$( KERN_SYMLINKS) ) $( ARCH_DIR) /os
2005-04-17 02:20:36 +04:00
archclean :
@find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \
-o -name '*.gcov' \) -type f -print | xargs rm -f
$(SYMLINK_HEADERS) :
@echo ' SYMLINK $@'
2005-05-06 03:15:29 +04:00
i f n e q ( $( KBUILD_SRC ) , )
2005-10-09 23:37:05 +04:00
$( Q) ln -fsn $( srctree) /include/asm-um/$( basename $( notdir $@ ) ) -$( SUBARCH) $( suffix $@ ) $@
2005-05-06 03:15:29 +04:00
e l s e
2005-04-17 02:20:36 +04:00
$( Q) cd $( TOPDIR) /$( dir $@ ) ; \
ln -sf $( basename $( notdir $@ ) ) -$( SUBARCH) $( suffix $@ ) $( notdir $@ )
2005-05-06 03:15:29 +04:00
e n d i f
2005-04-17 02:20:36 +04:00
include/asm-um/arch :
@echo ' SYMLINK $@'
2005-05-06 03:15:29 +04:00
i f n e q ( $( KBUILD_SRC ) , )
$( Q) mkdir -p include/asm-um
$( Q) ln -fsn $( srctree) /include/asm-$( SUBARCH) include/asm-um/arch
e l s e
2005-04-17 02:20:36 +04:00
$( Q) cd $( TOPDIR) /include/asm-um && ln -sf ../asm-$( SUBARCH) arch
2005-05-06 03:15:29 +04:00
e n d i f
2005-04-17 02:20:36 +04:00
$(ARCH_DIR)/include/sysdep :
@echo ' SYMLINK $@'
2005-05-06 03:15:29 +04:00
i f n e q ( $( KBUILD_SRC ) , )
$( Q) mkdir -p $( ARCH_DIR) /include
2005-09-29 01:27:23 +04:00
$( Q) ln -fsn $( srctree) /$( ARCH_DIR) /include/sysdep-$( SUBARCH) $( ARCH_DIR) /include/sysdep
2005-05-06 03:15:29 +04:00
e l s e
2005-04-17 02:20:36 +04:00
$( Q) cd $( ARCH_DIR) /include && ln -sf sysdep-$( SUBARCH) sysdep
2005-05-06 03:15:29 +04:00
e n d i f
2005-04-17 02:20:36 +04:00
$(ARCH_DIR)/os :
@echo ' SYMLINK $@'
2005-05-06 03:15:29 +04:00
i f n e q ( $( KBUILD_SRC ) , )
$( Q) ln -fsn $( srctree) /$( ARCH_DIR) /os-$( OS) $( ARCH_DIR) /os
e l s e
2005-04-17 02:20:36 +04:00
$( Q) cd $( ARCH_DIR) && ln -sf os-$( OS) os
2005-05-06 03:15:29 +04:00
e n d i f
2005-04-17 02:20:36 +04:00
# Generated files
d e f i n e f i l e c h k _ u m l c o n f i g
sed 's/ CONFIG/ UML_CONFIG/'
e n d e f
2005-09-10 01:10:54 +04:00
d e f i n e f i l e c h k _ g e n - a s m - o f f s e t s
( set -e; \
echo "/*" ; \
echo " * DO NOT MODIFY." ; \
echo " *" ; \
echo " * This file was generated by arch/ $( ARCH) /Makefile " ; \
echo " *" ; \
echo " */" ; \
echo "" ; \
sed -ne " /^->/{s:^->\([^ ]*\) [\$ $# ]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;} " ; \
2005-09-29 01:27:23 +04:00
echo "" ; )
2005-09-10 01:10:54 +04:00
e n d e f
2005-04-17 02:20:36 +04:00
$(ARCH_DIR)/include/uml-config.h : include /linux /autoconf .h
$( call filechk,umlconfig)
2005-05-06 03:15:23 +04:00
$(ARCH_DIR)/user-offsets.s : $( ARCH_DIR ) /sys -$( SUBARCH ) /user -offsets .c
$( CC) $( USER_CFLAGS) -S -o $@ $<
2005-09-29 01:27:23 +04:00
$(ARCH_DIR)/include/user_constants.h : $( ARCH_DIR ) /user -offsets .s
2005-05-06 03:15:23 +04:00
$( call filechk,gen-asm-offsets)
2005-09-29 01:27:23 +04:00
CLEAN_FILES += $( ARCH_DIR) /user-offsets.s
2005-05-06 03:15:23 +04:00
2005-05-06 03:15:25 +04:00
$(ARCH_DIR)/kernel-offsets.s : $( ARCH_DIR ) /sys -$( SUBARCH ) /kernel -offsets .c \
2005-09-29 01:27:23 +04:00
archprepare
2005-05-06 03:15:25 +04:00
$( CC) $( CFLAGS) $( NOSTDINC_FLAGS) $( CPPFLAGS) -S -o $@ $<
2005-09-29 01:27:23 +04:00
$(ARCH_DIR)/include/kern_constants.h : $( ARCH_DIR ) /kernel -offsets .s
2005-05-06 03:15:25 +04:00
$( call filechk,gen-asm-offsets)
2005-09-29 01:27:23 +04:00
CLEAN_FILES += $( ARCH_DIR) /kernel-offsets.s
2005-04-17 02:20:36 +04:00
export SUBARCH USER_CFLAGS OS