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
|
# This Makefile does not depend on ../rules.mk
# You can modify ALL_CFILES to include the files that should be linked
ALL_CFILES=$(wildcard *.c)
# Name of the target
TARGET=toto
# Name of the clock object
CLOCK=../clock.gcc.k1c.o
# Flags common to both compilers, then to gcc, then to ccomp
ALL_CFLAGS=-g -Wall -D__K1C_COS__
ALL_GCCFLAGS=$(ALL_CFLAGS) -std=c99 -Wextra -Werror=implicit
ALL_CCOMPFLAGS=$(ALL_CFLAGS)
# The compilers
K1C_CC=k1-cos-gcc
K1C_CCOMP=ccomp
# Command to execute
EXECUTE_CYCLES=k1-cluster --syscall=libstd_scalls.so --cycle-based --
# You can define up to GCC4FLAGS and CCOMP4FLAGS
GCC0FLAGS=$(ALL_GCCFLAGS) -O0
GCC1FLAGS=$(ALL_GCCFLAGS) -O1
GCC2FLAGS=$(ALL_GCCFLAGS) -O2
GCC3FLAGS=$(ALL_GCCFLAGS) -O3
GCC4FLAGS=
CCOMP0FLAGS=$(ALL_CCOMPFLAGS) -O0
CCOMP1FLAGS=$(ALL_CCOMPFLAGS) -fno-postpass
CCOMP2FLAGS=$(ALL_CCOMPFLAGS)
CCOMP3FLAGS=
CCOMP4FLAGS=
# Prefix names
GCC0PREFIX=.gcc.o0
GCC1PREFIX=.gcc.o1
GCC2PREFIX=.gcc.o2
GCC3PREFIX=.gcc.o3
GCC4PREFIX=
CCOMP0PREFIX=.ccomp.o0
CCOMP1PREFIX=.ccomp.o1
CCOMP2PREFIX=.ccomp.o2
CCOMP3PREFIX=
CCOMP4PREFIX=
# List of outfiles, updated by gen_rules
OUTFILES:=
firstrule: all
# $1: compiler
# $2: compilation flags
# $3: extension prefix
define gen_rules
%$(3).s: %.c
$(1) $(2) -S $$< -o $$@
$(TARGET)$(3).bin: $(ALL_CFILES:.c=$(3).o) $(CLOCK)
$(K1C_CC) $$+ -lm -o $$@
OUTFILES:=$(OUTFILES) $(TARGET)$(3).out
#OUTFILES=$(shell echo $(OUTFILES) $(TARGET)$(3).out)
endef
# Generic rules
%.o: %.s
$(K1C_CC) $< -c -o $@
%.out: %.bin
$(EXECUTE_CYCLES) $< | tee $@
##
# Generating the rules for all the compiler/flags..
##
ifneq ($(GCC0FLAGS),)
$(eval $(call gen_rules,$(K1C_CC),$(GCC0FLAGS),$(GCC0PREFIX)))
endif
ifneq ($(GCC1FLAGS),)
$(eval $(call gen_rules,$(K1C_CC),$(GCC1FLAGS),$(GCC1PREFIX)))
endif
ifneq ($(GCC2FLAGS),)
$(eval $(call gen_rules,$(K1C_CC),$(GCC2FLAGS),$(GCC2PREFIX)))
endif
ifneq ($(GCC3FLAGS),)
$(eval $(call gen_rules,$(K1C_CC),$(GCC3FLAGS),$(GCC3PREFIX)))
endif
ifneq ($(GCC4FLAGS),)
$(eval $(call gen_rules,$(K1C_CC),$(GCC4FLAGS),$(GCC4PREFIX)))
endif
ifneq ($(CCOMP0FLAGS),)
$(eval $(call gen_rules,$(K1C_CCOMP),$(CCOMP0FLAGS),$(CCOMP0PREFIX)))
endif
ifneq ($(CCOMP1FLAGS),)
$(eval $(call gen_rules,$(K1C_CCOMP),$(CCOMP1FLAGS),$(CCOMP1PREFIX)))
endif
ifneq ($(CCOMP2FLAGS),)
$(eval $(call gen_rules,$(K1C_CCOMP),$(CCOMP2FLAGS),$(CCOMP2PREFIX)))
endif
ifneq ($(CCOMP3FLAGS),)
$(eval $(call gen_rules,$(K1C_CCOMP),$(CCOMP3FLAGS),$(CCOMP3PREFIX)))
endif
ifneq ($(CCOMP4FLAGS),)
$(eval $(call gen_rules,$(K1C_CCOMP),$(CCOMP4FLAGS),$(CCOMP4PREFIX)))
endif
.PHONY: all clean
all: $(OUTFILES)
echo $(OUTFILES)
clean:
rm -f *.o *.s *.bin *.out
|