# John the Ripper Makefile  Copyright (c) 1996,97 by Solar Designer

CC = gcc
LD = gcc -s
OPTS_X86 = -m486 -DX86
OBJS_X86 = xform1.o xform2.o xorkey.o is486.o
CFLAGS = -O2 -funroll-loops
PROJ = john xtract unshadow

default :
	@echo "To build John the Ripper, type: make <system>, where <system> can be:"
	@echo "linux-elf        Linux, x86, ELF binaries"
	@echo "linux-a.out      Linux, x86, a.out binaries"
	@echo "solaris2x-sparc  Solaris 2.x, SPARC"
	@echo "solaris25-sparc  Solaris 2.5+, SPARC"
	@echo "osf1             OSF/1, Alpha 21064"
	@echo "osf1a            OSF/1, Alpha 21064A (or better)"
	@echo "djgpp            DJGPP 2.x, DJ Delorie's GCC port to MS-DOS"
	@echo "cygwin32         GCC port to Windows NT/Windows 95"
	@echo "generic          Any other UNIX system"

linux-elf :
	$(MAKE) $(PROJ) OPTS="$(OPTS_X86)" OBJS="$(OBJS_X86)"

linux-a.out :
	$(MAKE) $(PROJ) OPTS="$(OPTS_X86) -DUNDERSCORES" OBJS="$(OBJS_X86)"

solaris2x-sparc : detect
	$(MAKE) $(PROJ) OPTS="`./detect` -DNOGLOB"

solaris25-sparc : detect
	$(MAKE) $(PROJ) OPTS="`./detect`"

osf1 :
	$(MAKE) $(PROJ) OPTS="-DCRYPT_64BIT -DCRYPT_MASK -DCRYPT_MOVZBL -DCRYPT_SCALE=8 -DCRYPT_UNROLL=4"

osf1a :
	$(MAKE) $(PROJ) OPTS="-DCRYPT_64BIT -DCRYPT_MASK -DCRYPT_MOVZBL -DCRYPT_SCALE=8"

djgpp :
	$(MAKE) john.bin xtract.com unshadow.com OPTS="$(OPTS_X86) -DX86_ESP -DX86_CLI -DMSDOS -DUNDERSCORES"

cygwin32 :
	$(MAKE) john.exe xtract.exe unshadow.exe LD=gcc OPTS="$(OPTS_X86) -DX86_ESP -DMSWIN -DCYGWIN32 -DUNDERSCORES"

generic : detect
	$(MAKE) $(PROJ) OPTS="`./detect`"

detect : detect.c
	$(CC) -s -w detect.c -o endian
	$(CC) -c $(CFLAGS) fcrypt.c `./endian` -o fcrypt1.o
	$(CC) -c $(CFLAGS) fcrypt.c `./endian` -DCRYPT_128K -o fcrypt2.o
	$(CC) -s -w detect.c fcrypt1.o -DBENCHMARK -o benchmark1
	$(CC) -s -w detect.c fcrypt2.o -DBENCHMARK -DCRYPT_128K -o benchmark2
	$(CC) -s -w detect.c `./benchmark1` `./benchmark2` -DCOMPARE -o detect
	rm -f endian benchmark?

john : john.o fcrypt.o fcrypt.h compiler.o compiler.h config.o config.h ids.o tinymem.o $(OBJS) xtract.o unshadow.o
	$(LD) john.o fcrypt.o compiler.o config.o ids.o tinymem.o $(OBJS) xtract.o unshadow.o -o john

xtract : john
	ln -s john $@

unshadow : john
	ln -s john $@

john.bin : john.o fcrypt.o fcrypt.h compiler.o compiler.h config.o config.h ids.o tinymem.o xform1.o xform2.o xorkey.o is486.o xtract.o unshadow.o
	$(LD) john.o fcrypt.o compiler.o config.o ids.o tinymem.o xform1.o xform2.o xorkey.o is486.o xtract.o unshadow.o -o john.exe
	if exist $@ del $@
	ren john.exe $@

john.com : john.asm
	@echo Use Borland TASM/TLINK to make JOHN.COM

xtract.com : john.com
	copy $< $@

unshadow.com : john.com
	copy $< $@

john.exe : john.o fcrypt.o fcrypt.h compiler.o compiler.h config.o config.h ids.o tinymem.o xform1.o xform2.o xorkey.o is486.o xtract.o unshadow.o
	$(LD) john.o fcrypt.o compiler.o config.o ids.o tinymem.o xform1.o xform2.o xorkey.o is486.o xtract.o unshadow.o -lker~1 -o john.exe
	strip john.exe

xtract.exe : symlink.c
	$(CC) symlink.c -o xtract.exe
	strip xtract.exe

unshadow.exe : xtract.exe
	cp xtract.exe unshadow.exe

john.o : john.c fcrypt.h compiler.h config.h

%.o : %.c
	$(CC) $(CFLAGS) $(OPTS) -c $<

%.o : %.S
	$(CC) $(OPTS) -c $<

clean :
	rm -f *.o *.exe john john.bin xtract xtract.com unshadow unshadow.com detect endian benchmark? core *~
