]> git.saurik.com Git - apple/xnu.git/blame_incremental - libkern/kxld/Makefile
xnu-2782.40.9.tar.gz
[apple/xnu.git] / libkern / kxld / Makefile
... / ...
CommitLineData
1################################################################################
2# Note: this makefile is used only for the libkxld build alias. It is not part
3# of the regular kernel build process.
4################################################################################
5
6# Version
7COMPATIBILITY_VERSION=1
8CURRENT_VERSION=1
9
10# Paths
11ifndef DSTROOT
12DSTROOT=./BUILD/dst
13endif
14ifndef OBJROOT
15OBJROOT=./BUILD/obj
16endif
17ifndef SYMROOT
18SYMROOT=./BUILD/sym
19endif
20ifdef SRCROOT
21EXTHDRSRC=$(SRCROOT)/EXTERNAL_HEADERS
22HDRSRC=$(SRCROOT)/libkern/libkern
23OBJSRC=$(SRCROOT)/libkern/kxld
24else
25SRCROOT=.
26EXTHDRSRC=$(SRCROOT)/../../EXTERNAL_HEADERS
27HDRSRC=$(SRCROOT)/../libkern
28OBJSRC=$(SRCROOT)
29ROOT=BUILD
30endif
31ifdef RC_CFLAGS
32ARCHS=$(addprefix -arch , $(RC_ARCHS))
33else
34ARCHS=-arch x86_64
35RC_CFLAGS=$(ARCHS) -pipe
36endif
37ifdef INSTALL_LOCATION
38override DSTROOT := $(DSTROOT)/$(INSTALL_LOCATION)
39endif
40
41PRODUCT_TYPE ?= DYLIB
42
43HDRDST=$(DSTROOT)/usr/local/include
44DYLIBDST=$(DSTROOT)/usr/lib/system
45ARCHIVEDST=$(DSTROOT)/usr/local/lib
46LIBKXLD_DYLIB=libkxld.dylib
47LIBKXLD_ARCHIVE=libkxld.a
48LIBKXLD_DSYM=$(LIBKXLD_DYLIB).dSYM
49LIBKXLD_INSTALLNAME=/usr/lib/system/$(LIBKXLD_DYLIB)
50LIBKXLDOBJ_DYLIB=$(OBJROOT)/$(LIBKXLD_DYLIB)
51LIBKXLDOBJ_ARCHIVE=$(OBJROOT)/$(LIBKXLD_ARCHIVE)
52LIBKXLDSYM_DYLIB=$(SYMROOT)/$(LIBKXLD_DYLIB)
53LIBKXLDSYM_DYLIB_DSYM=$(SYMROOT)/$(LIBKXLD_DSYM)
54LIBKXLDSYM_ARCHIVE=$(SYMROOT)/$(LIBKXLD_ARCHIVE)
55LIBKXLDDST_DYLIB=$(DYLIBDST)/$(LIBKXLD_DYLIB)
56LIBKXLDDST_ARCHIVE=$(ARCHIVEDST)/$(LIBKXLD_ARCHIVE)
57TESTSRC=$(SRCROOT)/tests
58TESTDST=./BUILD/tests
59
60# Flags
61ifdef SDKROOT
62 SDK_DIR := $(shell xcodebuild -version -sdk $(SDKROOT) Path)
63endif
64
65ifeq ($(strip $(SDK_DIR)),)
66 SDK_DIR := /
67endif
68
69DEFINES = -DPRIVATE
70CFLAGS=-std=c99 -Wall -Wextra -Werror -pedantic -Wformat=2 -Wcast-align \
71 -Wwrite-strings -Wshorten-64-to-32 -Wshadow -Winit-self -Wpointer-arith \
72 -Wno-format-y2k -W -Wstrict-prototypes -Wmissing-prototypes -Wreturn-type \
73 -Wcast-qual -Wwrite-strings -Wswitch -Wcast-align -Wbad-function-cast \
74 -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls -g
75LDFLAGS=$(ARCHS) -dynamiclib -install_name $(LIBKXLD_INSTALLNAME) \
76 -compatibility_version $(COMPATIBILITY_VERSION) \
77 -current_version $(CURRENT_VERSION) -lstdc++
78INCLUDES=-I$(HDRSRC) -isystem $(EXTHDRSRC)
79
80ifneq ($(SDK_DIR),/)
81 CFLAGS += -isysroot $(SDK_DIR)
82 LDFLAGS += -isysroot $(SDK_DIR)
83endif
84
85# Tools
86CC = xcrun -sdk $(SDK_DIR) clang
87CLANG_ANALYZER = clang --analyze
88LIBTOOL = xcrun -sdk $(SDK_DIR) libtool
89STRIP = xcrun -sdk $(SDK_DIR) strip
90DSYMUTIL = xcrun -sdk $(SDK_DIR) dsymutil
91
92# Files
93HDR_NAMES=kxld.h kxld_types.h
94OBJ_NAMES=kxld.o kxld_array.o kxld_copyright.o kxld_demangle.o kxld_dict.o \
95 kxld_kext.o kxld_object.o kxld_reloc.o kxld_sect.o kxld_seg.o \
96 kxld_srcversion.o kxld_sym.o kxld_symtab.o kxld_util.o kxld_uuid.o \
97 kxld_vtable.o kxld_versionmin.o
98
99HDRS=$(addprefix $(HDRSRC)/, $(HDR_NAMES))
100OBJS=$(addprefix $(OBJROOT)/, $(OBJ_NAMES))
101
102$(shell [ -d $(OBJROOT) ] || mkdir -p $(OBJROOT))
103
104# Implicit rules
105%.o : %.c
106$(OBJROOT)/%.o : $(OBJSRC)/%.c
107 $(CC) $(RC_CFLAGS) $(CFLAGS) $(DEFINES) $(OPTIM) $(INCLUDES) -c $< -o $@
108$(OBJROOT)/%.o : $(TESTSRC)/%.c
109 $(CC) $(RC_CFLAGS) $(CFLAGS) $(DEFINES) -O0 -DDEBUG $(INCLUDES) -I $(SRCROOT) -c $< -o $@
110
111SRCROOTESC=$(subst /,\/,$(SRCROOT))
112OBJROOTESC=$(subst /,\/,$(OBJROOT))
113SEDOBJS=sed -E 's/(^[a-z_]+)\.o/$(OBJROOTESC)\/\1\.o $(OBJROOTESC)\/\1\.d/'
114SEDSRCS=sed -E 's/ ([a-z_]+\.[ch])/ $(SRCROOTESC)\/\1/g'
115$(OBJROOT)/%.d: $(OBJSRC)/%.c
116 @set -e; rm -f $@; \
117 $(CC) $(INCLUDES) -MM $< | $(SEDOBJS) | $(SEDSRCS) > $@;
118
119# Rules
120release: OPTIM=-Os -dynamic
121release: build
122
123debug: OPTIM=-O0 -DDEBUG -dynamic
124debug: build
125
126profile: OPTIM=-Os -pg -dynamic
127profile: build
128
129tests: OPTIM=-O0 -DDEBUG
130tests: kxld_array_test kxld_dict_test copyrighttest
131
132build: $(LIBKXLDSYM_$(PRODUCT_TYPE))
133
134$(LIBKXLDSYM_DYLIB): $(LIBKXLDOBJ_DYLIB)
135 @mkdir -p $(SYMROOT)
136 install -c -m 644 $< $@
137 $(DSYMUTIL) $@ -o $(LIBKXLDSYM_DYLIB_DSYM)
138
139$(LIBKXLDSYM_ARCHIVE): $(LIBKXLDOBJ_ARCHIVE)
140 @mkdir -p $(SYMROOT)
141 install -c -m 644 $< $@
142
143$(LIBKXLDOBJ_DYLIB): $(OBJS)
144 $(CC) $(LDFLAGS) -o $@ $^
145
146$(LIBKXLDOBJ_ARCHIVE): $(OBJS)
147 $(LIBTOOL) -static -o $@ $^
148
149installhdrs:
150 @mkdir -p $(HDRDST)
151 install -o 0 -g 0 -c -m 444 $(HDRS) $(HDRDST)
152
153install: release installhdrs $(LIBKXLDDST_$(PRODUCT_TYPE))
154
155$(LIBKXLDDST_DYLIB): $(LIBKXLDSYM_DYLIB)
156 @mkdir -p $(DYLIBDST)
157 install -o 0 -g 0 -c -m 555 $< $@
158 $(STRIP) -S -x $@
159
160$(LIBKXLDDST_ARCHIVE): $(LIBKXLDSYM_ARCHIVE)
161 @mkdir -p $(ARCHIVEDST)
162 install -o 0 -g 0 -c -m 555 $< $@
163
164
165KEXTCOPYOBJS=$(OBJROOT)/kextcopyright.o $(OBJROOT)/kxld_copyright.o $(OBJROOT)/kxld_util.o
166kextcopyright: $(TESTDST)/kextcopyright
167$(TESTDST)/kextcopyright: $(KEXTCOPYOBJS)
168 @mkdir -p $(TESTDST)
169 $(CC) $(ARCHS) $(KEXTCOPYOBJS) -framework CoreFoundation -o $(OBJROOT)/kextcopyright
170 install -c -m 755 $(OBJROOT)/kextcopyright $@
171
172TESTOBJS=$(OBJROOT)/kxld_test.o $(OBJROOT)/kxld_util.o
173
174ARRAYOBJS=$(OBJROOT)/kxld_array_test.o $(OBJROOT)/kxld_array.o $(TESTOBJS)
175kxld_array_test: $(TESTDST)/kxld_array_test
176$(TESTDST)/kxld_array_test: $(ARRAYOBJS)
177 @mkdir -p $(TESTDST)
178 $(CC) $(ARCHS) $(ARRAYOBJS) -o $(OBJROOT)/kxld_array_test
179 install -c -m 755 $(OBJROOT)/kxld_array_test $@
180
181DICTOBJS=$(OBJROOT)/kxld_dict_test.o $(OBJROOT)/kxld_dict.o $(OBJROOT)/kxld_array.o $(TESTOBJS)
182kxld_dict_test: $(TESTDST)/kxld_dict_test
183$(TESTDST)/kxld_dict_test: $(DICTOBJS)
184 @mkdir -p $(TESTDST)
185 $(CC) $(ARCHS) $(DICTOBJS) -o $(OBJROOT)/kxld_dict_test
186 install -c -m 755 $(OBJROOT)/kxld_dict_test $@
187
188COPYTESTOBJS=$(OBJROOT)/kxld_copyright.o $(OBJROOT)/kxld_util.o
189copyrighttest: OPTIM+=-DTEST
190copyrighttest: $(TESTDST)/copyrighttest
191$(TESTDST)/copyrighttest: $(COPYTESTOBJS)
192 @mkdir -p $(TESTDST)
193 $(CC) $(ARCHS) $(COPYTESTOBJS) -framework CoreFoundation -framework IOKit -o $(OBJROOT)/copyrighttest
194 install -c -m 755 $(OBJROOT)/copyrighttest $@
195
196analyze:
197 @$(CLANG_ANALYZER) *.c
198 @$(CLANG_ANALYZER) -I. tests/*.c
199 @rm -f *.plist
200
201clean:
202 @rm -rf $(OBJROOT)/*
203
204fullclean:
205ifdef ROOT
206 @rm -rf $(ROOT)
207else
208 @rm -rf $(OBJROOT) $(DSTROOT) $(SYMROOT)
209endif
210
211# Automatically build dependency information when .c or .h files change based
212# on implicit rule for .d:.c
213-include $(OBJS:.o=.d)
214