few fixes/additions:
[newos.git] / makefile
blob9cda93bd72f22db0dfc17a0960412c842c268da8
1 ifeq ($(HOSTTYPE),i586)
2 HOSTTYPE = i386
3 endif
4 ifeq ($(HOSTTYPE),i686)
5 HOSTTYPE = i386
6 endif
7 ifeq ($(ARCH), )
8 ARCH = $(HOSTTYPE)
9 #ARCH = i386
10 #ARCH = sparc
11 #ARCH = sh4
12 #ARCH = alpha
13 #ARCH = sparc64
14 endif
16 HOST_CC = gcc
17 HOST_LD = ld
18 HOST_AS = as
19 HOST_AR = ar
20 HOST_OBJCOPY = objcopy
22 # setup echo
23 ECHO = echo
24 ifeq ($(shell uname),SunOS)
25 ECHO = /usr/ucb/echo
26 endif
28 BOOTMAKER = tools/bootmaker
29 NETBOOT = tools/netboot
30 BIN2H = tools/bin2h
31 BIN2ASM = tools/bin2asm
33 CC = $(HOST_CC)
34 LD = $(HOST_LD)
35 AS = $(HOST_AS)
36 AR = $(HOST_AR)
38 ifeq ($(ARCH),i386)
39 ifneq ($(HOSTTYPE),i386)
40 CC = i386-elf-gcc
41 LD = i386-elf-ld
42 AS = i386-elf-as
43 AR = i386-elf-ar
44 OBJCOPY = i386-elf-objcopy
45 endif
46 ifeq ($(OSTYPE),cygwin)
47 CC = i386-linux-gcc
48 LD = i386-linux-ld
49 AS = i386-linux-as
50 AR = i386-linux-ar
51 OBJCOPY = i386-linux-objcopy
52 endif
53 GLOBAL_CFLAGS = -O -DNEWOS=1
54 KERNEL_CFLAGS = -fno-pic
55 USER_CFLAGS = -fpic
56 GLOBAL_LDFLAGS =
57 LIBGCC = -lgcc
58 LIBGCC_PATH = lib/libgcc/$(ARCH)
59 endif
61 ifeq ($(ARCH),sh4)
62 CC = sh-elf-gcc
63 LD = sh-elf-ld
64 AS = sh-elf-as
65 AR = sh-elf-ar
66 OBJCOPY = sh-elf-objcopy
67 GLOBAL_CFLAGS = -ml -m4 -mhitachi -O
68 GLOBAL_LDFLAGS = -EL
69 LIBGCC = -lgcc
70 LIBGCC_PATH = lib/libgcc/$(ARCH)/ml/m4-single-only
71 endif
73 ifeq ($(ARCH),sparc64)
74 CC = sparc64-elf-gcc
75 LD = sparc64-elf-ld
76 AS = sparc64-elf-as
77 AR = sparc64-elf-ar
78 OBJCOPY = sparc64-elf-objcopy
79 GLOBAL_CFLAGS =
80 GLOBAL_LDFLAGS =
81 LIBGCC = -lgcc
82 LIBGCC_PATH = lib/libgcc/$(ARCH)
83 endif
85 ifeq ($(ARCH),sparc)
86 ifneq ($(HOSTTYPE),sparc)
87 CC = sparc-elf-gcc
88 LD = sparc-elf-ld
89 AS = sparc-elf-as
90 AR = sparc-elf-ar
91 OBJCOPY = sparc-elf-objcopy
92 endif
93 GLOBAL_CFLAGS =
94 GLOBAL_LDFLAGS =
95 LIBGCC = -lgcc
96 LIBGCC_PATH = lib/libgcc/$(ARCH)
97 endif
99 ifeq ($(ARCH),alpha)
100 ifneq ($(HOSTTYPE),alpha)
101 CC = alpha-elf-gcc
102 LD = alpha-elf-ld
103 AS = alpha-elf-as
104 AR = alpha-elf-ar
105 OBJCOPY = alpha-elf-objcopy
106 endif
107 GLOBAL_CFLAGS =
108 GLOBAL_LDFLAGS =
109 LIBGCC = -lgcc
110 LIBGCC_PATH = lib/libgcc/$(ARCH)
111 endif
113 ifeq ($(ARCH),mips)
114 ifneq ($(HOSTTYPE),mips)
115 CC = mips-elf-gcc
116 LD = mips-elf-ld
117 AS = mips-elf-as
118 AR = mips-elf-ar
119 OBJCOPY = mips-elf-objcopy
120 endif
121 GLOBAL_CFLAGS = -fno-pic -mips4 -meb -G 0
122 GLOBAL_LDFLAGS =
123 LIBGCC = -lgcc
124 LIBGCC_PATH = lib/libgcc/$(ARCH)
125 endif
127 ifeq ($(ARCH),ppc)
128 ifneq ($(HOSTTYPE),ppc)
129 CC = ppc-elf-gcc
130 LD = ppc-elf-ld
131 AS = ppc-elf-as
132 AR = ppc-elf-ar
133 OBJCOPY = ppc-elf-objcopy
134 endif
135 GLOBAL_CFLAGS = -fno-pic -O
136 GLOBAL_LDFLAGS =
137 LIBGCC = -lgcc
138 LIBGCC_PATH = lib/libgcc/$(ARCH)
139 endif
141 OBJ_DIR = obj.$(ARCH)
143 GLOBAL_CFLAGS += -Wall -W -Wno-multichar -Wno-unused -nostdinc -fno-builtin -DARCH_$(ARCH)
145 # sub makefiles are responsible for adding to these
146 DEPS =
147 CLEAN =
148 FINAL =
150 final: final1
152 # include the top level makefile
153 include boot/$(ARCH)/boot.mk
155 BOOTMAKER_ARGS =
156 ifeq ($(ARCH),sparc)
157 BOOTMAKER_ARGS += --sparc
158 endif
160 final1: $(FINAL)
161 rm -f final.$(ARCH);ln -sf $(FINAL) final.$(ARCH)
162 rm -f system.$(ARCH);ln -sf $(KERNEL) system.$(ARCH)
164 tools: $(NETBOOT) $(BOOTMAKER) $(BIN2H) $(BIN2ASM)
166 $(BOOTMAKER): $(BOOTMAKER).c tools/sparcbootblock.h
167 $(HOST_CC) -O0 -g -o $@ $(BOOTMAKER).c
169 NETBOOT_LINK_ARGS =
170 ifeq ($(OSTYPE),beos)
171 NETBOOT_LINK_ARGS = -lsocket -lnet
172 endif
173 ifeq ($(shell uname),SunOS)
174 NETBOOT_LINK_ARGS = -lsocket -lnsl
175 endif
177 $(NETBOOT): $(NETBOOT).c
178 $(HOST_CC) -O3 -o $@ $(NETBOOT).c $(NETBOOT_LINK_ARGS)
180 $(BIN2ASM): $(BIN2ASM).c
181 $(HOST_CC) -O3 -o $@ $(BIN2ASM).c
183 $(BIN2H): $(BIN2H).c
184 $(HOST_CC) -O3 -o $@ $(BIN2H).c
186 toolsclean:
187 rm -f $(BOOTMAKER) $(NETBOOT) $(NETBOOT_DC) $(BIN2H) $(BIN2ASM)
189 CLEAN += toolsclean
191 clean: $(CLEAN)
192 rm -f $(KERNEL) $(FINAL)
193 rm -f final.$(ARCH) system.$(ARCH)
195 depsclean:
196 rm -f $(DEPS)
198 allclean: depsclean clean toolsclean
199 rm -f `find . -type f -name '*.d'`
200 rm -f `find . -type f -name '*.o'`
202 ifeq ($(filter $(MAKECMDGOALS), allclean), )
203 include $(DEPS)
204 endif