1LEGACY = -D_MACH_I386_THREAD_STATUS_FPSTATE_LEGACY_FIELD_NAMES_ \
2	 -D_ARCHITECTURE_I386_FPU_FPSTATE_LEGACY_FIELD_NAMES_
3
4KERN = -fno-builtin -finline -fno-keep-inline-functions -fsigned-bitfields \
5       -msoft-float -nostdinc \
6-I$(NEXT_ROOT)/System/Library/Frameworks/Kernel.framework/PrivateHeaders/libsa \
7-I$(NEXT_ROOT)/System/Library/Frameworks/Kernel.framework/PrivateHeaders \
8       -I$(NEXT_ROOT)/System/Library/Frameworks/Kernel.framework/Headers/libsa \
9       -I$(NEXT_ROOT)/System/Library/Frameworks/Kernel.framework/Headers/bsd \
10       -I$(NEXT_ROOT)/System/Library/Frameworks/Kernel.framework/Headers \
11       -DKERNEL -DKERNEL_PRIVATE -DAPPLE -DNeXT -DLIBSA_PRIVATE
12
13ifneq "" "$(SDKROOT)"
14  SDK = -isysroot $(SDKROOT)
15  CC = $(shell xcrun -find -sdk $(SDKROOT) cc)
16endif
17
18OFLAG = -Os
19LTO = -DLTO_SUPPORT
20G = -g
21CFLAGS = $(OFLAG) $(LTO) $(G) -I$(SRCROOT)/../include -Wall $(LEGACY) $(SDK)
22PG = -pg
23
24MKDIRS = /bin/mkdir -p
25SRCROOT = .
26SYMROOT = .
27OBJROOT = .
28OFILE_DIRS = $(OBJROOT)/static_obj $(OBJROOT)/dynamic_obj \
29	     $(OBJROOT)/profile_obj $(OBJROOT)/shlib_obj \
30	     $(OBJROOT)/static_kld_obj
31OFILE_DIR = $(OBJROOT)
32VPATH = $(OFILE_DIR)
33
34ifeq "$(EFITOOLS)" "efitools"
35	COFF_BYTESEX = coff_bytesex.c
36else
37	COFF_BYTESEX =
38endif
39CFILES = allocate.c errors.c arch.c execute.c bytesex.c rnd.c hppa.c \
40	  swap_headers.c reloc.c version_number.c get_toc_byte_sex.c \
41	  best_arch.c fatals.c arch_usage.c ofile.c ofile_error.c print.c \
42	  set_arch_flag_name.c seg_addr_table.c dylib_table.c \
43	  breakout.c writeout.c checkout.c fatal_arch.c ofile_get_word.c \
44	  vm_flush_cache.c hash_string.c dylib_roots.c guess_short_name.c \
45	  SymLoc.c get_arch_from_host.c crc32.c macosx_deployment_target.c \
46	  symbol_list.c unix_standard_mode.c lto.c llvm.c $(COFF_BYTESEX)
47OBJS = $(CFILES:.c=.o) apple_version.o
48INSTALL_FILES = $(CFILES) Makefile notes
49
50ifeq "$(OLD_LIBKLD)" "YES"
51	STATIC_KLD = static_kld
52else
53	STATIC_KLD = 
54endif
55
56all: $(OFILE_DIRS) $(SYMROOT) dynamic profile $(STATIC_KLD)
57
58lib_static_ofiles: $(STATIC_KLD)
59
60lib_ofiles: $(OFILE_DIRS) $(SYMROOT) dynamic
61
62lib_ofiles_install: lib_ofiles
63
64static: $(OBJROOT)/static_obj
65	@if [ $(SRCROOT) = . ];						\
66	then								\
67	    cd static_obj;						\
68		$(MAKE) -f ../Makefile libstuff.a			\
69		PRODUCT=libstuff.a					\
70		VPATH=.. 						\
71		OFILE_DIR=.						\
72		SRCROOT=..						\
73		SYMROOT=..						\
74		COPTS="-static"						\
75		OFLAG="$(OFLAG)"					\
76		CFILES="$(CFILES)"					\
77		RC_CFLAGS="$(RC_CFLAGS)"				\
78		RC_ARCHS="$(RC_ARCHS)";					\
79	else								\
80	    cd $(OBJROOT)/static_obj;					\
81		$(MAKE) -f $(SRCROOT)/Makefile libstuff.a		\
82		PRODUCT=libstuff.a					\
83		VPATH=$(SRCROOT)					\
84		OFILE_DIR=$(OBJROOT)/static_obj				\
85		SRCROOT=$(SRCROOT)					\
86		SYMROOT=$(SYMROOT)					\
87		COPTS="-static"						\
88		OFLAG="$(OFLAG)"					\
89		CFILES="$(CFILES)"					\
90		RC_CFLAGS="$(RC_CFLAGS)"				\
91		RC_ARCHS="$(RC_ARCHS)";					\
92	fi
93
94static_kld: $(OBJROOT)/static_kld_obj
95	@if [ $(SRCROOT) = . ];						\
96	then								\
97	    cd static_kld_obj;						\
98		$(MAKE) -f ../Makefile libstuff_kld.a			\
99		PRODUCT=libstuff_kld.a					\
100		VPATH=.. 						\
101		OFILE_DIR=.						\
102		SRCROOT=..						\
103		SYMROOT=..						\
104		COPTS="-static -DRLD -DSA_RLD $(KERN)"			\
105		OFLAG="$(OFLAG)"					\
106		CFILES="$(CFILES)"					\
107		RC_CFLAGS="$(RC_CFLAGS)"				\
108		RC_ARCHS="$(RC_ARCHS)";					\
109	else								\
110	    cd $(OBJROOT)/static_kld_obj;				\
111		$(MAKE) -f $(SRCROOT)/Makefile libstuff_kld.a		\
112		PRODUCT=libstuff_kld.a					\
113		VPATH=$(SRCROOT)					\
114		OFILE_DIR=$(OBJROOT)/static_kld_obj			\
115		SRCROOT=$(SRCROOT)					\
116		SYMROOT=$(SYMROOT)					\
117		COPTS="-static -DRLD -DSA_RLD $(KERN)"			\
118		OFLAG="$(OFLAG)"					\
119		CFILES="$(CFILES)"					\
120		RC_CFLAGS="$(RC_CFLAGS)"				\
121		RC_ARCHS="$(RC_ARCHS)";					\
122	fi
123
124dynamic: $(OBJROOT)/dynamic_obj
125	@if [ $(SRCROOT) = . ];						\
126	then								\
127	    cd dynamic_obj;						\
128		$(MAKE) -f ../Makefile libstuff.dylib			\
129		PRODUCT=libstuff.dylib					\
130		VPATH=.. 						\
131		OFILE_DIR=.						\
132		SRCROOT=..						\
133		SYMROOT=..						\
134		COPTS="$(DYNAMIC)"					\
135		OFLAG="$(OFLAG)"					\
136		CFILES="$(CFILES)"					\
137		RC_CFLAGS="$(RC_CFLAGS)"				\
138		RC_ARCHS="$(RC_ARCHS)";					\
139	else								\
140	    cd $(OBJROOT)/dynamic_obj;					\
141		$(MAKE) -f $(SRCROOT)/Makefile libstuff.dylib		\
142		PRODUCT=libstuff.dylib					\
143		VPATH=$(SRCROOT)					\
144		OFILE_DIR=$(OBJROOT)/dynamic_obj			\
145		SRCROOT=$(SRCROOT)					\
146		SYMROOT=$(SYMROOT)					\
147		COPTS="$(DYNAMIC)"					\
148		OFLAG="$(OFLAG)"					\
149		CFILES="$(CFILES)"					\
150		RC_CFLAGS="$(RC_CFLAGS)"				\
151		RC_ARCHS="$(RC_ARCHS)";					\
152	fi
153
154profile: $(OBJROOT)/profile_obj
155	@if [ $(SRCROOT) = . ];						\
156	then								\
157	    cd profile_obj;						\
158		$(MAKE) -f ../Makefile libstuff_p.a			\
159		PRODUCT=libstuff_p.a					\
160		VPATH=.. 						\
161		OFILE_DIR=.						\
162		SRCROOT=..						\
163		SYMROOT=..						\
164		COPTS="$(DYNAMIC) $(PG)"				\
165		OFLAG="$(OFLAG)"					\
166		RC_CFLAGS="$(RC_CFLAGS)"				\
167		RC_ARCHS="$(RC_ARCHS)";					\
168	else								\
169	    cd $(OBJROOT)/profile_obj;					\
170		$(MAKE) -f $(SRCROOT)/Makefile libstuff_p.a		\
171		PRODUCT=libstuff_p.a					\
172		VPATH=$(SRCROOT)					\
173		OFILE_DIR=$(OBJROOT)/profile_obj			\
174		SRCROOT=$(SRCROOT)					\
175		SYMROOT=$(SYMROOT)					\
176		COPTS="$(DYNAMIC) $(PG)"				\
177		OFLAG="$(OFLAG)"					\
178		RC_CFLAGS="$(RC_CFLAGS)"				\
179		RC_ARCHS="$(RC_ARCHS)";					\
180	fi
181
182shlib: $(OBJROOT)/shlib_obj
183	@if [ $(SRCROOT) = . ];						\
184	then								\
185	    cd shlib_obj;						\
186		$(MAKE) -f ../Makefile libstuff_s.a			\
187		PRODUCT=libstuff_s.a					\
188		VPATH=.. 						\
189		OFILE_DIR=.						\
190		SRCROOT=..						\
191		SYMROOT=..						\
192		COPTS="-static -DSHLIB -I/LocalDeveloper/Headers/libsys" \
193		OFLAG="$(OFLAG)"					\
194		RC_CFLAGS="$(RC_CFLAGS)"				\
195		RC_ARCHS="$(RC_ARCHS)";					\
196	else								\
197	    cd $(OBJROOT)/shlib_obj;					\
198		$(MAKE) -f $(SRCROOT)/Makefile libstuff_s.a		\
199		PRODUCT=libstuff_s.a					\
200		VPATH=$(SRCROOT)					\
201		OFILE_DIR=$(OBJROOT)/shlib_obj				\
202		SRCROOT=$(SRCROOT)					\
203		SYMROOT=$(SYMROOT)					\
204		COPTS="-static -DSHLIB -I/LocalDeveloper/Headers/libsys" \
205		OFLAG="$(OFLAG)"					\
206		RC_CFLAGS="$(RC_CFLAGS)"				\
207		RC_ARCHS="$(RC_ARCHS)";					\
208	fi
209
210$(PRODUCT):	$(OFILE_DIR) $(SYMROOT) $(OBJS)
211	libtool -static -o $(SYMROOT)/$(PRODUCT) $(OBJS)
212
213apple_version.c:
214	echo "const char apple_version[]=" > $(OFILE_DIR)/$@
215	echo "\"cctools-$(RC_ProjectSourceVersion)\";" >> $(OFILE_DIR)/$@
216
217.c.o:
218	$(CC) $(CFLAGS) $(RC_CFLAGS) $(COPTS) -c -o $(OFILE_DIR)/$*.o $<
219
220lto.o: lto.c
221	$(CC) -std=c99 $(CFLAGS) $(RC_CFLAGS) $(COPTS) -c \
222		-I/Developer/usr/local/include \
223		-I$(DT_TOOLCHAIN_DIR)/usr/local/include \
224		-o $(OFILE_DIR)/$*.o $<
225
226clean shlib_clean:
227	-rm -r -f $(OFILE_DIRS)
228	-rm -f libstuff.a libstuff.dylib libstuff_p.a libstuff_s.a
229
230install: all
231
232installsrc:
233	$(MKDIRS) $(SRCROOT)
234	chmod 755 $(SRCROOT)
235	gnutar cf - $(INSTALL_FILES) | (cd $(SRCROOT); gnutar xf -)
236	chmod 444 $(SRCROOT)/*
237
238installGASsrc:
239	$(MKDIRS) $(SRCROOT)
240	chmod 755 $(SRCROOT)
241	gnutar cf - Makefile bytesex.c rnd.c | (cd $(SRCROOT); gnutar xf -)
242	chmod 444 $(SRCROOT)/*
243
244fromGASsrc: $(OBJROOT)/dynamic_obj
245	@cd dynamic_obj;						\
246	    $(MAKE) -f ../Makefile libstuff.dylib			\
247	    PRODUCT=libstuff.dylib					\
248	    VPATH=.. 							\
249	    OFILE_DIR=.							\
250	    SRCROOT=..							\
251	    SYMROOT=..							\
252	    COPTS="$(DYNAMIC)"						\
253	    OFLAG="$(OFLAG)"						\
254	    CFILES="bytesex.c rnd.c"					\
255	    RC_CFLAGS="$(RC_CFLAGS)"					\
256	    RC_ARCHS="$(RC_ARCHS)";
257
258$(OFILE_DIRS) $(SYMROOT):
259	$(MKDIRS) $@
260