fix submitted by Radu Pasol to fix hoard (was incorrectly incrementing sbrk).
[newos.git] / makefile
blob9c1c808ddb448a4f47b0cdbe70e629cac4d1e162
1 ifeq ($(HOSTTYPE),)
2 HOSTTYPE := $(shell uname -m)
3 endif
4 ifeq ($(OSTYPE),)
5 OSTYPE := $(shell uname -s | awk -F_ '{print $$1}' | tr A-Z a-z)
6 endif
8 ifeq ($(HOSTTYPE),i586)
9 HOSTTYPE := i386
10 endif
11 ifeq ($(HOSTTYPE),i686)
12 HOSTTYPE := i386
13 endif
14 ifeq ($(HOSTTYPE),)
15 HOSTTYPE := i386
16 endif
17 ifeq ($(HOSTTYPE),macintosh)
18 ifeq ($(MACHTYPE),powerpc)
19 HOSTTYPE := ppc
20 endif
21 endif
22 ifeq ($(ARCH),)
23 #ARCH := $(HOSTTYPE)
24 ARCH := i386
25 #ARCH := sparc
26 #ARCH := sh4
27 #ARCH := alpha
28 #ARCH := sparc64
29 #ARCH := m68k
30 endif
32 HOST_CC := gcc
33 HOST_LD := $(LD)
34 HOST_AS := $(AS)
35 HOST_AR := $(AR)
36 HOST_OBJCOPY := objcopy
37 HOST_STRIP := strip
38 HOST_SIZE := size
40 # setup some local commands
41 ECHO := echo
42 AWK := awk
43 ifeq ($(OSTYPE),SunOS)
44 ECHO := /usr/ucb/echo
45 AWK := gawk
46 endif
47 ifeq ($(findstring solaris,$(OSTYPE)),solaris)
48 ECHO := /usr/ucb/echo
49 AWK := gawk
50 endif
52 BOOTMAKER = tools/bootmaker
53 NETBOOT = tools/netboot
54 BIN2H = tools/bin2h
55 BIN2ASM = tools/bin2asm
57 CC = $(HOST_CC)
58 LD = $(HOST_LD)
59 AS = $(HOST_AS)
60 AR = $(HOST_AR)
61 OBJCOPY = $(HOST_OBJCOPY)
62 STRIP = $(HOST_STRIP)
63 SIZE = $(HOST_SIZE)
65 ifeq ($(ARCH),i386)
66 ifneq ($(HOSTTYPE),i386)
67 CC = i386-elf-gcc
68 LD = i386-elf-ld
69 AS = i386-elf-as
70 AR = i386-elf-ar
71 OBJCOPY = i386-elf-objcopy
72 STRIP = i386-elf-strip
73 endif
74 ifeq ($(OSTYPE),cygwin)
75 CC = i386-linux-gcc
76 LD = i386-linux-ld
77 AS = i386-linux-as
78 AR = i386-linux-ar
79 OBJCOPY = i386-linux-objcopy
80 STRIP = i386-linux-strip
81 endif
82 GLOBAL_CFLAGS = -O2
83 KERNEL_CFLAGS = -fno-pic
84 USER_CFLAGS = -fpic
85 GLOBAL_LDFLAGS =
86 LIBGCC = -lgcc
87 LIBGCC_PATH = lib/libgcc/$(ARCH)
88 endif
90 ifeq ($(ARCH),sh4)
91 CC = sh-elf-gcc
92 LD = sh-elf-ld
93 AS = sh-elf-as
94 AR = sh-elf-ar
95 OBJCOPY = sh-elf-objcopy
96 STRIP = sh-elf-strip
97 GLOBAL_CFLAGS = -ml -m4 -mhitachi -O
98 KERNEL_CFLAGS = -fno-pic
99 USER_CFLAGS = -fpic
100 GLOBAL_LDFLAGS = -EL
101 LIBGCC = -lgcc
102 LIBGCC_PATH = lib/libgcc/$(ARCH)/ml/m4-single-only
103 endif
105 ifeq ($(ARCH),sparc64)
106 CC = sparc64-elf-gcc
107 LD = sparc64-elf-ld
108 AS = sparc64-elf-as
109 AR = sparc64-elf-ar
110 OBJCOPY = sparc64-elf-objcopy
111 STRIP = sparc64-elf-strip
112 GLOBAL_CFLAGS =
113 GLOBAL_LDFLAGS =
114 LIBGCC = -lgcc
115 LIBGCC_PATH = lib/libgcc/$(ARCH)
116 endif
118 ifeq ($(ARCH),sparc)
119 ifneq ($(HOSTTYPE),sparc)
120 CC = sparc-elf-gcc
121 LD = sparc-elf-ld
122 AS = sparc-elf-as
123 AR = sparc-elf-ar
124 OBJCOPY = sparc-elf-objcopy
125 STRIP = sparc-elf-strip
126 endif
127 GLOBAL_CFLAGS =
128 GLOBAL_LDFLAGS =
129 LIBGCC = -lgcc
130 LIBGCC_PATH = lib/libgcc/$(ARCH)
131 endif
133 ifeq ($(ARCH),alpha)
134 ifneq ($(HOSTTYPE),alpha)
135 CC = alpha-elf-gcc
136 LD = alpha-elf-ld
137 AS = alpha-elf-as
138 AR = alpha-elf-ar
139 OBJCOPY = alpha-elf-objcopy
140 STRIP = alpha-elf-strip
141 endif
142 GLOBAL_CFLAGS =
143 GLOBAL_LDFLAGS =
144 LIBGCC = -lgcc
145 LIBGCC_PATH = lib/libgcc/$(ARCH)
146 endif
148 ifeq ($(ARCH),m68k)
149 ifneq ($(HOSTTYPE),m68k)
150 CC = m68k-elf-gcc
151 LD = m68k-elf-ld
152 AS = m68k-elf-as
153 AR = m68k-elf-ar
154 OBJCOPY = m68k-elf-objcopy
155 STRIP = m68k-elf-strip
156 SIZE = m68k-elf-size
157 endif
158 GLOBAL_CFLAGS = -O0 -g
159 KERNEL_CFLAGS = -fno-pic
160 USER_CFLAGS = -fpic
161 GLOBAL_LDFLAGS = -g
162 LIBGCC = -lgcc
163 LIBGCC_PATH = lib/libgcc/$(ARCH)
164 endif
166 ifeq ($(ARCH),mips)
167 ifneq ($(HOSTTYPE),mips)
168 CC = mips-elf-gcc
169 LD = mips-elf-ld
170 AS = mips-elf-as
171 AR = mips-elf-ar
172 OBJCOPY = mips-elf-objcopy
173 STRIP = mips-elf-strip
174 endif
175 GLOBAL_CFLAGS = -fno-pic -mips4 -meb -G 0
176 GLOBAL_LDFLAGS =
177 LIBGCC = -lgcc
178 LIBGCC_PATH = lib/libgcc/$(ARCH)
179 endif
181 ifeq ($(ARCH),ppc)
182 ifneq ($(HOSTTYPE),ppc)
183 CC = ppc-elf-gcc
184 LD = ppc-elf-ld
185 AS = ppc-elf-as
186 AR = ppc-elf-ar
187 OBJCOPY = ppc-elf-objcopy
188 STRIP = ppc-elf-strip
189 endif
190 GLOBAL_CFLAGS = -fno-pic -O
191 GLOBAL_LDFLAGS =
192 LIBGCC = -lgcc
193 LIBGCC_PATH = lib/libgcc/$(ARCH)
194 endif
196 OBJ_DIR = obj.$(ARCH)
198 GLOBAL_CFLAGS += -Wall -W -Wno-multichar -Wno-unused -Wmissing-prototypes -finline -nostdinc -fno-builtin -DARCH_$(ARCH) -DNEWOS=1
200 # sub makefiles are responsible for adding to these
201 DEPS =
202 CLEAN =
203 FINAL =
205 final:: final1
207 # include the top level makefile
208 include boot/$(ARCH)/boot.mk
210 BOOTMAKER_ARGS =
211 ifeq ($(ARCH),sparc)
212 BOOTMAKER_ARGS += --sparc
213 endif
215 final1: $(FINAL)
216 rm -f final.$(ARCH);ln -sf $(FINAL) final.$(ARCH)
217 rm -f system.$(ARCH);ln -sf $(KERNEL) system.$(ARCH)
219 tools: $(BOOTMAKER) $(BIN2H) $(BIN2ASM)
221 $(BOOTMAKER): $(BOOTMAKER).c tools/sparcbootblock.h
222 $(HOST_CC) -O0 -g -o $@ $(BOOTMAKER).c
224 NETBOOT_LINK_ARGS =
225 ifeq ($(OSTYPE),beos)
226 NETBOOT_LINK_ARGS = -lnet
227 endif
228 ifeq ($(shell uname),SunOS)
229 NETBOOT_LINK_ARGS = -lsocket -lnsl
230 endif
232 $(NETBOOT): $(NETBOOT).c
233 $(HOST_CC) -O3 -o $@ $(NETBOOT).c $(NETBOOT_LINK_ARGS)
235 $(BIN2ASM): $(BIN2ASM).c
236 $(HOST_CC) -O3 -o $@ $(BIN2ASM).c
238 $(BIN2H): $(BIN2H).c
239 $(HOST_CC) -O3 -o $@ $(BIN2H).c
241 toolsclean:
242 rm -f $(BOOTMAKER) $(NETBOOT) $(NETBOOT_DC) $(BIN2H) $(BIN2ASM)
244 CLEAN += toolsclean
246 clean: $(CLEAN)
247 rm -f $(KERNEL) $(FINAL)
248 rm -f final.$(ARCH) system.$(ARCH)
250 depsclean:
251 rm -f $(DEPS)
253 allclean: depsclean clean toolsclean
254 rm -f `find . -type f -name '*.d'`
255 rm -f `find . -type f -name '*.o'`
257 ifeq ($(filter $(MAKECMDGOALS), allclean), )
258 include $(DEPS)
259 endif