-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
116 lines (100 loc) · 5.61 KB
/
Copy pathMakefile
File metadata and controls
116 lines (100 loc) · 5.61 KB
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
CC=gcc
CFLAGS=-O2 -Wall
# 为datalink程序定义选项
opt1=--port=10001 --utopia
opt2=--port=10002
opt3=--port=10003 --flood --utopia
opt4=--port=10004 --flood
opt5=--port=10005 --flood --ber=1e-4
# 设置部分
SEQ_BITS=
ifeq ($(SEQ_BITS),)
SEQ_BITS=6
endif
DATA_TIMER=
ifeq ($(DATA_TIMER),)
DATA_TIMER=2500
endif
ACK_TIMER=
ifeq ($(ACK_TIMER),)
ACK_TIMER=300
endif
TEST_TIME=30
# 根据参数定义输出目录名
OUTPUT_DIR= Results/$(PROTOCOL)/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S
# 删除输出目录名中的空格
space=$(empty) $(empty)
OUTPUT_DIR:=$(subst $(space),,$(OUTPUT_DIR))
# 定义编译目标
build: build_selectiverepeat build_stopwait build_gobackn
build_selectiverepeat: clean
$(CC) $(CFLAGS) -DSEQ_BITS=$(SEQ_BITS) -DDATA_TIMER=$(DATA_TIMER) -DACK_TIMER=$(ACK_TIMER) -c Protocols/selectiverepeat2.c
$(CC) $(CFLAGS) -c protocol.c
$(CC) $(CFLAGS) -c lprintf.c
$(CC) $(CFLAGS) -c crc32.c
$(CC) selectiverepeat2.o protocol.o lprintf.o crc32.o -o datalink -lm
build_stopwait: clean
$(CC) $(CFLAGS) -DSEQ_BITS=$(SEQ_BITS) -DDATA_TIMER=$(DATA_TIMER) -DACK_TIMER=$(ACK_TIMER) -c Protocols/stopwait.c
$(CC) $(CFLAGS) -c protocol.c
$(CC) $(CFLAGS) -c lprintf.c
$(CC) $(CFLAGS) -c crc32.c
$(CC) stopwait.o protocol.o lprintf.o crc32.o -o datalink -lm
build_gobackn: clean
$(CC) $(CFLAGS) -DSEQ_BITS=$(SEQ_BITS) -DDATA_TIMER=$(DATA_TIMER) -DACK_TIMER=$(ACK_TIMER) -c Protocols/gobackN.c
$(CC) $(CFLAGS) -c protocol.c
$(CC) $(CFLAGS) -c lprintf.c
$(CC) $(CFLAGS) -c crc32.c
$(CC) gobackN.o protocol.o lprintf.o crc32.o -o datalink -lm
# 定义测试目标
test: test_selectiverepeat test_stopwait test_gobackn
test_selectiverepeat: clean
mkdir -p Results/selectiverepeat/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S
$(CC) $(CFLAGS) -DSEQ_BITS=$(SEQ_BITS) -DDATA_TIMER=$(DATA_TIMER) -DACK_TIMER=$(ACK_TIMER) -c Protocols/selectiverepeat2.c
$(CC) $(CFLAGS) -c protocol.c
$(CC) $(CFLAGS) -c lprintf.c
$(CC) $(CFLAGS) -c crc32.c
$(CC) selectiverepeat2.o protocol.o lprintf.o crc32.o -o Results/selectiverepeat/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S/datalink -lm
@$(foreach i,$(shell seq 1 5),\
screen -dmS $(i)_datalinkA bash -c 'cd Results/selectiverepeat/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S; timeout $(TEST_TIME) ./datalink a $(opt$(i)) --log=$(i)_a.log; exit';\
screen -dmS $(i)_datalinkB bash -c 'cd Results/selectiverepeat/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S; timeout $(TEST_TIME) ./datalink b $(opt$(i)) --log=$(i)_b.log; exit';\
)
sleep $(TEST_TIME)
${RM} *.o
@$(foreach i,$(shell seq 1 5),\
echo $$(tail -n 2 Results/selectiverepeat/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S/$(i)_a.log | head -n 1 | awk -F',' '{print $$3}' | awk '{print $$1}') $$(tail -n 2 Results/selectiverepeat/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S/$(i)_b.log | head -n 1 | awk -F',' '{print $$3}' | awk '{print $$1}');\
)
test_stopwait: clean
mkdir -p Results/stopwait/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S
$(CC) $(CFLAGS) -DSEQ_BITS=$(SEQ_BITS) -DDATA_TIMER=$(DATA_TIMER) -DACK_TIMER=$(ACK_TIMER) -c Protocols/stopwait.c
$(CC) $(CFLAGS) -c protocol.c
$(CC) $(CFLAGS) -c lprintf.c
$(CC) $(CFLAGS) -c crc32.c
$(CC) stopwait.o protocol.o lprintf.o crc32.o -o Results/stopwait/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S/datalink -lm
@$(foreach i,$(shell seq 1 5),\
screen -dmS $(i)_datalinkA bash -c 'cd Results/stopwait/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S; timeout $(TEST_TIME) ./datalink a $(opt$(i)) --log=$(i)_a.log; exit';\
screen -dmS $(i)_datalinkB bash -c 'cd Results/stopwait/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S; timeout $(TEST_TIME) ./datalink b $(opt$(i)) --log=$(i)_b.log; exit';\
)
sleep $(TEST_TIME)
${RM} *.o
@$(foreach i,$(shell seq 1 5),\
echo $$(tail -n 2 Results/stopwait/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S/$(i)_a.log | head -n 1 | awk -F',' '{print $$3}' | awk '{print $$1}') $$(tail -n 2 Results/stopwait/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S/$(i)_b.log | head -n 1 | awk -F',' '{print $$3}' | awk '{print $$1}');\
)
test_gobackn: clean
mkdir -p Results/gobackn/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S
$(CC) $(CFLAGS) -DSEQ_BITS=$(SEQ_BITS) -DDATA_TIMER=$(DATA_TIMER) -DACK_TIMER=$(ACK_TIMER) -c Protocols/gobackn.c
$(CC) $(CFLAGS) -c protocol.c
$(CC) $(CFLAGS) -c lprintf.c
$(CC) $(CFLAGS) -c crc32.c
$(CC) gobackn.o protocol.o lprintf.o crc32.o -o Results/gobackn/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S/datalink -lm
@$(foreach i,$(shell seq 1 5),\
screen -dmS $(i)_datalinkA bash -c 'cd Results/gobackn/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S; timeout $(TEST_TIME) ./datalink a $(opt$(i)) --log=$(i)_a.log; exit';\
screen -dmS $(i)_datalinkB bash -c 'cd Results/gobackn/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S; timeout $(TEST_TIME) ./datalink b $(opt$(i)) --log=$(i)_b.log; exit';\
)
sleep $(TEST_TIME)
${RM} *.o
@$(foreach i,$(shell seq 1 5),\
echo $$(tail -n 2 Results/gobackn/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S/$(i)_a.log | head -n 1 | awk -F',' '{print $$3}' | awk '{print $$1}') $$(tail -n 2 Results/gobackn/TEST_$(SEQ_BITS)BITS_$(DATA_TIMER)DATA_$(ACK_TIMER)ACK_$(TEST_TIME)S/$(i)_b.log | head -n 1 | awk -F',' '{print $$3}' | awk '{print $$1}');\
)
# 清理目标文件
clean:
${RM} *.o datalink