# SRMath's not-so-amazing Makefile

# gcd.c gcdtest.c Makefile srgcd.c srmath.h srtest.c srtest.h testdemo.c

default: executables tests library

clean:
	rm -f *.o

distclean: clean
	rm -f libsrmath.so gcd gcdtest

CFLAGS = -Wall -O4

LDFLAGS = -fsanitize=address -g

# +---------+--------------------------------------------------------
# | Library |
# +---------+

library: srmath.so

srmath.so: srgcd.o srexpmod.o
	cc srgcd.o srexpmod.o -shared -o libsrmath.so

# +-------------+----------------------------------------------------
# | Executables |
# +-------------+

executables: gcd

gcd: gcd.o srgcd.o gcdtest
	cc gcd.o srgcd.o -o gcd

# +-------+----------------------------------------------------------
# | Tests |
# +-------+

tests: gcdtest expmodtest

gcdtest: gcdtest.o srgcd.o srtest.o
	cc $(LDFLAGS) gcdtest.o srgcd.o srtest.o -o gcdtest

expmodtest: expmodtest.o srexpmod.o srtest.o
	cc $(LDFLAGS) -g expmodtest.o srexpmod.o srtest.o -o expmodtest

# +--------------+---------------------------------------------------
# | Object Files |
# +--------------+

%.o: %.c
	cc $(CFLAGS) -c $< -o $@

# +---------------------+--------------------------------------------
# | Header dependencies |
# +---------------------+

*.o: srmath.h
gcdtest.o: srtest.h
expmodtest.o: srtest.h

