761982ecf3f3d1b5cce80280bb90ef224810e8d5
[litex.git] / software / common.mak
1 TARGET_PREFIX=lm32-elf-
2
3 RM ?= rm -f
4
5 CC_normal := $(TARGET_PREFIX)gcc
6 CX_normal := $(TARGET_PREFIX)g++
7 AS_normal := $(TARGET_PREFIX)as
8 AR_normal := $(TARGET_PREFIX)ar
9 LD_normal := $(TARGET_PREFIX)ld
10 OBJCOPY_normal := $(TARGET_PREFIX)objcopy
11 RANLIB_normal := $(TARGET_PREFIX)ranlib
12
13 CC_quiet = @echo " CC " $@ && $(TARGET_PREFIX)gcc
14 CX_quiet = @echo " CX " $@ && $(TARGET_PREFIX)g++
15 AS_quiet = @echo " AS " $@ && $(TARGET_PREFIX)as
16 AR_quiet = @echo " AR " $@ && $(TARGET_PREFIX)ar
17 LD_quiet = @echo " LD " $@ && $(TARGET_PREFIX)ld
18 OBJCOPY_quiet = @echo " OBJCOPY " $@ && $(TARGET_PREFIX)objcopy
19 RANLIB_quiet = @echo " RANLIB " $@ && $(TARGET_PREFIX)ranlib
20
21 MSC_GIT_ID := $(shell cd $(MSCDIR) && python3 -c "from misoclib.identifier.git import get_id; print(hex(get_id()), end='')")
22
23 ifeq ($(V),1)
24 CC = $(CC_normal)
25 CX = $(CX_normal)
26 AS = $(AS_normal)
27 AR = $(AR_normal)
28 LD = $(LD_normal)
29 OBJCOPY = $(OBJCOPY_normal)
30 RANLIB = $(RANLIB_normal)
31 else
32 CC = $(CC_quiet)
33 CX = $(CX_quiet)
34 AS = $(AS_quiet)
35 AR = $(AR_quiet)
36 LD = $(LD_quiet)
37 OBJCOPY = $(OBJCOPY_quiet)
38 RANLIB = $(RANLIB_quiet)
39 endif
40
41 # Toolchain options
42 #
43 INCLUDES = -I$(MSCDIR)/software/include/base -I$(MSCDIR)/software/include -I$(MSCDIR)/common
44 COMMONFLAGS = -Os -mbarrel-shift-enabled -mmultiply-enabled -mdivide-enabled -msign-extend-enabled \
45 -Wall -fno-builtin -nostdinc -DMSC_GIT_ID=$(MSC_GIT_ID) $(INCLUDES)
46 CFLAGS = $(COMMONFLAGS) -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes
47 CXXFLAGS = $(COMMONFLAGS) -fno-exceptions -ffreestanding
48 LDFLAGS = -nostdlib -nodefaultlibs -L$(MSCDIR)/software/include
49
50 # compile and generate dependencies, based on
51 # http://scottmcpeak.com/autodepend/autodepend.html
52
53 define compilexx-dep
54 $(CX) -c $(CXXFLAGS) $(1) $< -o $*.o
55 @$(CX_normal) -MM $(CXXFLAGS) $(1) $< > $*.d
56 @mv -f $*.d $*.d.tmp
57 @sed -e 's|.*:|$*.o:|' < $*.d.tmp > $*.d
58 @sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | \
59 sed -e 's/^ *//' -e 's/$$/:/' >> $*.d
60 @rm -f $*.d.tmp
61 endef
62
63 define compile-dep
64 $(CC) -c $(CFLAGS) $(1) $< -o $*.o
65 @$(CC_normal) -MM $(CFLAGS) $(1) $< > $*.d
66 @mv -f $*.d $*.d.tmp
67 @sed -e 's|.*:|$*.o:|' < $*.d.tmp > $*.d
68 @sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | \
69 sed -e 's/^ *//' -e 's/$$/:/' >> $*.d
70 @rm -f $*.d.tmp
71 endef
72
73 define assemble
74 $(AS) -o $*.o $<
75 endef