aboutsummaryrefslogtreecommitdiffstats
path: root/test/monniaux/sandbox/Makefile
blob: abc294dcb7f8d65101b4c858a6b5bb1d41de3e4b (plain)
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