Kernel 0.5.9-r6; Process cover stuff, paging go from experimental, lot
[ZeXOS.git] / kernel / Makefile
blob3a56372b4b8e0b0e37ec08c0020fc38153f73b28
1 # ZeX/OS makefile
2 # Copyright (C) 2007 Alex Smith
3 # 2008 Tomas 'ZeXx86' Jedrzejek (zexx86@gmail.com)
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of version 2 of the GNU General Public License
7 # as published by the Free Software Foundation.
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License along
15 # with this program; if not, write to the Free Software Foundation, Inc.,
16 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 # This piece of code was borrowed from Exclaim
19 # Thanks for Alex Smith
21 ZEXOS_VERSION = 0
22 ZEXOS_PATCHLEVEL = 5
23 ZEXOS_SUBLEVEL = 8
24 ZEXOS_EXTRAVERSION =
25 ZEXOS_CODENAME =
27 HOSTCC := gcc
28 HOSTCXX := g++
30 src := $(shell pwd)
31 obj := $(shell pwd)/build/$(ARCH)
32 export src obj
34 ifneq ($(V),1)
35 Q := @
36 endif
38 # When ARCH is not defined, lets detect architecture
39 ifeq ($(ARCH),)
40 ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/x86_64/i386/)
41 endif
43 KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
44 export KERNELVERSION
46 ifeq ($(strip $(wildcard .config)),)
48 all:
49 @printf "Please run make menuconfig, xconfig, gconfig or config first.\n"
50 @false
51 else
53 include $(src)/.config
55 all: prepare $(obj)/config.h $(obj)/build.h drivers
56 @printf " DONE\n"
58 endif
60 include utils/kconfig/Makefile
62 include kernel.mak
64 # prepare
65 prepare:
66 $(Q)if [ ! -d "$(obj)" ]; then mkdir -p $(obj); fi
67 $(Q)if [ -e "$(src)/arch/main" ]; then rm $(src)/arch/main; fi
68 $(Q)ln -s $(src)/arch/$(ARCH) $(src)/arch/main
69 $(Q)if [ -e "$(src)/build/main" ]; then rm $(src)/build/main; fi
70 $(Q)ln -s $(src)/build/$(ARCH) $(src)/build/main
71 $(Q)if [ -e "$(src)/include/arch" ]; then rm $(src)/include/arch; fi
72 $(Q)ln -s $(src)/arch/$(ARCH)/include $(src)/include/arch
73 $(Q)make -C arch/main
74 $(Q)make -C lib
76 $(obj)/config.h: .config
77 $(Q)make --no-print-directory silentoldconfig
78 @printf " CP $(subst $(shell pwd)/,,$(obj)/config.h)\n"
79 $(Q)cp $(src)/.tmpconfig.h $(obj)/config.h
81 # This is generated to build.h header file, which is needed to compilation
82 $(obj)/build.h: Makefile
83 @printf " GEN $(subst $(shell pwd)/,,$(obj)/build.h)\n"
84 $(Q)printf "#define ZEXOS_MAJOR \"$(ZEXOS_VERSION)\"\n" > $(obj)/build.h
85 $(Q)printf "#define ZEXOS_MINOR \"$(ZEXOS_PATCHLEVEL)\"\n" >> $(obj)/build.h
86 $(Q)printf "#define ZEXOS_REVISION \"$(ZEXOS_SUBLEVEL)\"\n" >> $(obj)/build.h
87 $(Q)printf "#define ZEXOS_EXTRAVER \"$(ZEXOS_EXTRAVERSION)\"\n" >> $(obj)/build.h
88 $(Q)printf "#define ZEXOS_VERSION \"$(ZEXOS_KERNELVERSION)$(CONFIG_LOCALVERSION)\"\n" >> $(obj)/build.h
89 $(Q)printf "#define ZEXOS_CODENAME \"$(ZEXOS_CODENAME)\"\n" >> $(obj)/build.h
90 $(Q)printf "#define ZEXOS_DATE \"`LANG= date \"+%Y-%m-%d %H:%m:%S\"`\"\n" >> $(obj)/build.h
91 $(Q)printf "\n" >> $(obj)/build.h
92 $(Q)printf "#define ZEXOS_COMPILER \"$(shell LANG= $(CC) --version | head -n1)\"\n" >> $(obj)/build.h
93 $(Q)printf "#define ZEXOS_COMPILE_BY \"$(shell PATH=$$PATH:/usr/ucb whoami)\"\n" >> $(obj)/build.h
94 $(Q)printf "#define ZEXOS_COMPILE_HOST \"$(shell hostname)\"\n" >> $(obj)/build.h
95 $(Q)printf "#define ZEXOS_COMPILE_DOMAIN \"$(shell test `uname -s` = "Linux" && dnsdomainname || domainname)\"\n" >> $(obj)/build.h
96 $(Q)printf "\n" >> $(obj)/build.h
97 $(Q)printf "#define ZEXOS_ARCH \"$(ARCH)\"\n" >> $(obj)/build.h
98 $(Q)printf "#define ARCH_$(ARCH)\n" >> $(obj)/build.h