X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/b0d623f7f2ae71ed96e60569f61f9a9a27016e80..39236c6e673c41db228275375ab7fdb0f837b292:/libkern/kxld/Makefile diff --git a/libkern/kxld/Makefile b/libkern/kxld/Makefile index 84412e08f..6b9ec5a38 100644 --- a/libkern/kxld/Makefile +++ b/libkern/kxld/Makefile @@ -18,10 +18,12 @@ ifndef SYMROOT SYMROOT=./BUILD/sym endif ifdef SRCROOT +EXTHDRSRC=$(SRCROOT)/EXTERNAL_HEADERS HDRSRC=$(SRCROOT)/libkern/libkern OBJSRC=$(SRCROOT)/libkern/kxld else SRCROOT=. +EXTHDRSRC=$(SRCROOT)/../../EXTERNAL_HEADERS HDRSRC=$(SRCROOT)/../libkern OBJSRC=$(SRCROOT) ROOT=BUILD @@ -29,54 +31,61 @@ endif ifdef RC_CFLAGS ARCHS=$(addprefix -arch , $(RC_ARCHS)) else -ARCHS=-arch i386 -arch x86_64 -arch ppc +ARCHS=-arch x86_64 RC_CFLAGS=$(ARCHS) -pipe endif +ifdef INSTALL_LOCATION +override DSTROOT := $(DSTROOT)/$(INSTALL_LOCATION) +endif PRODUCT_TYPE ?= DYLIB HDRDST=$(DSTROOT)/usr/local/include -LIBDST=$(DSTROOT)/usr/lib/system +DYLIBDST=$(DSTROOT)/usr/lib/system ARCHIVEDST=$(DSTROOT)/usr/local/lib -LIBOBJ=$(OBJROOT)/libkxld.o LIBKXLD_DYLIB=libkxld.dylib LIBKXLD_ARCHIVE=libkxld.a -LIBKXLDNAME=/usr/lib/system/$(LIBKXLD_DYLIB) +LIBKXLD_INSTALLNAME=/usr/lib/system/$(LIBKXLD_DYLIB) LIBKXLDOBJ_DYLIB=$(OBJROOT)/$(LIBKXLD_DYLIB) LIBKXLDOBJ_ARCHIVE=$(OBJROOT)/$(LIBKXLD_ARCHIVE) -LIBKXLDDST_DYLIB=$(LIBDST)/$(LIBKXLD_DYLIB) +LIBKXLDSYM_DYLIB=$(SYMROOT)/$(LIBKXLD_DYLIB) +LIBKXLDSYM_ARCHIVE=$(SYMROOT)/$(LIBKXLD_ARCHIVE) +LIBKXLDDST_DYLIB=$(DYLIBDST)/$(LIBKXLD_DYLIB) LIBKXLDDST_ARCHIVE=$(ARCHIVEDST)/$(LIBKXLD_ARCHIVE) TESTSRC=$(SRCROOT)/tests TESTDST=./BUILD/tests # Flags SDKROOT ?= / +DEFINES = -DPRIVATE CFLAGS=-std=c99 -Wall -Wextra -Werror -pedantic -Wformat=2 -Wcast-align \ -Wwrite-strings -Wshorten-64-to-32 -Wshadow -Winit-self -Wpointer-arith \ -Wno-format-y2k -W -Wstrict-prototypes -Wmissing-prototypes -Wreturn-type \ -Wcast-qual -Wwrite-strings -Wswitch -Wcast-align -Wbad-function-cast \ - -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls -g \ - -isysroot $(SDKROOT) -LDFLAGS=$(ARCHS) -dynamiclib -install_name $(LIBKXLDNAME) \ + -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls -g +LDFLAGS=$(ARCHS) -dynamiclib -install_name $(LIBKXLD_INSTALLNAME) \ -compatibility_version $(COMPATIBILITY_VERSION) \ - -current_version $(CURRENT_VERSION) -isysroot $(SDKROOT) -INCLUDES=-I$(HDRSRC) $(INCFLAGS_EXTERN) + -current_version $(CURRENT_VERSION) -lstdc++ +INCLUDES=-I$(HDRSRC) -isystem $(EXTHDRSRC) + +ifneq ($(SDKROOT),/) + CFLAGS += -isysroot $(SDKROOT) + LDFLAGS += -isysroot $(SDKROOT) +endif # Tools -CC = xcrun -sdk $(SDKROOT) cc +CC = xcrun -sdk $(SDKROOT) clang +CLANG_ANALYZER = clang --analyze LIBTOOL = xcrun -sdk $(SDKROOT) libtool STRIP = xcrun -sdk $(SDKROOT) strip -# Turn on -Wno-cast-align for arm since it won't build without it -ifeq ($(findstring arm, $(ARCHS)),arm) -CFLAGS+=-Wno-cast-align -endif - # Files HDR_NAMES=kxld.h kxld_types.h -OBJ_NAMES=kxld.o kxld_array.o kxld_copyright.o kxld_dict.o kxld_kext.o kxld_reloc.o \ - kxld_sect.o kxld_seg.o kxld_sym.o kxld_state.o kxld_symtab.o kxld_util.o \ - kxld_uuid.o kxld_vtable.o +OBJ_NAMES=kxld.o kxld_array.o kxld_copyright.o kxld_demangle.o kxld_dict.o \ + kxld_kext.o kxld_object.o kxld_reloc.o kxld_sect.o kxld_seg.o \ + kxld_srcversion.o kxld_sym.o kxld_symtab.o kxld_util.o kxld_uuid.o \ + kxld_vtable.o kxld_versionmin.o + HDRS=$(addprefix $(HDRSRC)/, $(HDR_NAMES)) OBJS=$(addprefix $(OBJROOT)/, $(OBJ_NAMES)) @@ -85,14 +94,14 @@ $(shell [ -d $(OBJROOT) ] || mkdir -p $(OBJROOT)) # Implicit rules %.o : %.c $(OBJROOT)/%.o : $(OBJSRC)/%.c - $(CC) $(RC_CFLAGS) $(CFLAGS) $(OPTIM) $(INCLUDES) -c $< -o $@ + $(CC) $(RC_CFLAGS) $(CFLAGS) $(DEFINES) $(OPTIM) $(INCLUDES) -c $< -o $@ $(OBJROOT)/%.o : $(TESTSRC)/%.c - $(CC) $(RC_CFLAGS) $(CFLAGS) -O0 -DDEBUG $(INCLUDES) -I $(SRCROOT) -c $< -o $@ + $(CC) $(RC_CFLAGS) $(CFLAGS) $(DEFINES) -O0 -DDEBUG $(INCLUDES) -I $(SRCROOT) -c $< -o $@ SRCROOTESC=$(subst /,\/,$(SRCROOT)) OBJROOTESC=$(subst /,\/,$(OBJROOT)) SEDOBJS=sed -E 's/(^[a-z_]+)\.o/$(OBJROOTESC)\/\1\.o $(OBJROOTESC)\/\1\.d/' -SEDSRCS=sed -E 's/([a-z_]+\.[ch])/$(SRCROOTESC)\/\1/g' +SEDSRCS=sed -E 's/ ([a-z_]+\.[ch])/ $(SRCROOTESC)\/\1/g' $(OBJROOT)/%.d: $(OBJSRC)/%.c @set -e; rm -f $@; \ $(CC) $(INCLUDES) -MM $< | $(SEDOBJS) | $(SEDSRCS) > $@; @@ -108,11 +117,17 @@ profile: OPTIM=-Os -pg -dynamic profile: build tests: OPTIM=-O0 -DDEBUG -tests: kxld_dict_test copyrighttest +tests: kxld_array_test kxld_dict_test copyrighttest + +build: $(LIBKXLDSYM_$(PRODUCT_TYPE)) + +$(LIBKXLDSYM_DYLIB): $(LIBKXLDOBJ_DYLIB) + @mkdir -p $(SYMROOT) + install -c -m 644 $< $@ -build: $(LIBKXLDOBJ_$(PRODUCT_TYPE)) - @[ -d $(SYMROOT) ] || mkdir -p $(SYMROOT) - install -c -m 644 $< $(SYMROOT) +$(LIBKXLDSYM_ARCHIVE): $(LIBKXLDOBJ_ARCHIVE) + @mkdir -p $(SYMROOT) + install -c -m 644 $< $@ $(LIBKXLDOBJ_DYLIB): $(OBJS) $(CC) $(LDFLAGS) -o $@ $^ @@ -121,39 +136,56 @@ $(LIBKXLDOBJ_ARCHIVE): $(OBJS) $(LIBTOOL) -static -o $@ $^ installhdrs: - @[ -d $(HDRDST) ] || mkdir -p $(HDRDST) + @mkdir -p $(HDRDST) install -o 0 -g 0 -c -m 444 $(HDRS) $(HDRDST) install: release installhdrs $(LIBKXLDDST_$(PRODUCT_TYPE)) -$(LIBKXLDDST_DYLIB): - @[ -d $(LIBDST) ] || mkdir -p $(LIBDST) - install -o 0 -g 0 -c -m 555 $(SYMROOT)/$(LIBKXLD_DYLIB) $(LIBDST) +$(LIBKXLDDST_DYLIB): $(LIBKXLDSYM_DYLIB) + @mkdir -p $(DYLIBDST) + install -o 0 -g 0 -c -m 555 $< $@ $(STRIP) -S -x $@ -$(LIBKXLDDST_ARCHIVE): - @[ -d $(ARCHIVEDST) ] || mkdir -p $(ARCHIVEDST) - install -o 0 -g 0 -c -m 555 $(SYMROOT)/$(LIBKXLD_ARCHIVE) $(ARCHIVEDST) +$(LIBKXLDDST_ARCHIVE): $(LIBKXLDSYM_ARCHIVE) + @mkdir -p $(ARCHIVEDST) + install -o 0 -g 0 -c -m 555 $< $@ KEXTCOPYOBJS=$(OBJROOT)/kextcopyright.o $(OBJROOT)/kxld_copyright.o $(OBJROOT)/kxld_util.o -kextcopyright: $(KEXTCOPYOBJS) $(TESTDST) +kextcopyright: $(TESTDST)/kextcopyright +$(TESTDST)/kextcopyright: $(KEXTCOPYOBJS) + @mkdir -p $(TESTDST) $(CC) $(ARCHS) $(KEXTCOPYOBJS) -framework CoreFoundation -o $(OBJROOT)/kextcopyright - install -c -m 755 $(OBJROOT)/kextcopyright $(TESTDST) + install -c -m 755 $(OBJROOT)/kextcopyright $@ + +TESTOBJS=$(OBJROOT)/kxld_test.o $(OBJROOT)/kxld_util.o + +ARRAYOBJS=$(OBJROOT)/kxld_array_test.o $(OBJROOT)/kxld_array.o $(TESTOBJS) +kxld_array_test: $(TESTDST)/kxld_array_test +$(TESTDST)/kxld_array_test: $(ARRAYOBJS) + @mkdir -p $(TESTDST) + $(CC) $(ARCHS) $(ARRAYOBJS) -o $(OBJROOT)/kxld_array_test + install -c -m 755 $(OBJROOT)/kxld_array_test $@ -DICTOBJS=$(OBJROOT)/kxld_dict_test.o $(OBJROOT)/kxld_dict.o $(OBJROOT)/kxld_array.o $(OBJROOT)/kxld_util.o -kxld_dict_test: $(DICTOBJS) $(TESTDST) +DICTOBJS=$(OBJROOT)/kxld_dict_test.o $(OBJROOT)/kxld_dict.o $(OBJROOT)/kxld_array.o $(TESTOBJS) +kxld_dict_test: $(TESTDST)/kxld_dict_test +$(TESTDST)/kxld_dict_test: $(DICTOBJS) + @mkdir -p $(TESTDST) $(CC) $(ARCHS) $(DICTOBJS) -o $(OBJROOT)/kxld_dict_test - install -c -m 755 $(OBJROOT)/kxld_dict_test $(TESTDST) + install -c -m 755 $(OBJROOT)/kxld_dict_test $@ COPYTESTOBJS=$(OBJROOT)/kxld_copyright.o $(OBJROOT)/kxld_util.o copyrighttest: OPTIM+=-DTEST -copyrighttest: $(KEXTCOPYOBJS) $(TESTDST) +copyrighttest: $(TESTDST)/copyrighttest +$(TESTDST)/copyrighttest: $(COPYTESTOBJS) + @mkdir -p $(TESTDST) $(CC) $(ARCHS) $(COPYTESTOBJS) -framework CoreFoundation -framework IOKit -o $(OBJROOT)/copyrighttest - install -c -m 755 $(OBJROOT)/copyrighttest $(TESTDST) + install -c -m 755 $(OBJROOT)/copyrighttest $@ -$(TESTDST): - @[ -d $(TESTDST) ] || mkdir -p $(TESTDST) +analyze: + @$(CLANG_ANALYZER) *.c + @$(CLANG_ANALYZER) -I. tests/*.c + @rm -f *.plist clean: @rm -rf $(OBJROOT)/*