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