]> rtime.felk.cvut.cz Git - arc.git/blob - scripts/cc_gcc.mk
5c7fd8ca1ffeb0cefa9eb14c4e84b5ec3c3eb1f0
[arc.git] / scripts / cc_gcc.mk
1 \r
2 \r
3 # Arch specific settings\r
4 ifneq ($(ARCH),)\r
5  include $(ROOTDIR)/$(ARCH_PATH-y)/scripts/gcc.mk\r
6 endif\r
7 \r
8 \r
9 HOST := $(shell uname)\r
10 export prefix\r
11 \r
12 # If we are using codesourcery and cygwin..\r
13 ifneq ($(findstring CYGWIN,$(UNAME)),)\r
14 cygpath:= $(shell cygpath -m $(shell which cygpath))\r
15 export CYGPATH=$(cygpath)\r
16 endif\r
17 \r
18 # Find version\r
19 gcc_version = $(shell ${CROSS_COMPILE}gcc --version | gawk -v VER=$(1) '{ if( VER >= strtonum(gensub(/\./,"","g",$$3)) ) print "y";exit  }' )\r
20 GCC_V430 = $(call gcc_version,430)\r
21 GCC_V340 = $(call gcc_version,340)  \r
22 \r
23 # ---------------------------------------------------------------------------\r
24 # Compiler\r
25 # CCFLAGS - compile flags\r
26 \r
27 CC      =       $(CROSS_COMPILE)gcc\r
28 cflags-$(CFG_OPT_RELEASE) += -O3\r
29 cflags-$(CFG_OPT_DEBUG) += -g -O0\r
30 cflags-$(CFG_OPT_SIZE) += -g -Os\r
31 \r
32 \r
33 # Remove sections if needed.. may be problems with other compilers here.\r
34 #cflags-y += -ffunction-sections\r
35 \r
36 ifneq ($(filter -O2 -O3 -O1,$(cflags-y)),) \r
37         cflags-y += -fno-schedule-insns -fno-schedule-insns2\r
38 endif\r
39 \r
40 #cflags-y               += -fno-common\r
41 cflags-y                += -std=gnu99\r
42 \r
43 # Generate dependencies\r
44 cflags-y                += -MMD\r
45 \r
46 # Warnings\r
47 cflags-y          += -Wall\r
48 cflags-$(GCC_V340)+= -Wextra\r
49 cflags-$(GCC_V430)+= -Wconversion\r
50 #cflags-y          += -pedantic\r
51 \r
52 # Conformance\r
53 cflags-y          += -fno-strict-aliasing       # Use restict keyword instead.\r
54 cflags-y          += -fno-builtin\r
55 \r
56 # gcov\r
57 cflags-$(CFG_GCOV) += -fprofile-arcs\r
58 cflags-$(CFG_GCOV) += -ftest-coverage\r
59 \r
60 # Get machine cflags\r
61 #cflags-y               += $(cflags-$(ARCH))\r
62 \r
63 CFLAGS = $(cflags-y) $(cflags-yy)\r
64 \r
65 CCOUT           = -o $@ \r
66 \r
67 # ---------------------------------------------------------------------------\r
68 # Preprocessor\r
69 \r
70 CPP     =       $(CC) -E\r
71 CPPOUT = -o\r
72 CPP_ASM_FLAGS = -x assembler-with-cpp \r
73 \r
74 comma = ,\r
75 empty = \r
76 space = $(empty) $(empty)\r
77 \r
78 # Note!\r
79 # Libs related to GCC(libgcc.a, libgcov.a) is located under \r
80 # lib/gcc/<machine>/<version>/<multilib>\r
81 # Libs related to the library (libc.a,libm.a,etc) are under:\r
82 # <machine>/lib/<multilib>\r
83\r
84 # Can't remember why haven't I just used gcc to link instead of ld? (it should \r
85 # figure out the things below by itself)\r
86 \r
87 # It seems some versions of make want "\=" and some "="\r
88 # "=" - msys cpmake on windows 7 \r
89 gcc_lib_path := "$(subst /libgcc.a,,$(shell $(CC) $(CFLAGS) --print-libgcc-file-name))" \r
90 gcc_lib_path := $(subst \libgcc.a,,$(gcc_lib_path)) \r
91 lib_lib_path := "$(subst /libc.a,,$(shell $(CC) $(CFLAGS) --print-file-name=libc.a))"\r
92 lib_lib_path := $(subst \libc.a,,$(lib_lib_path))\r
93 text_chunk := $(subst \,/,$(shell touch gcc_path_probe.c; $(CC) -v -c gcc_path_probe.c &> gcc_path_probe.tmp;gawk -f $(TOPDIR)/scripts/gcc_getinclude.awk gcc_path_probe.tmp))\r
94 cc_inc_path := $(realpath $(text_chunk))\r
95 libpath-y += -L$(lib_lib_path)\r
96 libpath-y += -L$(gcc_lib_path)\r
97 \r
98 # ---------------------------------------------------------------------------\r
99 # Linker\r
100 #\r
101 # LDFLAGS               - linker flags\r
102 # LDOUT                 - How to Generate linker output file\r
103 # LDMAPFILE     - How to generate mapfile \r
104 # ldcmdfile-y   - link cmd file\r
105 # libpath-y             - lib paths\r
106 # libitem-y             - the libs with path\r
107 # lib-y                 - the libs, without path\r
108 \r
109 \r
110 LD = $(CROSS_COMPILE)ld\r
111 \r
112 \r
113 LD_FILE = -T\r
114 \r
115 LDOUT           = -o $@\r
116 TE = elf\r
117 \r
118 # Don't use a map file if we are compiling for native target.\r
119 ifneq ($(CROSS_COMPILE),) \r
120 LDFLAGS += -Map $(subst .$(TE),.map, $@) \r
121 endif\r
122 \r
123 lib-$(CFG_GCOV) += -lgcov \r
124 \r
125 libitem-y += $(libitem-yy)\r
126 \r
127 LD_START_GRP = --start-group\r
128 LD_END_GRP = --end-group\r
129 \r
130 #LDFLAGS += --gc-section\r
131 \r
132 # ---------------------------------------------------------------------------\r
133 # Assembler\r
134 #\r
135 # ASFLAGS               - assembler flags\r
136 # ASOUT                 - how to generate output file\r
137 \r
138 AS      =       $(CROSS_COMPILE)as\r
139 \r
140 ASFLAGS += --gdwarf2\r
141 ASOUT = -o $@\r
142 \r
143 # ---------------------------------------------------------------------------\r
144 # Dumper\r
145 \r
146 #DDUMP          = $(Q)$(COMPILER_ROOT)/$(cross_machine-y)-objcopy\r
147 #DDUMP_FLAGS    = -O srec\r
148 OBJCOPY                 = $(CROSS_COMPILE)objcopy\r
149 \r
150 # ---------------------------------------------------------------------------\r
151 # Archiver\r
152 #\r
153 # AROUT                 - archiver flags\r
154 \r
155 AR      =       $(CROSS_COMPILE)ar\r
156 AROUT   = $@\r
157 \r
158 \r
159 ifdef CFG_HC1X\r
160 define do-memory-footprint\r
161         @$(CROSS_COMPILE)objdump -h $@ | gawk -f $(ROOTDIR)/scripts/hc1x_memory.awk\r
162 endef   \r
163 else\r
164 define do-memory-footprint\r
165         @gawk --non-decimal-data -f $(ROOTDIR)/scripts/memory_footprint_gcc.awk $(subst .elf,.map,$@)\r
166 endef\r
167 endif   \r
168 \r
169 \r
170 \r