]> git.saurik.com Git - apple/objc4.git/blame - Makefile
objc4-371.tar.gz
[apple/objc4.git] / Makefile
CommitLineData
1f20c7a7 1# use LDFLAGS not LFLAGS
13d88034 2#
1f20c7a7 3# Simple makefile for building objc4 on Darwin
13d88034 4#
1f20c7a7 5# These make variables (or environment variables) are used
2bfd4448 6# when defined:
1f20c7a7
A
7# SRCROOT path location of root of source hierarchy;
8# defaults to ".", but must be set to a
9# destination path for installsrc target.
10# OBJROOT path location where .o files will be put;
11# defaults to SRCROOT.
12# SYMROOT path location where build products will be
13# put; defaults to SRCROOT.
14# DSTROOT path location where installed products will
15# be put; defaults to / .
16# OBJROOT and SYMROOT should not be directories shared with other
17# built projects.
18# PLATFORM name of platform being built on
19# USER name of user building the project
20# ARCHS list of archs for which to build
21# RC_ARCHS more archs for which to build (build system)
22# OTHER_CFLAGS other flags to be passed to compiler
23# RC_CFLAGS more flags to be passed to compiler (build system)
24# OTHER_LDFLAGS other flags to be passed to the link stage
13d88034 25#
1f20c7a7
A
26
27# Default targets
28default: build
29all: build
30
b3962a83
A
31test:
32 make -C test
33
1f20c7a7 34.SUFFIXES:
b3962a83 35.PHONY: default all test build optimized debug profile installsrc installhdrs install clean prebuild build-optimized build-debug build-profile prebuild-optimized prebuild-debug prebuild-profile compile-optimized compile-debug compile-profile link-optimized link-debug link-profile postbuild
1f20c7a7 36
390d5862 37CURRENT_PROJECT_VERSION = 227
1f20c7a7
A
38
39VERSION_NAME = A
40
41# First figure out the platform if not specified, so we can use it in the
42# rest of this file. Currently defined values: Darwin
43ifeq "$(PLATFORM)" ""
44PLATFORM := $(shell uname)
45endif
46
47ifndef SRCROOT
48SRCROOT = .
49endif
50
51ifndef OBJROOT
52OBJROOT = $(SRCROOT)
53endif
54
55ifndef SYMROOT
56SYMROOT = $(SRCROOT)
57endif
58
59ifndef DSTROOT
60DSTROOT = /
61endif
62
63ifeq "$(PLATFORM)" "Darwin"
64CC = /usr/bin/cc
65else
66CC = /usr/bin/gcc
67endif
68
69ECHO = @/bin/echo
70MKDIRS = /bin/mkdir -p
71CD = cd
72COPY = /bin/cp
73COPY_RECUR = /bin/cp -r
74REMOVE = /bin/rm
75REMOVE_RECUR = /bin/rm -rf
76SYMLINK = /bin/ln -s
77CHMOD = /bin/chmod
78CHOWN = /usr/sbin/chown
79TAR = /usr/bin/tar
80STRIP = /usr/bin/strip
81NMEDIT = /usr/bin/nmedit
2bfd4448 82LIPO = /usr/bin/lipo
1f20c7a7
A
83
84ifeq "$(PLATFORM)" "Darwin"
b3962a83 85WARNING_FLAGS = -Wall -Wno-four-char-constants -Wshorten-64-to-32 -Wno-deprecated-declarations
1f20c7a7
A
86endif
87
88ARCH_LIST=
89ifeq "$(PLATFORM)" "Darwin"
90
91ifneq "$(ARCHS)" ""
92ARCH_LIST += $(ARCHS)
93else
94ifneq "$(RC_ARCHS)" ""
95ARCH_LIST += $(RC_ARCHS)
96else
390d5862 97ARCH_LIST += $(shell /usr/bin/arch)
1f20c7a7
A
98endif
99endif
100
101ARCH_FLAGS = $(foreach A, $(ARCH_LIST), $(addprefix -arch , $(A)))
102
103endif
104
105
2bfd4448 106ifeq "$(ORDERFILE)" ""
bf52b13b 107ORDERFILE = $(SRCROOT)/libobjc.order
2bfd4448
A
108endif
109ifneq "$(ORDERFILE)" ""
b3962a83 110ORDER = -Wl,-order_file,$(ORDERFILE)
2bfd4448
A
111else
112ORDER =
113endif
1f20c7a7
A
114
115ifeq "$(USER)" ""
116USER = unknown
117endif
118
b3962a83 119CFLAGS = -g -fno-common -fdollars-in-identifiers -pipe $(PLATFORM_CFLAGS) $(WARNING_FLAGS) -I$(SYMROOT) -I. -I$(SYMROOT)/ProjectHeaders
2bfd4448 120LDFLAGS =
1f20c7a7
A
121
122LIBRARY_EXT = .dylib
123
124PUBLIC_HEADER_INSTALLDIR = usr/include/objc
125OTHER_HEADER_INSTALLDIR = usr/local/include/objc
126INSTALLDIR = usr/lib
127
128ifeq "$(PLATFORM)" "Darwin"
2bfd4448 129LDFLAGS += -dynamiclib -dynamic -compatibility_version 1 -current_version $(CURRENT_PROJECT_VERSION)
1f20c7a7
A
130endif
131
b3962a83
A
132ifeq "$(PLATFORM)" "Darwin"
133# GC flags
134LDFLAGS += -lauto
135#CFLAGS += -fobjc-gc -Wassign-intercept
136endif
2bfd4448 137
1f20c7a7
A
138CFLAGS += $(OTHER_CFLAGS) $(RC_CFLAGS)
139LDFLAGS += $(OTHER_LDFLAGS)
140
141ifndef OPTIMIZATION_CFLAGS
b3962a83 142OPTIMIZATION_CFLAGS = -Os -DNDEBUG
1f20c7a7
A
143endif
144ifndef DEBUG_CFLAGS
145DEBUG_CFLAGS = -DDEBUG
146endif
147ifndef PROFILE_CFLAGS
b3962a83 148PROFILE_CFLAGS = -DPROFILE -pg -Os -DNDEBUG
1f20c7a7
A
149endif
150
2bfd4448
A
151CFLAGS_OPTIMIZED = $(OPTIMIZATION_CFLAGS) $(CFLAGS)
152CFLAGS_DEBUG = $(DEBUG_CFLAGS) $(CFLAGS)
153CFLAGS_PROFILE = $(PROFILE_CFLAGS) $(CFLAGS)
1f20c7a7 154
390d5862 155LDFLAGS_OPTIMIZED = $(LDFLAGS) -g
1f20c7a7
A
156LDFLAGS_DEBUG = $(LDFLAGS) -g
157LDFLAGS_PROFILE = $(LDFLAGS) -g -pg
158
b3962a83 159SUBDIRS = . runtime runtime/OldClasses.subproj runtime/Messengers.subproj runtime/Accessors.subproj runtime/Auto.subproj
1f20c7a7
A
160
161# files to compile
162SOURCES=
2bfd4448
A
163# files to compile into separate linker modules
164MODULE_SOURCES=
1f20c7a7
A
165# files to not compile
166OTHER_SOURCES=
167# headers to install in /usr/include/objc
168PUBLIC_HEADERS=
809271e4
A
169# headers that don't get installed
170PRIVATE_HEADERS=
171# headers to install in /usr/local/include/objc
172OTHER_HEADERS=
173
174# runtime
175SOURCES += $(addprefix runtime/, \
b3962a83
A
176 Object.m Protocol.m hashtable2.m maptable.m objc-class.m \
177 objc-errors.m objc-cache.m objc-initialize.m \
178 objc-file.m objc-load.m objc-runtime.m objc-sel.m \
809271e4 179 objc-sync.m objc-exception.m objc-auto.m objc-sel-set.m objc-rtp.m \
b3962a83
A
180 objc-layout.m objc-loadmethod.m objc-class-old.m objc-runtime-old.m \
181 objc-runtime-new.m objc-typeencoding.m objc-lockdebug.m \
182 phash.m lookupa.m \
809271e4
A
183 )
184PUBLIC_HEADERS += $(addprefix runtime/, \
b3962a83
A
185 objc.h runtime.h message.h \
186 objc-class.h objc-api.h objc-load.h objc-runtime.h Object.h \
187 objc-sync.h objc-exception.h objc-auto.h \
809271e4
A
188 Protocol.h error.h hashtable2.h \
189 )
b3962a83
A
190PRIVATE_HEADERS += $(addprefix runtime/, \
191 objc-private.h objc-config.h objc-sel-table.h objc-sel-set.h \
192 objc-rtp.h objc-initialize.h objc-loadmethod.h objc-runtime-new.h \
193 phash.h lookupa.h standard.h \
194 )
809271e4
A
195OTHER_HEADERS += runtime/maptable.h runtime/objc-auto.h
196
197# OldClasses
198SOURCES += runtime/OldClasses.subproj/List.m
199PUBLIC_HEADERS += runtime/OldClasses.subproj/List.h
200
201# Messengers
202SOURCES += runtime/Messengers.subproj/objc-msg.s
b3962a83
A
203OTHER_SOURCES += runtime/Messengers.subproj/objc-msg-ppc.s runtime/Messengers.subproj/objc-msg-ppc64.s runtime/Messengers.subproj/objc-msg-i386.s runtime/Messengers.subproj/objc-msg-x86_64.s
204
205# Property Accessors
206SOURCES += runtime/Accessors.subproj/objc-accessors.m runtime/Accessors.subproj/objc-accessors-arch.s
207PRIVATE_HEADERS += runtime/Accessors.subproj/objc-accessors.h runtime/Accessors.subproj/objc-accessors-table.h
208OTHER_SOURCES += runtime/Accessors.subproj/objc-accessors-ppc.s runtime/Accessors.subproj/objc-accessors-ppc64.s
209OTHER_SOURCES += runtime/Accessors.subproj/objc-accessors-i386.s runtime/Accessors.subproj/objc-accessors-x86_64.s
809271e4
A
210
211# Auto support
212SOURCES += runtime/Auto.subproj/objc-auto.s
b3962a83 213OTHER_SOURCES += runtime/Auto.subproj/objc-auto-ppc.s runtime/Auto.subproj/objc-auto-ppc64.s runtime/Auto.subproj/objc-auto-i386.s runtime/Auto.subproj/objc-auto-x86_64.s
809271e4
A
214
215# RTP symbols for gdb
216# See also $(OBJROOT)/runtime/objc-rtp-sym.ppc.o rule below.
217OTHER_SOURCES += runtime/objc-rtp-sym.s
218
219# Interposing support.
220# This code is built into a second module so dyld's function interposing
221# can manipulate the calls.
222MODULE_SOURCES += runtime/Messengers.subproj/objc-msg-stub.s
b3962a83 223OTHER_SOURCES += runtime/Messengers.subproj/objc-msg-stub-ppc.s runtime/Messengers.subproj/objc-msg-stub-ppc64.s runtime/Messengers.subproj/objc-msg-stub-i386.s runtime/Messengers.subproj/objc-msg-stub-x86_64.s
809271e4
A
224
225# project root
b3962a83
A
226OTHER_SOURCES += Makefile APPLE_LICENSE libobjc.order
227
228# The GC Mark tool that marks our .o files as if they had been compiled with write-barriers
229OTHER_SOURCES += markgc.c
230MARKGC = $(OBJROOT)/markgc
231
809271e4
A
232
233OBJECTS = $(addprefix $(OBJROOT)/, $(addsuffix .o, $(basename $(SOURCES) ) ) )
234OBJECTS_OPTIMIZED = $(OBJECTS:.o=.opt.o)
235OBJECTS_DEBUG = $(OBJECTS:.o=.debug.o)
236OBJECTS_PROFILE = $(OBJECTS:.o=.profile.o)
237
238MODULE_OBJECTS = $(addprefix $(OBJROOT)/, $(addsuffix .o, $(basename $(MODULE_SOURCES) ) ) )
239MODULE_OBJECTS_OPTIMIZED = $(MODULE_OBJECTS:.o=.opt.o)
240MODULE_OBJECTS_DEBUG = $(MODULE_OBJECTS:.o=.debug.o)
241MODULE_OBJECTS_PROFILE = $(MODULE_OBJECTS:.o=.profile.o)
242
243# For simplicity, each object target depends on all objc headers. Most of
244# them come close to requiring this anyway, and rebuild from scratch is fast.
245DEPEND_HEADERS = $(addprefix $(SRCROOT)/, \
246 $(PUBLIC_HEADERS) $(PRIVATE_HEADERS) $(OTHER_HEADERS) )
247
b3962a83 248$(OBJROOT)/%.opt.o : $(SRCROOT)/%.m $(DEPEND_HEADERS) $(MARKGC)
809271e4 249 $(SILENT) $(ECHO) " ... $<"
b3962a83
A
250 $(SILENT) $(CC) $(ARCH_FLAGS) $(CFLAGS_OPTIMIZED) "$<" -c -o "$@"
251 $(SILENT) $(MARKGC) -p "$@"
809271e4 252
b3962a83 253$(OBJROOT)/%.debug.o : $(SRCROOT)/%.m $(DEPEND_HEADERS) $(MARKGC)
809271e4 254 $(SILENT) $(ECHO) " ... $<"
b3962a83
A
255 $(SILENT) $(CC) $(ARCH_FLAGS) $(CFLAGS_DEBUG) "$<" -c -o "$@"
256 $(SILENT) $(MARKGC) -p "$@"
809271e4 257
b3962a83 258$(OBJROOT)/%.profile.o : $(SRCROOT)/%.m $(DEPEND_HEADERS) $(MARKGC)
809271e4 259 $(SILENT) $(ECHO) " ... $<"
b3962a83
A
260 $(SILENT) $(CC) $(ARCH_FLAGS) $(CFLAGS_PROFILE) "$<" -c -o "$@"
261 $(SILENT) $(MARKGC) -p "$@"
809271e4
A
262
263$(OBJROOT)/%.opt.o : $(SRCROOT)/%.c $(DEPEND_HEADERS)
264 $(SILENT) $(ECHO) " ... $<"
b3962a83 265 $(SILENT) $(CC) $(ARCH_FLAGS) $(CFLAGS_OPTIMIZED) "$<" -c -o "$@"
809271e4
A
266
267$(OBJROOT)/%.debug.o : $(SRCROOT)/%.c $(DEPEND_HEADERS)
268 $(SILENT) $(ECHO) " ... $<"
b3962a83 269 $(SILENT) $(CC) $(ARCH_FLAGS) $(CFLAGS_DEBUG) "$<" -c -o "$@"
809271e4
A
270
271$(OBJROOT)/%.profile.o : $(SRCROOT)/%.c $(DEPEND_HEADERS)
272 $(SILENT) $(ECHO) " ... $<"
b3962a83 273 $(SILENT) $(CC) $(ARCH_FLAGS) $(CFLAGS_PROFILE) "$<" -c -o "$@"
809271e4
A
274
275$(OBJROOT)/%.opt.o : $(SRCROOT)/%.s $(DEPEND_HEADERS)
276 $(SILENT) $(ECHO) " ... $<"
b3962a83 277 $(SILENT) $(CC) $(ARCH_FLAGS) $(CFLAGS_OPTIMIZED) "$<" -c -o "$@"
809271e4
A
278
279$(OBJROOT)/%.debug.o : $(SRCROOT)/%.s $(DEPEND_HEADERS)
280 $(SILENT) $(ECHO) " ... $<"
b3962a83 281 $(SILENT) $(CC) $(ARCH_FLAGS) $(CFLAGS_DEBUG) "$<" -c -o "$@"
809271e4
A
282
283$(OBJROOT)/%.profile.o : $(SRCROOT)/%.s $(DEPEND_HEADERS)
284 $(SILENT) $(ECHO) " ... $<"
b3962a83 285 $(SILENT) $(CC) $(ARCH_FLAGS) $(CFLAGS_PROFILE) "$<" -c -o "$@"
809271e4
A
286
287# Additional dependency: objc-msg.s depends on objc-msg-ppc.s and
288# objc-msg-i386.s, which it includes.
289$(OBJROOT)/runtime/Messengers.subproj/objc-msg.opt.o \
290$(OBJROOT)/runtime/Messengers.subproj/objc-msg.debug.o \
291$(OBJROOT)/runtime/Messengers.subproj/objc-msg.profile.o : \
292 $(SRCROOT)/runtime/Messengers.subproj/objc-msg-ppc.s \
b3962a83
A
293 $(SRCROOT)/runtime/Messengers.subproj/objc-msg-ppc64.s \
294 $(SRCROOT)/runtime/Messengers.subproj/objc-msg-i386.s \
295 $(SRCROOT)/runtime/Messengers.subproj/objc-msg-x86_64.s
809271e4
A
296
297# Additional dependency: objc-msg-sutb.s depends on objc-msg-stub-ppc.s and
298# objc-msg-stub-i386.s, which it includes.
299$(OBJROOT)/runtime/Messengers.subproj/objc-msg-stub.opt.o \
300$(OBJROOT)/runtime/Messengers.subproj/objc-msg-stub.debug.o \
301$(OBJROOT)/runtime/Messengers.subproj/objc-msg-stub.profile.o : \
302 $(SRCROOT)/runtime/Messengers.subproj/objc-msg-stub-ppc.s \
b3962a83
A
303 $(SRCROOT)/runtime/Messengers.subproj/objc-msg-stub-ppc64.s \
304 $(SRCROOT)/runtime/Messengers.subproj/objc-msg-stub-i386.s \
305 $(SRCROOT)/runtime/Messengers.subproj/objc-msg-stub-x86_64.s
809271e4
A
306
307# Additional dependency: objc-auto.s depends on objc-auto-ppc.s and
308# objc-auto-i386.s, which it includes.
309$(OBJROOT)/runtime/Auto.subproj/objc-auto.opt.o \
310$(OBJROOT)/runtime/Auto.subproj/objc-auto.debug.o \
311$(OBJROOT)/runtime/Auto.subproj/objc-auto.profile.o : \
312 $(SRCROOT)/runtime/Auto.subproj/objc-auto-ppc.s \
b3962a83
A
313 $(SRCROOT)/runtime/Auto.subproj/objc-auto-ppc64.s \
314 $(SRCROOT)/runtime/Auto.subproj/objc-auto-i386.s \
315 $(SRCROOT)/runtime/Auto.subproj/objc-auto-x86_64.s
809271e4
A
316
317# Additional rules: objc-rtp-sym.s needs to be built with a per-arch seg1addr,
318# and need to be stripped here because stripping the dylib does not remove
319# debug info from the magic sections.
320# objc-rtp-sym.s is not in SOURCES, and objc-rtp-sym.o is not in OBJECTS
321$(OBJROOT)/runtime/objc-rtp-sym.ppc.o: $(SRCROOT)/runtime/objc-rtp-sym.s
322 $(SILENT) $(CC) $(CFLAGS_OPTIMIZED) -arch ppc "$<" -c -o "$@.temp"
323 $(SILENT) $(STRIP) -S "$@.temp"
324 $(SILENT) $(LD) -arch ppc -seg1addr 0xfffec000 "$@.temp" -r -o "$@"
325
b3962a83
A
326$(OBJROOT)/runtime/objc-rtp-sym.ppc64.o: $(SRCROOT)/runtime/objc-rtp-sym.s
327 $(SILENT) $(CC) $(CFLAGS_OPTIMIZED) -arch ppc64 "$<" -c -o "$@.temp"
328 $(SILENT) $(STRIP) -S "$@.temp"
329 $(SILENT) $(LD) -arch ppc64 -seg1addr 0xfffffffffffec000 "$@.temp" -r -o "$@"
330
809271e4
A
331$(OBJROOT)/runtime/objc-rtp-sym.i386.o: $(SRCROOT)/runtime/objc-rtp-sym.s
332 $(SILENT) $(CC) $(CFLAGS_OPTIMIZED) -arch i386 "$<" -c -o "$@.temp"
333 $(SILENT) $(STRIP) -S "$@.temp"
334 $(SILENT) $(LD) -arch i386 -seg1addr 0xfffe8000 "$@.temp" -r -o "$@"
335
b3962a83
A
336$(OBJROOT)/runtime/objc-rtp-sym.x86_64.o: $(SRCROOT)/runtime/objc-rtp-sym.s
337 $(SILENT) $(CC) $(CFLAGS_OPTIMIZED) -arch x86_64 "$<" -c -o "$@.temp"
338 $(SILENT) $(STRIP) -S "$@.temp"
339 $(SILENT) $(LD) -arch x86_64 -seg1addr 0xfffffffffffec000 "$@.temp" -r -o "$@"
340
341# Additional rule: markgc tool to pretend we compiled with GC write-barriers
342$(MARKGC): $(SRCROOT)/markgc.c
343 $(SILENT) $(ECHO) "Building markgc tool ..."
344 $(SILENT) $(CC) -std=gnu99 "$<" -o "$@"
345
346# Additional linkage: LP64 targets require libstdc++
347LIBS_ppc64 = -lstdc++
348LIBS_x86_64 = -lstdc++
809271e4
A
349
350# These are the main targets:
351# build builds the library to OBJROOT and SYMROOT
352# installsrc copies the sources to SRCROOT
353# installhdrs install only the headers to DSTROOT
354# install build, then install the headers and library to DSTROOT
355# clean removes build products in OBJROOT and SYMROOT
356#
357# optimized same as 'build' but builds optimized library only
358# debug same as 'build' but builds debug library only
359# profile same as 'build' but builds profile library only
360
361# Default build doesn't currently build the debug library.
362build: prebuild build-optimized build-profile postbuild
363
364optimized: prebuild build-optimized postbuild
365debug: prebuild build-debug postbuild
366profile: prebuild build-profile postbuild
367
368installsrc:
369 $(SILENT) $(ECHO) "Installing source from . to $(SRCROOT)..."
370ifeq "$(SRCROOT)" "."
371 $(SILENT) $(ECHO) "SRCROOT must be defined to be the destination directory; it cannot be '.'"
372 exit 1
373endif
374 $(SILENT) $(TAR) -cf $(SRCROOT)/objc4.sources.tar $(SOURCES) $(PUBLIC_HEADERS) $(PRIVATE_HEADERS) $(OTHER_HEADERS) $(OTHER_SOURCES) $(MODULE_SOURCES)
375 $(SILENT) $(CD) $(SRCROOT) && $(TAR) -xf $(SRCROOT)/objc4.sources.tar
376 $(SILENT) $(REMOVE) -f $(SRCROOT)/objc4.sources.tar
377
378installhdrs:
379 $(SILENT) $(ECHO) "Installing headers from $(SRCROOT) to $(DSTROOT)/$(HEADER_INSTALLDIR)..."
380
381 $(SILENT) $(MKDIRS) $(DSTROOT)/$(PUBLIC_HEADER_INSTALLDIR)
382 -$(SILENT) $(CHMOD) +w $(DSTROOT)/$(PUBLIC_HEADER_INSTALLDIR)/*.h
383 $(SILENT) $(COPY) $(addprefix $(SRCROOT)/, $(PUBLIC_HEADERS) ) \
384 $(DSTROOT)/$(PUBLIC_HEADER_INSTALLDIR)
385# duplicate hashtable2.h to hashtable.h
386 $(SILENT) $(COPY) $(DSTROOT)/$(PUBLIC_HEADER_INSTALLDIR)/hashtable2.h \
387 $(DSTROOT)/$(PUBLIC_HEADER_INSTALLDIR)/hashtable.h
388 $(SILENT) $(CHMOD) -w $(DSTROOT)/$(PUBLIC_HEADER_INSTALLDIR)/*.h
389 $(SILENT) $(CHMOD) a+r $(DSTROOT)/$(PUBLIC_HEADER_INSTALLDIR)/*.h
390
391 $(SILENT) $(MKDIRS) $(DSTROOT)/$(OTHER_HEADER_INSTALLDIR)
392 -$(SILENT) $(CHMOD) +w $(DSTROOT)/$(OTHER_HEADER_INSTALLDIR)/*.h
393 $(SILENT) $(COPY) $(addprefix $(SRCROOT)/, $(OTHER_HEADERS) ) \
394 $(DSTROOT)/$(OTHER_HEADER_INSTALLDIR)
395 $(SILENT) $(CHMOD) -w $(DSTROOT)/$(OTHER_HEADER_INSTALLDIR)/*.h
396 $(SILENT) $(CHMOD) a+r $(DSTROOT)/$(OTHER_HEADER_INSTALLDIR)/*.h
397
398
399 $(SILENT) $(RM) -f $(DSTROOT)$(PUBLIC_HEADER_DIR)$(PUBLIC_HEADER_DIR_SUFFIX)/hashtable.h
400
401
402install: build installhdrs
403 $(SILENT) $(ECHO) "Installing products from $(SYMROOT) to $(DSTROOT)..."
404
405 $(SILENT) $(MKDIRS) $(DSTROOT)/$(INSTALLDIR)
406 -$(SILENT) $(CHMOD) +w $(DSTROOT)/$(INSTALLDIR)
407
408 $(SILENT) $(REMOVE) -f $(DSTROOT)/$(INSTALLDIR)/libobjc.$(VERSION_NAME)$(LIBRARY_EXT)
409 $(SILENT) $(REMOVE) -f $(DSTROOT)/$(INSTALLDIR)/libobjc_debug.$(VERSION_NAME)$(LIBRARY_EXT)
410 $(SILENT) $(REMOVE) -f $(DSTROOT)/$(INSTALLDIR)/libobjc_profile.$(VERSION_NAME)$(LIBRARY_EXT)
411
412# optimized
413 $(SILENT) $(COPY) $(SYMROOT)/libobjc.$(VERSION_NAME)$(LIBRARY_EXT) $(DSTROOT)/$(INSTALLDIR)
414 $(SILENT) $(STRIP) -S $(DSTROOT)/$(INSTALLDIR)/libobjc.$(VERSION_NAME)$(LIBRARY_EXT)
415 -$(SILENT) $(CHOWN) root:wheel $(DSTROOT)/$(INSTALLDIR)/libobjc.$(VERSION_NAME)$(LIBRARY_EXT)
416 $(SILENT) $(CHMOD) 755 $(DSTROOT)/$(INSTALLDIR)/libobjc.$(VERSION_NAME)$(LIBRARY_EXT)
417 $(SILENT) $(CD) $(DSTROOT)/$(INSTALLDIR) && \
418 $(SYMLINK) libobjc.$(VERSION_NAME)$(LIBRARY_EXT) libobjc$(LIBRARY_EXT)
419
420# debug (allowed not to exist)
421 -$(SILENT) $(COPY) $(SYMROOT)/libobjc_debug.$(VERSION_NAME)$(LIBRARY_EXT) $(DSTROOT)/$(INSTALLDIR)
422 -$(SILENT) $(CHOWN) root:wheel $(DSTROOT)/$(INSTALLDIR)/libobjc_debug.$(VERSION_NAME)$(LIBRARY_EXT)
423 -$(SILENT) $(CHMOD) 755 $(DSTROOT)/$(INSTALLDIR)/libobjc_debug.$(VERSION_NAME)$(LIBRARY_EXT)
424 -$(SILENT) $(CD) $(DSTROOT)/$(INSTALLDIR) && \
425 test -e libobjc_debug.$(VERSION_NAME)$(LIBRARY_EXT) && \
426 $(SYMLINK) libobjc_debug.$(VERSION_NAME)$(LIBRARY_EXT) libobjc_debug$(LIBRARY_EXT) && \
427 $(SYMLINK) libobjc_debug.$(VERSION_NAME)$(LIBRARY_EXT) libobjc.$(VERSION_NAME)_debug$(LIBRARY_EXT)
428
429
430# profile (allowed not to exist)
431 -$(SILENT) $(COPY) $(SYMROOT)/libobjc_profile.$(VERSION_NAME)$(LIBRARY_EXT) $(DSTROOT)/$(INSTALLDIR)
432 -$(SILENT) $(CHOWN) root:wheel $(DSTROOT)/$(INSTALLDIR)/libobjc_profile.$(VERSION_NAME)$(LIBRARY_EXT)
433 -$(SILENT) $(CHMOD) 755 $(DSTROOT)/$(INSTALLDIR)/libobjc_profile.$(VERSION_NAME)$(LIBRARY_EXT)
434 -$(SILENT) $(CD) $(DSTROOT)/$(INSTALLDIR) && \
435 test -e libobjc_profile.$(VERSION_NAME)$(LIBRARY_EXT) && \
436 $(SYMLINK) libobjc_profile.$(VERSION_NAME)$(LIBRARY_EXT) libobjc_profile$(LIBRARY_EXT) && \
437 $(SYMLINK) libobjc_profile.$(VERSION_NAME)$(LIBRARY_EXT) libobjc.$(VERSION_NAME)_profile$(LIBRARY_EXT)
438
439
440clean:
441 $(SILENT) $(ECHO) "Deleting build products..."
442 $(SILENT) $(REMOVE) -f \
443 $(foreach A, $(ARCH_LIST), \
444 $(OBJROOT)/libobjc_debug.$A.$(VERSION_NAME)$(LIBRARY_EXT) \
445 $(OBJROOT)/libobjc_profile.$A.$(VERSION_NAME)$(LIBRARY_EXT) \
446 $(OBJROOT)/libobjc.$A.$(VERSION_NAME)$(LIBRARY_EXT) \
447 $(OBJROOT)/runtime/objc-rtp-sym.$A.o \
448 $(OBJROOT)/runtime/objc-rtp-sym.$A.o.temp \
449 )
450
451 $(SILENT) $(REMOVE) -f $(SYMROOT)/libobjc.optimized.o
452 $(SILENT) $(REMOVE) -f $(SYMROOT)/libobjc.debug.o
453 $(SILENT) $(REMOVE) -f $(SYMROOT)/libobjc.profile.o
454
455 $(SILENT) $(REMOVE) -f $(SYMROOT)/libobjc.$(VERSION_NAME)$(LIBRARY_EXT)
456 $(SILENT) $(REMOVE) -f $(SYMROOT)/libobjc_debug.$(VERSION_NAME)$(LIBRARY_EXT)
457 $(SILENT) $(REMOVE) -f $(SYMROOT)/libobjc_profile.$(VERSION_NAME)$(LIBRARY_EXT)
458
459 $(SILENT) $(REMOVE) -f $(OBJECTS_OPTIMIZED)
460 $(SILENT) $(REMOVE) -f $(OBJECTS_DEBUG)
461 $(SILENT) $(REMOVE) -f $(OBJECTS_PROFILE)
462
463 $(SILENT) $(REMOVE) -f $(MODULE_OBJECTS_OPTIMIZED)
464 $(SILENT) $(REMOVE) -f $(MODULE_OBJECTS_DEBUG)
465 $(SILENT) $(REMOVE) -f $(MODULE_OBJECTS_PROFILE)
466
467 $(SILENT) $(REMOVE) -rf $(SYMROOT)/ProjectHeaders
468
b3962a83
A
469 $(SILENT) $(REMOVE) -f $(MARKGC)
470
809271e4
A
471prebuild:
472 $(SILENT) $(ECHO) "Prebuild-setup..."
473
474# Install headers into $(SYMROOT)/ProjectHeaders so #includes can find them
475# even if they're not installed in /usr.
476 $(SILENT) $(MKDIRS) $(SYMROOT)
477 $(SILENT) $(REMOVE_RECUR) $(SYMROOT)/ProjectHeaders
478 $(SILENT) $(MKDIRS) $(SYMROOT)/ProjectHeaders
479 $(SILENT) $(ECHO) "Copying headers from $(SRCROOT) to $(SYMROOT)/ProjectHeaders..."
480 $(SILENT) $(COPY) $(addprefix $(SRCROOT)/, $(PRIVATE_HEADERS) ) $(SYMROOT)/ProjectHeaders
481 $(SILENT) $(MKDIRS) $(SYMROOT)/ProjectHeaders/objc
482 $(SILENT) $(COPY) $(addprefix $(SRCROOT)/, $(PUBLIC_HEADERS) ) $(SYMROOT)/ProjectHeaders/objc
483 $(SILENT) $(COPY) $(addprefix $(SRCROOT)/, $(OTHER_HEADERS) ) $(SYMROOT)/ProjectHeaders/objc
484
485
486
487build-optimized: prebuild-optimized compile-optimized link-optimized
488build-debug: prebuild-debug compile-debug link-debug
489build-profile: prebuild-profile compile-profile link-profile
490
491
492prebuild-optimized:
493 $(SILENT) $(ECHO) "Building (optimized) ..."
494 $(SILENT) $(MKDIRS) $(foreach S, $(SUBDIRS), $(OBJROOT)/$(S) )
495
496prebuild-debug:
497 $(SILENT) $(ECHO) "Building (debug) ..."
498 $(SILENT) $(MKDIRS) $(foreach S, $(SUBDIRS), $(OBJROOT)/$(S) )
499
500prebuild-profile:
501 $(SILENT) $(ECHO) "Building (profile) ..."
502 $(SILENT) $(MKDIRS) $(foreach S, $(SUBDIRS), $(OBJROOT)/$(S) )
503
504
505compile-optimized: $(OBJECTS_OPTIMIZED) $(MODULE_OBJECTS_OPTIMIZED) $(foreach A, $(ARCH_LIST), $(OBJROOT)/runtime/objc-rtp-sym.$A.o )
506compile-debug: $(OBJECTS_DEBUG) $(MODULE_OBJECTS_DEBUG) $(foreach A, $(ARCH_LIST), $(OBJROOT)/runtime/objc-rtp-sym.$A.o )
507compile-profile: $(OBJECTS_PROFILE) $(MODULE_OBJECTS_PROFILE) $(foreach A, $(ARCH_LIST), $(OBJROOT)/runtime/objc-rtp-sym.$A.o )
508
509
510# link lib-suffix, LDFLAGS, OBJECTS, MODULE_OBJECTS
511# libsuffix should be "" or _debug or _profile
512ifeq "$(PLATFORM)" "Darwin"
513
514define link
515 $(foreach A, $(ARCH_LIST), \
516 $(SILENT) $(LD) -r \
517 -arch $A \
518 -o $(OBJROOT)/libobjc$1.$A.o \
519 $3 ; \
520 $(SILENT) $(CC) $2 \
521 -arch $A \
b3962a83 522 $(LIBS_$(A)) \
809271e4
A
523 $(ORDER) \
524 -sectcreate __DATA __commpage $(OBJROOT)/runtime/objc-rtp-sym.$A.o \
525 -install_name /$(INSTALLDIR)/libobjc$1.$(VERSION_NAME)$(LIBRARY_EXT) \
526 -o $(OBJROOT)/libobjc$1.$A.$(VERSION_NAME)$(LIBRARY_EXT) \
527 $(OBJROOT)/libobjc$1.$A.o $4 ; \
528 )
529 $(SILENT) $(LIPO) \
530 -create -output $(SYMROOT)/libobjc$1.$(VERSION_NAME)$(LIBRARY_EXT) \
531 $(foreach A, $(ARCH_LIST), -arch $A $(OBJROOT)/libobjc$1.$A.$(VERSION_NAME)$(LIBRARY_EXT) )
532endef
533
534else
535# PLATFORM != Darwin
536define link
537 $(SILENT) $(ECHO) "Don't know how to link for platform '$(PLATFORM)'"
538endef
539
540endif
541
542
543link-optimized:
544 $(SILENT) $(ECHO) "Linking (optimized)..."
545 $(call link,,$(LDFLAGS_OPTIMIZED),$(OBJECTS_OPTIMIZED),$(MODULE_OBJECTS_OPTIMIZED) )
546
547link-debug:
548 $(SILENT) $(ECHO) "Linking (debug)..."
549 $(call link,_debug,$(LDFLAGS_DEBUG),$(OBJECTS_DEBUG),$(MODULE_OBJECTS_DEBUG) )
550
551link-profile:
552 $(SILENT) $(ECHO) "Linking (profile)..."
553 $(call link,_profile,$(LDFLAGS_PROFILE),$(OBJECTS_PROFILE),$(MODULE_OBJECTS_PROFILE) )
554
555
556postbuild:
557 $(SILENT) $(ECHO) "Done!"
558
559