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
13ifeq "cctools_ofiles_Sim" "$(RC_ProjectName)"
14  S = _sim
15endif
16
17DEPENDENT_LIBS = -nodefaultlibs -umbrella System -L/usr/lib/system \
18		 -ldyld -lsystem_malloc -lsystem_c -lsystem_kernel -lcompiler_rt
19
20ifneq "" "$(SDKROOT)"
21  SDK = -isysroot $(SDKROOT)
22  CC = $(shell xcrun -find -sdk $(SDKROOT) cc)
23  STRIP = $(shell xcrun -find -sdk ${SDKROOT} strip)
24  DSYMUTIL = $(shell xcrun -find -sdk ${SDKROOT} dsymutil)
25else
26  STRIP = strip
27  DSYMUTIL = dsymutil
28endif
29
30OFLAG = -Os
31CFLAGS = $(OFLAG) -g -Wall $(LEGACY) \
32	 -I$(SRCROOT) -I$(SRCROOT)/../include -I$(OFILE_DIR) $(SDK)
33PG = -pg
34
35MKDIRS = /bin/mkdir -p
36SRCROOT = .
37SYMROOT = .
38OBJROOT = .
39OFILE_DIRS = $(OBJROOT)/shlib_obj $(OBJROOT)/profile_obj \
40	     $(OBJROOT)/optimized_obj $(OBJROOT)/dynamic_obj \
41	     $(OBJROOT)/ptmp_obj $(OBJROOT)/otmp_obj $(OBJROOT)/dtmp_obj \
42	     $(OBJROOT)/kld_obj $(OBJROOT)/ktmp_obj
43OFILE_DIR = $(OBJROOT)
44VPATH = $(OFILE_DIR)
45
46ARCHIVEDIR = /usr/local/lib/system
47DYLIBDIR = /usr/lib/system
48
49CFILES = arch.c getsecbyname.c getsegbyname.c get_end.c \
50	 swap.c hppa_swap.c i386_swap.c m68k_swap.c sparc_swap.c \
51	 ppc_swap.c i860_swap.c m88k_swap.c slot_name.c
52
53INSTALL_FILES = $(CFILES) $(HFILES) shlib.ofileList dylib.ofileList Makefile \
54		notes
55
56OBJS = arch.o getsecbyname.o getsegbyname.o get_end.o swap.o \
57       hppa_swap.o i386_swap.o m68k_swap.o sparc_swap.o ppc_swap.o \
58       i860_swap.o m88k_swap.o slot_name.o
59
60ifeq "$(OLD_LIBKLD)" "YES"
61	KLD_OFILES = kld_ofiles
62else
63	KLD_OFILES =
64endif
65
66all: lib_ofiles
67
68lib_ofiles: $(OFILE_DIRS) $(SYMROOT) optimized_ofiles $(KLD_OFILES) \
69	    dynamic_ofiles profile_ofiles
70
71shlib_ofiles: $(OBJROOT)/shlib_obj
72	@if [ $(SRCROOT) = . ];						\
73	then								\
74	    (cd shlib_obj;						\
75		$(MAKE) -f ../Makefile $(OBJS)				\
76		VPATH=.. 						\
77		OFILE_DIR=.						\
78		SRCROOT=..						\
79		COPTS="-static -DSHLIB -I/LocalDeveloper/Headers/libsys" \
80		LIBSTUFF="-L../../libstuff -lstuff_s"			\
81		OFLAG="$(OFLAG)"					\
82		RC_CFLAGS="$(RC_CFLAGS)"				\
83		RC_ARCHS="$(RC_ARCHS)");				\
84	    rm -f shlib_obj/libmacho.ofileList;				\
85	    cp shlib.ofileList shlib_obj/libmacho.ofileList;		\
86	else								\
87	    (cd $(OBJROOT)/shlib_obj;					\
88		$(MAKE) -f $(SRCROOT)/Makefile $(OBJS)			\
89		VPATH=$(SRCROOT)					\
90		OFILE_DIR=$(OBJROOT)/shlib_obj				\
91		SRCROOT=$(SRCROOT)					\
92		SYMROOT=$(SYMROOT)					\
93		COPTS="-static -DSHLIB -I/LocalDeveloper/Headers/libsys" \
94		LIBSTUFF="-L$(SYMROOT)/../libstuff -lstuff_s"		\
95		OFLAG="$(OFLAG)"					\
96		RC_CFLAGS="$(RC_CFLAGS)"				\
97		RC_ARCHS="$(RC_ARCHS)");				\
98	    rm -f $(OBJROOT)/shlib_obj/libmacho.ofileList;		\
99	    cp shlib.ofileList $(OBJROOT)/shlib_obj/libmacho.ofileList;	\
100	fi
101
102profile_ofiles:	$(OBJROOT)/profile_obj $(OBJROOT)/ptmp_obj
103	@if [ $(SRCROOT) = . ];						\
104	then								\
105	    (cd ptmp_obj;						\
106		$(MAKE) -f ../Makefile libmacho_pg.a libmacho$S_profile.dylib \
107		INSTALL_NAME=/usr/lib/system/libmacho$S_profile.dylib	\
108		VPATH=.. 						\
109		OFILE_DIR=.						\
110		SRCROOT=..						\
111		COPTS="-dynamic $(PG)"					\
112		LIBSTUFF="-L../../libstuff -lstuff_p"			\
113		OFLAG="$(OFLAG)"					\
114		RC_CFLAGS="$(RC_CFLAGS)"				\
115		RC_ARCHS="$(RC_ARCHS)");				\
116	    (cd profile_obj; rm -f $(OBJS));				\
117	    (cd ptmp_obj; cp $(OBJS) ../profile_obj); \
118	    rm -f dynamic_profile_obj;					\
119	    ln -s ./profile_obj dynamic_profile_obj;			\
120	    rm -f profile_obj/libmacho.ofileList;			\
121	    cp dylib.ofileList profile_obj/libmacho.ofileList;		\
122	else								\
123	    (cd $(OBJROOT)/ptmp_obj;					\
124		$(MAKE) -f $(SRCROOT)/Makefile libmacho_pg.a		\
125		libmacho$S_profile.dylib				\
126		INSTALL_NAME=/usr/lib/system/libmacho$S_profile.dylib	\
127		VPATH=$(SRCROOT)					\
128		OFILE_DIR=$(OBJROOT)/ptmp_obj				\
129		SRCROOT=$(SRCROOT)					\
130		SYMROOT=$(SYMROOT)					\
131		LIBSTUFF="-L$(SYMROOT)/../libstuff -lstuff_p"		\
132		COPTS="-dynamic $(PG)"					\
133		OFLAG="$(OFLAG)"					\
134		RC_CFLAGS="$(RC_CFLAGS)"				\
135		RC_ARCHS="$(RC_ARCHS)");				\
136	    (cd $(OBJROOT)/profile_obj; rm -f $(OBJS));			\
137	    (cd $(OBJROOT)/ptmp_obj; 					\
138		cp $(OBJS) $(OBJROOT)/profile_obj); \
139	    rm -f $(OBJROOT)/dynamic_profile_obj;			\
140	    ln -s ./profile_obj $(OBJROOT)/dynamic_profile_obj;		\
141	    rm -f $(OBJROOT)/profile_obj/libmacho.ofileList;		\
142	    cp dylib.ofileList $(OBJROOT)/profile_obj/libmacho.ofileList; \
143	fi
144
145optimized_ofiles: $(OBJROOT)/optimized_obj $(OBJROOT)/otmp_obj
146	@if [ $(SRCROOT) = . ];						\
147	then								\
148	    (cd otmp_obj;						\
149		$(MAKE) -f ../Makefile libmacho_static.a		\
150		VPATH=.. 						\
151		OFILE_DIR=.						\
152		SRCROOT=..						\
153		COPTS="-static"						\
154		LIBSTUFF="-L../../libstuff -lstuff"			\
155		OFLAG="$(OFLAG)"					\
156		RC_CFLAGS="$(RC_CFLAGS)"				\
157		RC_ARCHS="$(RC_ARCHS)");				\
158	    (cd optimized_obj; rm -f $(OBJS));				\
159	    (cd otmp_obj; cp $(OBJS) ../optimized_obj); 		\
160	    rm -f static_obj;						\
161	    ln -s ./optimized_obj static_obj;				\
162	    rm -f optimized_obj/libmacho.ofileList;			\
163	    cp dylib.ofileList optimized_obj/libmacho.ofileList;	\
164	else								\
165	    (cd $(OBJROOT)/otmp_obj;					\
166		$(MAKE) -f $(SRCROOT)/Makefile libmacho_static.a	\
167		VPATH=$(SRCROOT)					\
168		OFILE_DIR=$(OBJROOT)/otmp_obj				\
169		SRCROOT=$(SRCROOT)					\
170		SYMROOT=$(SYMROOT)					\
171		COPTS="-static"						\
172		LIBSTUFF="-L$(SYMROOT)/../libstuff -lstuff"		\
173		OFLAG="$(OFLAG)"					\
174		RC_CFLAGS="$(RC_CFLAGS)"				\
175		RC_ARCHS="$(RC_ARCHS)");				\
176	    (cd $(OBJROOT)/optimized_obj; rm -f $(OBJS));		\
177	    (cd $(OBJROOT)/otmp_obj; 					\
178		cp $(OBJS) $(OBJROOT)/optimized_obj); 			\
179	    rm -f $(OBJROOT)/static_obj;				\
180	    ln -s ./optimized_obj $(OBJROOT)/static_obj;		\
181	    rm -f $(OBJROOT)/optimized_obj/libmacho.ofileList;		\
182	    cp dylib.ofileList $(OBJROOT)/optimized_obj/libmacho.ofileList; \
183	fi
184
185kld_ofiles: $(OBJROOT)/kld_obj $(OBJROOT)/ktmp_obj
186	@if [ $(SRCROOT) = . ];						\
187	then								\
188	    (cd ktmp_obj;						\
189		$(MAKE) -f ../Makefile libmacho_kld.a			\
190		VPATH=.. 						\
191		OFILE_DIR=.						\
192		SRCROOT=..						\
193		COPTS="-static -DRLD -DSA_RLD $(KERN)"			\
194		LIBSTUFF="-L../../libstuff -lstuff_kld"			\
195		OFLAG="$(OFLAG)"					\
196		RC_CFLAGS="$(RC_CFLAGS)"				\
197		RC_ARCHS="$(RC_ARCHS)");				\
198	    (cd kld_obj; rm -f $(OBJS));				\
199	    (cd ktmp_obj; cp $(OBJS) ../kld_obj); 			\
200	else								\
201	    (cd $(OBJROOT)/ktmp_obj;					\
202		$(MAKE) -f $(SRCROOT)/Makefile libmacho_kld.a		\
203		VPATH=$(SRCROOT)					\
204		OFILE_DIR=$(OBJROOT)/ktmp_obj				\
205		SRCROOT=$(SRCROOT)					\
206		SYMROOT=$(SYMROOT)					\
207		COPTS="-static -DRLD -DSA_RLD $(KERN)"			\
208		LIBSTUFF="-L$(SYMROOT)/../libstuff -lstuff_kld"		\
209		OFLAG="$(OFLAG)"					\
210		RC_CFLAGS="$(RC_CFLAGS)"				\
211		RC_ARCHS="$(RC_ARCHS)");				\
212	    (cd $(OBJROOT)/kld_obj; rm -f $(OBJS));			\
213	    (cd $(OBJROOT)/ktmp_obj; 					\
214		cp $(OBJS) $(OBJROOT)/kld_obj); 			\
215	fi
216
217dynamic_ofiles: $(OBJROOT)/dynamic_obj $(OBJROOT)/dtmp_obj
218	@if [ $(SRCROOT) = . ];						\
219	then								\
220	    (cd dtmp_obj;						\
221		$(MAKE) -f ../Makefile libmacho.a libmacho$S.dylib	\
222		INSTALL_NAME=/usr/lib/system/libmacho$S.dylib		\
223		VPATH=.. 						\
224		OFILE_DIR=.						\
225		SRCROOT=..						\
226		COPTS="-dynamic"					\
227		LIBSTUFF="-L../../libstuff -lstuff"			\
228		OFLAG="$(OFLAG)"					\
229		RC_CFLAGS="$(RC_CFLAGS)"				\
230		RC_ARCHS="$(RC_ARCHS)");				\
231	    (cd dtmp_obj;						\
232		$(MAKE) -f ../Makefile libmacho$S_debug.dylib		\
233		INSTALL_NAME=/usr/lib/system/libmacho$S_debug.dylib	\
234		VPATH=.. 						\
235		OFILE_DIR=.						\
236		SRCROOT=..						\
237		COPTS="-dynamic"					\
238		LIBSTUFF="-L../../libstuff -lstuff"			\
239		OFLAG="$(OFLAG)"					\
240		RC_CFLAGS="$(RC_CFLAGS)"				\
241		RC_ARCHS="$(RC_ARCHS)");				\
242	    (cd dynamic_obj; rm -f $(OBJS));				\
243	    (cd dtmp_obj; cp $(OBJS) ../dynamic_obj); 			\
244	    rm -f dynamic_obj/libmacho.ofileList;			\
245	    cp dylib.ofileList dynamic_obj/libmacho.ofileList;		\
246	else								\
247	    (cd $(OBJROOT)/dtmp_obj;					\
248		$(MAKE) -f $(SRCROOT)/Makefile libmacho.a libmacho$S.dylib \
249		INSTALL_NAME=/usr/lib/system/libmacho$S.dylib		\
250		VPATH=$(SRCROOT)					\
251		OFILE_DIR=$(OBJROOT)/dtmp_obj				\
252		SRCROOT=$(SRCROOT)					\
253		SYMROOT=$(SYMROOT)					\
254		LIBSTUFF="-L$(SYMROOT)/../libstuff -lstuff"		\
255		COPTS="-dynamic"					\
256		OFLAG="$(OFLAG)"					\
257		RC_CFLAGS="$(RC_CFLAGS)"				\
258		RC_ARCHS="$(RC_ARCHS)");				\
259	    (cd $(OBJROOT)/dtmp_obj;					\
260		$(MAKE) -f $(SRCROOT)/Makefile libmacho$S_debug.dylib	\
261		INSTALL_NAME=/usr/lib/system/libmacho$S_debug.dylib	\
262		VPATH=$(SRCROOT)					\
263		OFILE_DIR=$(OBJROOT)/dtmp_obj				\
264		SRCROOT=$(SRCROOT)					\
265		SYMROOT=$(SYMROOT)					\
266		LIBSTUFF="-L$(SYMROOT)/../libstuff -lstuff"		\
267		COPTS="-dynamic"					\
268		OFLAG="$(OFLAG)"					\
269		RC_CFLAGS="$(RC_CFLAGS)"				\
270		RC_ARCHS="$(RC_ARCHS)");				\
271	    (cd $(OBJROOT)/dynamic_obj; rm -f $(OBJS));			\
272	    (cd $(OBJROOT)/dtmp_obj;					\
273		cp $(OBJS) $(OBJROOT)/dynamic_obj); 			\
274	    rm -f $(OBJROOT)/dynamic_obj/libmacho.ofileList;		\
275	    cp dylib.ofileList $(OBJROOT)/dynamic_obj/libmacho.ofileList; \
276	fi
277
278.c.o:
279	$(CC) $(CFLAGS) $(RC_CFLAGS) $(COPTS) -c -o $(OFILE_DIR)/$*.o $<
280
281clean:
282	-rm -r -f $(OFILE_DIRS) $(OBJROOT)/static_obj
283
284shlib_clean:
285	-rm -r -f $(OBJROOT)/ptmp_obj $(OBJROOT)/otmp_obj $(OBJROOT)/dtmp_obj
286
287libmacho.a libmacho_pg.a libmacho_static.a libmacho_kld.a: $(OBJS)
288	libtool -static -o $(SYMROOT)/$@ $(OBJS)
289
290libmacho$S.dylib libmacho$S_profile.dylib libmacho$S_debug.dylib: $(OBJS)
291	$(CC) $(CFLAGS) $(RC_CFLAGS) -dynamiclib  \
292		-o $(SYMROOT)/$@ $(OBJS) \
293		-install_name $(INSTALL_NAME) \
294		-compatibility_version 1 \
295		-current_version $(RC_ProjectSourceVersion) \
296		$(DEPENDENT_LIBS)
297	$(DSYMUTIL) $(SYMROOT)/$@
298
299install:
300
301lib_ofiles_install: all
302	$(MKDIRS) $(DSTROOT)$(ARCHIVEDIR) $(DSTROOT)$(DYLIBDIR)
303	@if [ $(SRCROOT) = . ];						\
304	then								\
305	    install -c -m 444 dtmp_obj/libmacho.a			\
306		     $(DSTROOT)$(ARCHIVEDIR)/libmacho.a;		\
307	    ranlib $(DSTROOT)$(ARCHIVEDIR)/libmacho.a;			\
308	    (cd $(DSTROOT)$(ARCHIVEDIR) ;				\
309	    rm -f libmacho_debug.a ; ln -s libmacho.a libmacho_debug.a); \
310	    install -c -m 444 ptmp_obj/libmacho_pg.a			 \
311		     $(DSTROOT)$(ARCHIVEDIR)/libmacho_profile.a;	\
312	    ranlib $(DSTROOT)$(ARCHIVEDIR)/libmacho_profile.a;		\
313	    install -c -m 444 otmp_obj/libmacho_static.a		\
314		     $(DSTROOT)$(ARCHIVEDIR)/libmacho_static.a;		\
315	    ranlib $(DSTROOT)$(ARCHIVEDIR)/libmacho_static.a;		\
316	    install -c -m 555 dtmp_obj/libmacho$S.dylib			\
317		     $(DSTROOT)$(DYLIBDIR)/libmacho$S.dylib;		\
318	    $(STRIP) -S $(DSTROOT)$(DYLIBDIR)/libmacho$S.dylib;		\
319	    install -c -m 555 dtmp_obj/libmacho$S_profile.dylib		\
320		     $(DSTROOT)$(DYLIBDIR)/libmacho$S_profile.dylib;	\
321	    $(STRIP) -S $(DSTROOT)$(DYLIBDIR)/libmacho$S_profile.dylib;	\
322	    install -c -m 555 dtmp_obj/libmacho$S_debug.dylib		\
323		     $(DSTROOT)$(DYLIBDIR)/libmacho$S_debug.dylib;	\
324	    $(STRIP) -S $(DSTROOT)$(DYLIBDIR)/libmacho$S_debug.dylib;	\
325	else								\
326	    install -c -m 444 $(SYMROOT)/libmacho.a			\
327		     $(DSTROOT)$(ARCHIVEDIR)/libmacho.a;		\
328	    ranlib $(DSTROOT)$(ARCHIVEDIR)/libmacho.a;			\
329	    (cd $(DSTROOT)$(ARCHIVEDIR) ;				\
330	    rm -f libmacho_debug.a ; ln -s libmacho.a libmacho_debug.a); \
331	    install -c -m 444 $(SYMROOT)/libmacho_pg.a			 \
332		     $(DSTROOT)$(ARCHIVEDIR)/libmacho_profile.a;	\
333	    ranlib $(DSTROOT)$(ARCHIVEDIR)/libmacho_profile.a;		\
334	    install -c -m 444 $(SYMROOT)/libmacho_static.a		\
335		     $(DSTROOT)$(ARCHIVEDIR)/libmacho_static.a;		\
336	    ranlib $(DSTROOT)$(ARCHIVEDIR)/libmacho_static.a;		\
337	    install -c -m 555 $(SYMROOT)/libmacho$S.dylib		\
338		     $(DSTROOT)$(DYLIBDIR)/libmacho$S.dylib;		\
339	    $(STRIP) -S $(DSTROOT)$(DYLIBDIR)/libmacho$S.dylib;		\
340	    install -c -m 555 $(SYMROOT)/libmacho$S_profile.dylib	\
341		     $(DSTROOT)$(DYLIBDIR)/libmacho$S_profile.dylib;	\
342	    $(STRIP) -S $(DSTROOT)$(DYLIBDIR)/libmacho$S_profile.dylib;	\
343	    install -c -m 555 $(SYMROOT)/libmacho$S_debug.dylib	\
344		     $(DSTROOT)$(DYLIBDIR)/libmacho$S_debug.dylib;	\
345	    $(STRIP) -S $(DSTROOT)$(DYLIBDIR)/libmacho$S_debug.dylib;	\
346	fi
347
348installsrc:
349	$(MKDIRS) $(SRCROOT)
350	chmod 755 $(SRCROOT)
351	gnutar cf - $(INSTALL_FILES) | (cd $(SRCROOT); gnutar xf -)
352	chmod 444 $(SRCROOT)/*
353
354$(OFILE_DIRS) $(SYMROOT):
355	$(MKDIRS) $@
356