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

CC = gcc
LD = gcc -s
OPTS_X86 = -m486 -DCRYPT_ASM -DMD5_ASM -DASM_X86
OBJS_X86 = x86.o
OPTS_SPARC = -DCRYPT_ASM -DASM_SPARC
OBJS_SPARC = sparc.o
OPTS_ALPHA = -DCRYPT_64BIT -DCRYPT_LENDIAN -DCRYPT_MASK -DCRYPT_MOVZBL -DCRYPT_SCALE=8 -DCRYPT_EXTERN -DALIGN_LOG2
OBJS_ALPHA = alpha.o
CFLAGS = -O2 -funroll-loops -fomit-frame-pointer
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 "freebsd          FreeBSD, x86"
	@echo "solaris2.x-sparc Solaris 2.x, SPARC"
	@echo "solaris2.5-sparc Solaris 2.5+, SPARC"
	@echo "osf1             OSF/1, Alpha"
	@echo "djgpp            DJGPP 2.x, DJ Delorie's GCC port to MS-DOS"
	@echo "cygwin32         GCC port to Windows NT/Windows 95, x86"
	@echo "generic          Any other UNIX system"

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

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

freebsd :
	$(MAKE) $(PROJ) OPTS="$(OPTS_X86) -DUNDERSCORES -DALIGN_LOG2" OBJS="$(OBJS_X86)"

solaris2.x-sparc : detect.sparc
	$(MAKE) $(PROJ) OPTS="$(OPTS_SPARC) `./detect.sparc` -DNOGLOB" OBJS="$(OBJS_SPARC)"

solaris2.5-sparc : detect.sparc
	$(MAKE) $(PROJ) OPTS="$(OPTS_SPARC) `./detect.sparc`" OBJS="$(OBJS_SPARC)"

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

osf1 :
	$(MAKE) $(PROJ) OPTS="$(OPTS_ALPHA)" OBJS="$(OBJS_ALPHA)"

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

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

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

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

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

xtract : john
	ln -s john $@

unshadow : john
	ln -s john $@

john.bin : john.o fcrypt.o fcrypt.h md5crypt.o compiler.o compiler.h config.o config.h ids.o tinymem.o xtract.o unshadow.o $(OBJS_X86)
	$(LD) john.o fcrypt.o md5crypt.o compiler.o config.o ids.o tinymem.o xtract.o unshadow.o $(OBJS_X86) -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 md5crypt.o compiler.o compiler.h config.o config.h ids.o tinymem.o xtract.o unshadow.o $(OBJS_X86)
	$(LD) john.o fcrypt.o md5crypt.o compiler.o config.o ids.o tinymem.o xtract.o unshadow.o $(OBJS_X86) -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

.c.o :
	$(CC) $(CFLAGS) $(OPTS) -c $*.c

.S.o :
	$(CC) $(OPTS) -c $*.S

.s.o :
	$(CC) $(OPTS) -c $*.S

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