# Makefile for GraphiC 2D Community Edition
CC ?= clang
AR ?= ar
ARFLAGS ?= rcs

CFLAGS ?= -O2 -IInclude -DGPC_PORTABLE=1 -DGPC_COMMUNITY=1 -Wno-everything
LDFLAGS ?= -lm

LIB_DIR = lib
BIN_DIR = bin
OBJ_DIR = build

STATIC_LIB = $(LIB_DIR)/libgraphic.a
DYNAMIC_LIB = $(LIB_DIR)/libgraphic.dylib

SRCS = \
	Source/Arrow.c \
	Source/Axesdraw.c \
	Source/Barplt.c \
	Source/Bothplt.c \
	Source/Bplt.c \
	Source/Circles.c \
	Source/Color.c \
	Source/Curves.c \
	Source/Getxy.c \
	Source/Gridopts.c \
	Source/Insert.c \
	Source/Labset.c \
	Source/Legend.c \
	Source/Lineattr.c \
	Source/Lines.c \
	Source/Linplt.c \
	Source/Logplt.c \
	Source/Lplt.c \
	Source/Messagew.c \
	Source/Panfil.c \
	Source/Pclp.c \
	Source/Position.c \
	Source/Psfont.c \
	Source/Roundoff.c \
	Source/Simplt.c \
	Source/Statfuns.c \
	Source/Svc.c \
	Source/Symbols.c \
	Source/Tekint.c \
	Source/Tplt.c \
	Source/Truetype.c \
	Source/Ttdisk.c \
	Source/Ttfntld.c \
	Source/Ttfntplt.c \
	Source/baux_portable.c \
	Source/community_stubs.c \
	Source/gpc_driver_svg.c \
	Source/gpcfor_compat.c \
	Source/memory_portable.c

OBJS = $(patsubst Source/%.c,$(OBJ_DIR)/%.o,$(SRCS))

EXAMPLES = \
	$(BIN_DIR)/Sample \
	$(BIN_DIR)/D2test \
	$(BIN_DIR)/Logtest \
	$(BIN_DIR)/Bartest \
	$(BIN_DIR)/Erftest \
	$(BIN_DIR)/Multi_y

all: $(STATIC_LIB) $(DYNAMIC_LIB) $(EXAMPLES)

$(OBJ_DIR)/%.o: Source/%.c
	@mkdir -p $(OBJ_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

$(STATIC_LIB): $(OBJS)
	@mkdir -p $(LIB_DIR)
	$(AR) $(ARFLAGS) $@ $^

$(DYNAMIC_LIB): $(OBJS)
	@mkdir -p $(LIB_DIR)
	$(CC) -shared $(OBJS) $(LDFLAGS) -o $@

$(BIN_DIR)/%: c/examples/%.c $(STATIC_LIB)
	@mkdir -p $(BIN_DIR)
	$(CC) $(CFLAGS) $< $(STATIC_LIB) $(LDFLAGS) -o $@

clean:
	rm -rf $(OBJ_DIR) $(LIB_DIR) $(BIN_DIR) *.svg *.html *.tkf
