File: Makefile

package info (click to toggle)
ogamesim 20130107-3
  • links: PTS
  • area: main
  • in suites: buster
  • size: 804 kB
  • ctags: 214
  • sloc: ansic: 1,621; perl: 1,041; makefile: 201
file content (119 lines) | stat: -rw-r--r-- 2,812 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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