PREFIX= $(HOME)/local
PROJECT= sdlkit

CC= gcc
LD= gcc

#~ VERBOSE_LEVEL= -DVERBOSE -DVERBOSE_DEBUG
VERBOSE_LEVEL=
CFLAGS= -Wall -pipe -g
LDFLAGS= -lm -lGL -g

include $(PREFIX)/packages/glew.package
include $(PREFIX)/packages/sdl.package

BIN= shadercc
SO= libsdlkit.so libglsl2.so librender_target.so libvertex_buffer.so
DEP= sdlkit.d glsl2.d render_target.d vertex_buffer.d

DATA= tests/sdlkit_tests_latest.tar.gz objtoy/objtoy_latest.tar.gz

.PHONY: all
all : lib shadercc

.PHONY: lib
lib: $(SO) 

shadercc: glsl2.c glsl2cc.c sdlkit.c
	$(CC) $(CFLAGS) $(VERBOSE_LEVEL) -c $+ 
	$(LD) $(LDFLAGS) -o $@ $(+:.c=.o)
	@rm $(+:.c=.o)
	
libsdlkit.so: sdlkit.o bmp_texture.o
	@echo ... build $(BUILD)
	$(LD) -shared $(LDFLAGS) -o $@ $+

libglsl2.so: glsl2.o
	@echo ... build $(BUILD)
	$(LD) -shared $(LDFLAGS) -o $@ $+

librender_target.so: render_target.o
	@echo ... build $(BUILD)
	$(LD) -shared $(LDFLAGS) -o $@ $+

libvertex_buffer.so: vertex_buffer.o
	@echo ... build $(BUILD)
	$(LD) -shared $(LDFLAGS) -o $@ $+

%.o: %.c
	$(CC) $(CFLAGS) -fPIC $(VERBOSE_LEVEL) -c $< -o $@

%.d: %.c
	$(CC) $(CFLAGS) -o $@ -MM $<

.PHONY: clean
clean: rebuild
	rm -f *.o *.d $(SO) $(BIN)

.PHONY: tarball
tarball:
	# archive les exemples
	-make tarball -C tests
	# archive la librarie de chargement d'objets
	-make tarball -C objtoy
	# archive la librairie
	@echo $(PROJECT)_b$(BUILD).tar.gz
	tar --ignore-failed-read --dereference -zcf $(PROJECT)_b$(BUILD).tar.gz *.package Makefile *.c *.h $(DATA) build
	@-rm -f $(PROJECT)_latest.tar.gz
	@ln -s $(PROJECT)_b$(BUILD).tar.gz $(PROJECT)_latest.tar.gz

$(PREFIX)/packages/%.package: %.package
	mkdir -p $(PREFIX)/packages
	cp $< $@
	
.PHONY: install
install: $(SO) $(BIN)
	mkdir -p $(PREFIX)/bin
	cp $(BIN) $(PREFIX)/bin
	mkdir -p $(PREFIX)/packages
	cp *.package $(PREFIX)/packages
	mkdir -p $(PREFIX)/lib
	cp $(SO) $(PREFIX)/lib
	mkdir -p $(PREFIX)/include
	cp *.h $(PREFIX)/include


# numero de version auto
-include build

build:
	@echo BUILD= 1 > build

rebuild: build
	@echo BUILD= `expr $(BUILD) + 1` > build

ifneq ($(MAKECMDGOALS), clean)
-include $(DEP)
endif
