CC=gcc
CFLAGS=-Wall -Werror -pthread -O3  
LDFLAGS=

default: inexact

windows: CC=x86_64-w64-mingw32-gcc 
windows: CFLAGS=-Wall -Werror -pthread -O3 
windows: LDFLAGS=
windows: inexact

windows-debug: CC=x86_64-w64-mingw32-gcc 
windows-debug: CFLAGS=-Wall -Werror -pthread -O3 -g
windows-debug: LDFLAGS=
windows-debug: inexact

debug: CFLAGS=-Wall -Werror -pthread -O3 -g
debug: LDFLAGS=
debug: inexact

argtable3.o: src/argtable3.c
	mkdir -p objs
	$(CC) $(CFLAGS) -c src/argtable3.c -o objs/argtable3.o

base64.o: src/base64.c
	$(CC) $(CFLAGS) -c src/base64.c -o objs/base64.o
 
binhex.o: src/binhex.c
	$(CC) $(CFLAGS) -c src/binhex.c -o objs/binhex.o

curve25519.o: src/curve25519.c
	$(CC) $(CFLAGS) -c src/curve25519.c -o objs/curve25519.o

inexact.o: src/inexact.c
	$(CC) $(CFLAGS) -c src/inexact.c -o objs/inexact.o

norx_inexact.o: src/norx_inexact.c
	$(CC) $(CFLAGS) -c src/norx_inexact.c -o objs/norx_inexact.o

sha3.o: src/sha3.c
	$(CC) $(CFLAGS) -c src/sha3.c -o objs/sha3.o

tests.o: src/tests.c
	$(CC) $(CFLAGS) -c src/tests.c -o objs/tests.o

readpassphrase.o: src/readpassphrase.c
	$(CC) $(CFLAGS) -c src/readpassphrase.c -o objs/readpassphrase.o

randombytes.o: src/randombytes.c
	$(CC) $(CFLAGS) -c src/randombytes.c -o objs/randombytes.o

chacha20_drng.o: src/chacha20_drng.c
	$(CC) $(CFLAGS) -c src/chacha20_drng.c -o objs/chacha20_drng.o

blake2.o: src/blake2.c
	$(CC) $(CFLAGS) -c src/blake2.c -o objs/blake2.o

inexact: src/main.c argtable3.o base64.o binhex.o curve25519.o inexact.o norx_inexact.o sha3.o tests.o readpassphrase.o chacha20_drng.o randombytes.o blake2.o
	$(CC) $(CFLAGS) src/argon2.c src/argon2-core.c src/argon2-thread.c src/argon2-encoding.c src/argon2-impl-select.c src/argon2-arch.c src/main.c objs/argtable3.o objs/base64.o objs/binhex.o objs/curve25519.o objs/inexact.o objs/norx_inexact.o objs/sha3.o objs/tests.o objs/readpassphrase.o objs/randombytes.o objs/chacha20_drng.o objs/blake2.o -o inexact $(LDFLAGS)

clean:
	-rm objs/*.o
	-rm -f inexact inexact.exe