TARGETS	= $(OBJDIR)dex$(SOEXT) $(OBJDIR)elf$(SOEXT) $(OBJDIR)flat$(SOEXT) $(OBJDIR)java$(SOEXT) $(OBJDIR)mbr$(SOEXT) $(OBJDIR)pe$(SOEXT)
OBJDIR	=
PREFIX	= /usr/local
DESTDIR	=
LIBDIR	= $(PREFIX)/lib
CC	= cc
CPPFLAGSF= -I../../include
CPPFLAGS=
CFLAGSF	= `pkg-config --cflags libSystem` -fPIC
CFLAGS	= -W -Wall -g -O2 -D_FORTIFY_SOURCE=2 -fstack-protector
LDFLAGSF= `pkg-config --libs libSystem`
EXEEXT	=
AR	= ar
ARFLAGS	= -rc
RANLIB	= ranlib
CCSHARED= $(CC) -shared
SOEXT	= .so
RM	= rm -f
LN	= ln -f
MKDIR	= mkdir -m 0755 -p
INSTALL	= install


all: $(TARGETS)

dex_OBJS = $(OBJDIR)dex.o
dex_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
dex_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)dex$(SOEXT): $(dex_OBJS)
	$(CCSHARED) -o $(OBJDIR)dex$(SOEXT) $(dex_OBJS) $(dex_LDFLAGS)

elf_OBJS = $(OBJDIR)elf.o $(OBJDIR)elf/common.o $(OBJDIR)elf/elf32.o $(OBJDIR)elf/elf64.o
elf_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
elf_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)elf$(SOEXT): $(elf_OBJS)
	$(CCSHARED) -o $(OBJDIR)elf$(SOEXT) $(elf_OBJS) $(elf_LDFLAGS)

flat_OBJS = $(OBJDIR)flat.o
flat_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
flat_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)flat$(SOEXT): $(flat_OBJS)
	$(CCSHARED) -o $(OBJDIR)flat$(SOEXT) $(flat_OBJS) $(flat_LDFLAGS)

java_OBJS = $(OBJDIR)java.o
java_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
java_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)java$(SOEXT): $(java_OBJS)
	$(CCSHARED) -o $(OBJDIR)java$(SOEXT) $(java_OBJS) $(java_LDFLAGS)

mbr_OBJS = $(OBJDIR)mbr.o
mbr_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
mbr_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)mbr$(SOEXT): $(mbr_OBJS)
	$(CCSHARED) -o $(OBJDIR)mbr$(SOEXT) $(mbr_OBJS) $(mbr_LDFLAGS)

pe_OBJS = $(OBJDIR)pe.o
pe_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
pe_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)

$(OBJDIR)pe$(SOEXT): $(pe_OBJS)
	$(CCSHARED) -o $(OBJDIR)pe$(SOEXT) $(pe_OBJS) $(pe_LDFLAGS)

$(OBJDIR)dex.o: dex.c
	$(CC) $(dex_CFLAGS) -o $(OBJDIR)dex.o -c dex.c

$(OBJDIR)elf.o: elf.c elf/common.h
	$(CC) $(elf_CFLAGS) -o $(OBJDIR)elf.o -c elf.c

$(OBJDIR)elf/common.o: elf/common.c elf/common.h
	@[ -d "$(OBJDIR)elf" ] || $(MKDIR) -- "$(OBJDIR)elf"
	$(CC) $(elf_CFLAGS) -o $(OBJDIR)elf/common.o -c elf/common.c

$(OBJDIR)elf/elf32.o: elf/elf32.c elf/common.h elf/elf.h elf/elf_netbsd.h elf/elf.c
	@[ -d "$(OBJDIR)elf" ] || $(MKDIR) -- "$(OBJDIR)elf"
	$(CC) $(elf_CFLAGS) -o $(OBJDIR)elf/elf32.o -c elf/elf32.c

$(OBJDIR)elf/elf64.o: elf/elf64.c elf/common.h elf/elf.h elf/elf_netbsd.h elf/elf.c
	@[ -d "$(OBJDIR)elf" ] || $(MKDIR) -- "$(OBJDIR)elf"
	$(CC) $(elf_CFLAGS) -o $(OBJDIR)elf/elf64.o -c elf/elf64.c

$(OBJDIR)flat.o: flat.c
	$(CC) $(flat_CFLAGS) -o $(OBJDIR)flat.o -c flat.c

$(OBJDIR)java.o: java.c
	$(CC) $(java_CFLAGS) -o $(OBJDIR)java.o -c java.c

$(OBJDIR)mbr.o: mbr.c
	$(CC) $(mbr_CFLAGS) -o $(OBJDIR)mbr.o -c mbr.c

$(OBJDIR)pe.o: pe.c
	$(CC) $(pe_CFLAGS) -o $(OBJDIR)pe.o -c pe.c

clean:
	$(RM) -- $(dex_OBJS) $(elf_OBJS) $(flat_OBJS) $(java_OBJS) $(mbr_OBJS) $(pe_OBJS)

distclean: clean
	$(RM) -- $(TARGETS)

install: all
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Asm/format
	$(INSTALL) -m 0755 $(OBJDIR)dex$(SOEXT) $(DESTDIR)$(LIBDIR)/Asm/format/dex$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Asm/format
	$(INSTALL) -m 0755 $(OBJDIR)elf$(SOEXT) $(DESTDIR)$(LIBDIR)/Asm/format/elf$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Asm/format
	$(INSTALL) -m 0755 $(OBJDIR)flat$(SOEXT) $(DESTDIR)$(LIBDIR)/Asm/format/flat$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Asm/format
	$(INSTALL) -m 0755 $(OBJDIR)java$(SOEXT) $(DESTDIR)$(LIBDIR)/Asm/format/java$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Asm/format
	$(INSTALL) -m 0755 $(OBJDIR)mbr$(SOEXT) $(DESTDIR)$(LIBDIR)/Asm/format/mbr$(SOEXT)
	$(MKDIR) $(DESTDIR)$(LIBDIR)/Asm/format
	$(INSTALL) -m 0755 $(OBJDIR)pe$(SOEXT) $(DESTDIR)$(LIBDIR)/Asm/format/pe$(SOEXT)

uninstall:
	$(RM) -- $(DESTDIR)$(LIBDIR)/Asm/format/dex$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Asm/format/elf$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Asm/format/flat$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Asm/format/java$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Asm/format/mbr$(SOEXT)
	$(RM) -- $(DESTDIR)$(LIBDIR)/Asm/format/pe$(SOEXT)

.PHONY: all clean distclean install uninstall
