# Linux/MinGW gcc Makefile for dibigd
# $Date: 2026-04-24 08:23:00 $
# $Revision: 2.7.2 $
# $Author: dai $
#

CC = gcc
CXX = g++
CFLAGS = -std=c99 -pedantic -Wall -Wpointer-arith -Wstrict-prototypes -Wno-format -O2
CXXFLAGS = -std=c++11 -pedantic -Wall -Wpointer-arith  -Wno-format -O2
LDFLAGS = 

INCLUDES = bigdall.h dibigd.hpp

SOURCES = dibigd.cpp bigdall.c

OBJECTS = $(SOURCES:.c=.o)
OBJECTS := $(OBJECTS:.cpp=.o)

# Test programs

CPP_TESTS = \
	t_dibigdBasic.cpp \
	t_dibigdDHGen.cpp \
	t_dibigdDHKeyExch.cpp \
	t_dibigdDSA.cpp \
	t_dibigdPoly1305.cpp \
	t_dibigdRSACrack.cpp \
	t_dibigdRSAEncrypt.cpp \
	t_dibigdRSAKeygen.cpp \
	t_dibigdRSASign.cpp \
	t_dibigdRandomTests.cpp
CPP_TEST_EXES = $(CPP_TESTS:.cpp=)
ALL_TESTS = $(CPP_TEST_EXES)
TEST_OBJS = $(CPP_TESTS:.cpp=.o)

.PHONY: all clean

all: $(ALL_TESTS)

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

%.o: %.cpp $(INCLUDES)
	$(CXX) $(CXXFLAGS) -c $<

# Pattern rule the C++ test target rule
$(CPP_TEST_EXES): %: %.o $(INCLUDES) $(OBJECTS)
	$(CXX) $(CXXFLAGS) -o $@ $@.o $(OBJECTS) $(LDFLAGS)


clean:
	-rm -f $(OBJECTS) $(ALL_TESTS) $(TEST_OBJS)

