SRC		=	$(wildcard *.c)
OBJ		=	$(SRC:%.c=obj/%.o)
SO_OBJ		=	$(filter-out main.o,$(OBJ))
WOBJ		=	$(SRC:%.c=obj/%.obj)
DLL_OBJ		=	$(filter-out main.obj,$(WOBJ))
UMASK		=	022
TIMECMD		=	/usr/bin/time -p

# цель для Linux (для венды будет с суффиксом .exe)
TARGET		=	csim

# флаги линуксового компилятора
CCFLAGS		=	-MMD -g -O2 -fomit-frame-pointer

# флаги виндового компилятора
WCCFLAGS	=	-g -O2 -D__WIN32__ -fomit-frame-pointer

SIZE		= 	size
WSIZE		=	i586-mingw32msvc-size

# линуксовый компилятор
CC		=	gcc

# виндовый компилятор
WCC		=	i586-mingw32msvc-gcc

WLIBS		=

# по умолчанию собираем для линукс только 
all: for_linux 

# сборка под все платформы
all_targets: for_linux for_win32

# сборка для линукс
for_linux: $(TARGET)
#$(TARGET).so

# сборка для венды
for_win32: $(TARGET).exe

# csim (static)
$(TARGET): $(OBJ)
	umask $(UMASK) && $(CC) $(OBJ) -o $@ 
	$(SIZE) $@
# csim.so
$(TARGET).so: $(SO_OBJ)
	umask $(UMASK) && $(CC) $(SO_OBJ) -o $@ -shared -nostartfiles
	$(SIZE) $@

# csim.dll
$(TARGET).dll: $(DLL_OBJ)
	$(WCC) $(DLL_OBJ) -o $@ -shared
	$(WSIZE) $@

# csim_wl.exe (dynamic)
$(TARGET)_wl.exe: obj/main.obj $(TARGET).dll
	$(WCC) obj/main.obj $(TARGET).dll -o $@
	$(WSIZE) $@

# csim_wl (dynamic)
$(TARGET)_wl: $(TARGET).so
	umask $(UMASK) && $(CC) obj/main.o $< -o $@

# csim.exe (static)
$(TARGET).exe: $(WOBJ)
	$(WCC) $(WOBJ) -o $@ -static  $(WLIBS)
	$(WSIZE) $@

obj/%.obj: %.c Makefile
	-@mkdir -p obj
	$(WCC) -c $(WCCFLAGS) $< -o $@

obj/%.o: %.c Makefile
	-@mkdir -p obj
	$(CC) -c $(CCFLAGS) $< -o $@

units.conf: $(wildcard langs/??) base_units.conf
	umask 022 && \
	cp -f base_units.conf $@
	for lang in $(wildcard langs/??); do \
		echo -e "\n\n#Language $$lang\n" >> $@; \
		cat $$lang >> $@; \
	done

units_info.c: units.conf create_units.pl units_info.h Makefile
	perl create_units.pl $< -c $@ -h /dev/null

units_info.h: units.conf create_units.pl Makefile
	perl create_units.pl $< -h $@ -c /dev/null

clean:
	rm -fr obj


open_project:
ifeq ($(TERM),screen)
	@if [ -e .Makefile.swp ]; then \
		echo "Проект уже открыт!"; \
	else 	\
		for i in Makefile units.conf create_units.pl *.[ch]; do \
			screen -t $$i vim $$i; sleep 0.5; \
		done;	\
	fi
else
	@echo проект открывается только под screen
endif

test: $(TARGET)
	$(TIMECMD) ./$(TARGET) -s 100  -f 3 -i tests/test1.txt
test2: $(TARGET)
	$(TIMECMD) ./$(TARGET) -t 3 -s 100  -f 3 -i tests/test2.txt
test3: $(TARGET)
	$(TIMECMD) ./$(TARGET) -s 100  -f 3 -i tests/test3.txt


include $(wildcard obj/*.d)

.PHONY: all clean test test2 test3 open_project for_linux for_win32 all_targets
