1export USE_APPLE_PB_SUPPORT = all
2
3ifeq "$(EFITOOLS)" "efitools"
4	EFI_SUPPORT = -DEFI_SUPPORT
5endif
6
7ifneq "" "$(SDKROOT)"
8  SDK = -isysroot $(SDKROOT)
9  CC = $(shell xcrun -find -sdk $(SDKROOT) cc)
10  CXX = $(shell xcrun -find -sdk $(SDKROOT) c++)
11  DSYMUTIL = $(shell xcrun -find -sdk ${SDKROOT} dsymutil)
12else
13  DSYMUTIL = dsymutil
14endif
15
16OFLAG = -Os
17LTO = -DLTO_SUPPORT
18LEGACY = -D_MACH_I386_THREAD_STATUS_FPSTATE_LEGACY_FIELD_NAMES_ \
19	 -D_ARCHITECTURE_I386_FPU_FPSTATE_LEGACY_FIELD_NAMES_
20CFLAGS = $(OFLAG) $(LTO) -g -Wall -I$(SRCROOT)/../include \
21	 -I$(SRCROOT) $(LEGACY) $(EFI_SUPPORT) $(SDK)
22
23LIBSTUFF = -L$(SYMROOT)/../libstuff -lstuff
24CXXLIB = -stdlib=libc++
25
26MKDIRS = /bin/mkdir -p
27SRCROOT = .
28SYMROOT = .
29OBJROOT = .
30OFILE_DIR = $(OBJROOT)
31VPATH = $(OFILE_DIR)
32
33BINDIR = /bin
34USRBINDIR = /usr/bin
35
36CFILES = main.c ofile_print.c m68k_disasm.c i860_disasm.c \
37	 m88k_disasm.c i386_disasm.c ppc_disasm.c hppa_disasm.c \
38	 sparc_disasm.c print_objc.c notify.c arm_disasm.c \
39	 print_objc2_64bit.c print_objc2_32bit.c
40ifeq "$(EFITOOLS)" "efitools"
41	CFILES += coff_print.c
42endif
43HFILES = otool.h ofile_print.h m68k_disasm.h i860_disasm.h \
44	 sparc_disasm.h m88k_disasm.h i386_disasm.h ppc_disasm.h hppa_disasm.h \
45	 notify.h arm_disasm.h
46OBJS = $(CFILES:.c=.o) ofile.o
47INSTALL_FILES = $(CFILES) $(HFILES) Makefile notes
48
49PRODUCT = otool
50all: $(OFILE_DIR) $(SYMROOT) $(PRODUCT).NEW
51
52$(PRODUCT).NEW:	$(OFILE_DIR) $(SYMROOT) $(OBJS)
53	$(CC) $(RC_CFLAGS) -nostdlib -r -o $(OBJROOT)/private.o \
54		$(OBJS) $(LIBSTUFF)
55	$(CXX) $(RC_CFLAGS) $(SDK) -o $(SYMROOT)/$@ $(OBJROOT)/private.o \
56		$(LIBSTUFF) $(CXXLIB)
57	$(DSYMUTIL) $(SYMROOT)/$@
58
59.c.o:
60	$(CC) $(CFLAGS) $(RC_CFLAGS) -c -o $(OFILE_DIR)/$*.o $<
61
62ofile.o: $(SRCROOT)/../libstuff/ofile.c
63	$(CC) $(CFLAGS) $(RC_CFLAGS) -c -o $(OFILE_DIR)/$*.o \
64		$(SRCROOT)/../libstuff/ofile.c -DOTOOL
65
66clean: shlib_clean
67	-rm -f $(SYMROOT)/$(PRODUCT).NEW
68	-rm -r -f *dSYM
69
70shlib_clean:
71	-cd $(OFILE_DIR); rm -f $(OBJS) private.o
72	-rm -f make.out
73
74install: all
75	$(MKDIRS) $(DSTROOT)$(USRBINDIR)
76	install -c -s -m 555 $(SYMROOT)/$(PRODUCT).NEW \
77		$(DSTROOT)$(USRBINDIR)/$(PRODUCT)
78
79installsrc:
80	$(MKDIRS) $(SRCROOT)
81	chmod 755 $(SRCROOT)
82	gnutar cf - $(INSTALL_FILES) | (cd $(SRCROOT); gnutar xf -)
83	chmod 444 $(SRCROOT)/*
84
85$(OFILE_DIR) $(SYMROOT):
86	$(MKDIRS) $@
87