diff options
Diffstat (limited to 'meta-microblaze/recipes-devtools/gcc/gcc-target.inc')
-rw-r--r-- | meta-microblaze/recipes-devtools/gcc/gcc-target.inc | 259 |
1 files changed, 259 insertions, 0 deletions
diff --git a/meta-microblaze/recipes-devtools/gcc/gcc-target.inc b/meta-microblaze/recipes-devtools/gcc/gcc-target.inc new file mode 100644 index 00000000..7dac3ef4 --- /dev/null +++ b/meta-microblaze/recipes-devtools/gcc/gcc-target.inc | |||
@@ -0,0 +1,259 @@ | |||
1 | GCCMULTILIB = "--enable-multilib" | ||
2 | require gcc-configure-common.inc | ||
3 | |||
4 | EXTRA_OECONF_PATHS = "\ | ||
5 | --with-build-sysroot=${STAGING_DIR_TARGET} \ | ||
6 | " | ||
7 | |||
8 | EXTRA_OECONF:append:linuxstdbase = " --enable-clocale=gnu" | ||
9 | |||
10 | # Configure gcc running on the target to default to an architecture which will | ||
11 | # be compatible with that of gcc-runtime (which is cross compiled to be target | ||
12 | # specific). For example, for ARM, ARMv6+ adds atomic instructions that may | ||
13 | # affect the ABI in the gcc-runtime libs. Since we can't rely on gcc on the | ||
14 | # target to always be passed -march etc, its built-in default needs to be safe. | ||
15 | |||
16 | ARMFPARCHEXT ?= "" | ||
17 | |||
18 | EXTRA_OECONF:append:armv6:class-target = " --with-arch=armv6${ARMFPARCHEXT}" | ||
19 | EXTRA_OECONF:append:armv7a:class-target = " --with-arch=armv7-a${ARMFPARCHEXT}" | ||
20 | EXTRA_OECONF:append:armv7ve:class-target = " --with-arch=armv7ve${ARMFPARCHEXT}" | ||
21 | EXTRA_OECONF:append:arc:class-target = " --with-cpu=${TUNE_PKGARCH}" | ||
22 | EXTRA_OECONF:append:x86-64:class-target = " ${@get_gcc_x86_64_arch_setting(bb, d)}" | ||
23 | |||
24 | # libcc1 requres gcc_cv_objdump when cross build, but gcc_cv_objdump is | ||
25 | # set in subdir gcc, so subdir libcc1 can't use it, export it here to | ||
26 | # fix the problem. | ||
27 | export gcc_cv_objdump = "${TARGET_PREFIX}objdump" | ||
28 | |||
29 | EXTRA_OECONF_GCC_FLOAT = "${@get_gcc_float_setting(bb, d)}" | ||
30 | |||
31 | PACKAGES = "\ | ||
32 | ${PN} ${PN}-plugins ${PN}-symlinks \ | ||
33 | g++ g++-symlinks \ | ||
34 | cpp cpp-symlinks \ | ||
35 | g77 g77-symlinks \ | ||
36 | gfortran gfortran-symlinks \ | ||
37 | gcov gcov-symlinks \ | ||
38 | ${PN}-doc \ | ||
39 | ${PN}-dev \ | ||
40 | ${PN}-dbg \ | ||
41 | " | ||
42 | |||
43 | FILES:${PN} = "\ | ||
44 | ${bindir}/${TARGET_PREFIX}gcc* \ | ||
45 | ${bindir}/${TARGET_PREFIX}lto* \ | ||
46 | ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/collect2* \ | ||
47 | ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/g++-mapper-server \ | ||
48 | ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/lto* \ | ||
49 | ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/lib*${SOLIBS} \ | ||
50 | ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/liblto*${SOLIBSDEV} \ | ||
51 | ${gcclibdir}/${TARGET_SYS}/${BINV}/*.o \ | ||
52 | ${gcclibdir}/${TARGET_SYS}/${BINV}/specs \ | ||
53 | ${gcclibdir}/${TARGET_SYS}/${BINV}/lib*${SOLIBS} \ | ||
54 | ${gcclibdir}/${TARGET_SYS}/${BINV}/include \ | ||
55 | ${gcclibdir}/${TARGET_SYS}/${BINV}/include-fixed \ | ||
56 | ${libdir}/bfd-plugins/*.so \ | ||
57 | " | ||
58 | INSANE_SKIP:${PN} += "dev-so" | ||
59 | RRECOMMENDS:${PN} += "\ | ||
60 | libssp \ | ||
61 | libssp-dev \ | ||
62 | " | ||
63 | RDEPENDS:${PN} += "cpp" | ||
64 | |||
65 | FILES:${PN}-dev = "\ | ||
66 | ${gcclibdir}/${TARGET_SYS}/${BINV}/lib*${SOLIBSDEV} \ | ||
67 | ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/lib*${SOLIBSDEV} \ | ||
68 | ${gcclibdir}/${TARGET_SYS}/${BINV}/plugin/include/ \ | ||
69 | ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/plugin/gengtype \ | ||
70 | ${gcclibdir}/${TARGET_SYS}/${BINV}/plugin/gtype.state \ | ||
71 | " | ||
72 | FILES:${PN}-symlinks = "\ | ||
73 | ${bindir}/cc \ | ||
74 | ${bindir}/gcc \ | ||
75 | ${bindir}/gccbug \ | ||
76 | " | ||
77 | |||
78 | FILES:${PN}-plugins = "\ | ||
79 | ${gcclibdir}/${TARGET_SYS}/${BINV}/plugin \ | ||
80 | " | ||
81 | ALLOW_EMPTY:${PN}-plugins = "1" | ||
82 | |||
83 | FILES:g77 = "\ | ||
84 | ${bindir}/${TARGET_PREFIX}g77 \ | ||
85 | ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/f771 \ | ||
86 | " | ||
87 | FILES:g77-symlinks = "\ | ||
88 | ${bindir}/g77 \ | ||
89 | ${bindir}/f77 \ | ||
90 | " | ||
91 | RRECOMMENDS:g77 = "\ | ||
92 | libg2c \ | ||
93 | libg2c-dev \ | ||
94 | " | ||
95 | |||
96 | FILES:gfortran = "\ | ||
97 | ${bindir}/${TARGET_PREFIX}gfortran \ | ||
98 | ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/f951 \ | ||
99 | " | ||
100 | RRECOMMENDS:gfortran = "\ | ||
101 | libquadmath \ | ||
102 | libquadmath-dev \ | ||
103 | " | ||
104 | FILES:gfortran-symlinks = "\ | ||
105 | ${bindir}/gfortran \ | ||
106 | ${bindir}/f95" | ||
107 | |||
108 | FILES:cpp = "\ | ||
109 | ${bindir}/${TARGET_PREFIX}cpp* \ | ||
110 | ${base_libdir}/cpp \ | ||
111 | ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/cc1" | ||
112 | FILES:cpp-symlinks = "${bindir}/cpp" | ||
113 | |||
114 | FILES:gcov = "${bindir}/${TARGET_PREFIX}gcov* \ | ||
115 | ${bindir}/${TARGET_PREFIX}gcov-tool* \ | ||
116 | " | ||
117 | FILES:gcov-symlinks = "${bindir}/gcov \ | ||
118 | ${bindir}/gcov-tool \ | ||
119 | " | ||
120 | |||
121 | FILES:g++ = "\ | ||
122 | ${bindir}/${TARGET_PREFIX}g++* \ | ||
123 | ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/cc1plus \ | ||
124 | " | ||
125 | FILES:g++-symlinks = "\ | ||
126 | ${bindir}/c++ \ | ||
127 | ${bindir}/g++ \ | ||
128 | " | ||
129 | RRECOMMENDS:g++ = "\ | ||
130 | libstdc++ \ | ||
131 | libstdc++-dev \ | ||
132 | libatomic \ | ||
133 | libatomic-dev \ | ||
134 | " | ||
135 | |||
136 | FILES:${PN}-doc = "\ | ||
137 | ${infodir} \ | ||
138 | ${mandir} \ | ||
139 | ${gcclibdir}/${TARGET_SYS}/${BINV}/include/README \ | ||
140 | " | ||
141 | |||
142 | do_compile () { | ||
143 | # Prevent full target sysroot path from being used in configargs.h header, | ||
144 | # as it will be rewritten when used by other sysroots preventing support | ||
145 | # for gcc plugins. Additionally the path is embeddeded into the output | ||
146 | # binary, this prevents building a reproducible binary. | ||
147 | oe_runmake configure-gcc | ||
148 | sed -i 's@${STAGING_DIR_TARGET}@/@g' ${B}/gcc/configargs.h | ||
149 | sed -i 's@${STAGING_DIR_HOST}@/@g' ${B}/gcc/configargs.h | ||
150 | |||
151 | # Prevent sysroot/workdir paths from being used in checksum-options. | ||
152 | # checksum-options is used to generate a checksum which is embedded into | ||
153 | # the output binary. | ||
154 | oe_runmake TARGET-gcc=checksum-options all-gcc | ||
155 | sed -i 's@${DEBUG_PREFIX_MAP}@@g' ${B}/gcc/checksum-options | ||
156 | sed -i 's@${STAGING_DIR_TARGET}@/@g' ${B}/gcc/checksum-options | ||
157 | |||
158 | oe_runmake all-host | ||
159 | } | ||
160 | |||
161 | do_install () { | ||
162 | oe_runmake 'DESTDIR=${D}' install-host | ||
163 | |||
164 | # Add unwind.h, it comes from libgcc which we don't want to build again | ||
165 | install ${STAGING_LIBDIR_NATIVE}/${TARGET_SYS}/gcc/${TARGET_SYS}/${BINV}/include/unwind.h ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include/ | ||
166 | |||
167 | # Info dir listing isn't interesting at this point so remove it if it exists. | ||
168 | if [ -e "${D}${infodir}/dir" ]; then | ||
169 | rm -f ${D}${infodir}/dir | ||
170 | fi | ||
171 | |||
172 | # Cleanup some of the ${libdir}{,exec}/gcc stuff ... | ||
173 | rm -r ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/install-tools | ||
174 | rm -r ${D}${libexecdir}/gcc/${TARGET_SYS}/${BINV}/install-tools | ||
175 | rm -rf ${D}${libexecdir}/gcc/${TARGET_SYS}/${BINV}/*.la | ||
176 | rmdir ${D}${includedir} | ||
177 | rm -rf ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/finclude | ||
178 | |||
179 | # Hack around specs file assumptions | ||
180 | test -f ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/specs && sed -i -e '/^*cross_compile:$/ { n; s/1/0/; }' ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/specs | ||
181 | |||
182 | # Cleanup manpages.. | ||
183 | rm -rf ${D}${mandir}/man7 | ||
184 | |||
185 | # Don't package details about the build host | ||
186 | rm -f ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/plugin/include/auto-build.h | ||
187 | rm -f ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/plugin/include/bconfig.h | ||
188 | |||
189 | cd ${D}${bindir} | ||
190 | |||
191 | # We care about g++ not c++ | ||
192 | rm -f *c++* | ||
193 | |||
194 | # We don't care about the gcc-<version> ones for this | ||
195 | rm -f *gcc-?*.?* | ||
196 | |||
197 | # Not sure why we end up with these but we don't want them... | ||
198 | rm -f ${TARGET_PREFIX}${TARGET_PREFIX}* | ||
199 | |||
200 | # Symlinks so we can use these trivially on the target | ||
201 | if [ -e ${TARGET_PREFIX}g77 ]; then | ||
202 | ln -sf ${TARGET_PREFIX}g77 g77 || true | ||
203 | ln -sf g77 f77 || true | ||
204 | fi | ||
205 | if [ -e ${TARGET_PREFIX}gfortran ]; then | ||
206 | ln -sf ${TARGET_PREFIX}gfortran gfortran || true | ||
207 | ln -sf gfortran f95 || true | ||
208 | fi | ||
209 | ln -sf ${TARGET_PREFIX}g++ g++ | ||
210 | ln -sf ${TARGET_PREFIX}gcc gcc | ||
211 | ln -sf ${TARGET_PREFIX}cpp cpp | ||
212 | ln -sf ${TARGET_PREFIX}gcov gcov | ||
213 | ln -sf ${TARGET_PREFIX}gcov-tool gcov-tool | ||
214 | install -d ${D}${base_libdir} | ||
215 | ln -sf ${bindir}/${TARGET_PREFIX}cpp ${D}${base_libdir}/cpp | ||
216 | ln -sf g++ c++ | ||
217 | ln -sf gcc cc | ||
218 | install -d ${D}${libdir}/bfd-plugins | ||
219 | ln -sf ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/liblto_plugin.so ${D}${libdir}/bfd-plugins/liblto_plugin.so | ||
220 | chown -R root:root ${D} | ||
221 | } | ||
222 | |||
223 | do_install:append () { | ||
224 | # | ||
225 | # Thefixinc.sh script, run on the gcc's compile phase, looks into sysroot header | ||
226 | # files and places the modified files into | ||
227 | # {D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include-fixed folder. This makes the | ||
228 | # build not deterministic. The following code prunes all those headers | ||
229 | # except those under include-fixed/linux, *limits.h and README, yielding | ||
230 | # the same include-fixed folders no matter what sysroot | ||
231 | |||
232 | include_fixed="${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include-fixed" | ||
233 | for f in $(find ${include_fixed} -type f); do | ||
234 | case $f in | ||
235 | */include-fixed/linux/*) | ||
236 | continue | ||
237 | ;; | ||
238 | */include-fixed/*limits.h) | ||
239 | continue | ||
240 | ;; | ||
241 | */include-fixed/README) | ||
242 | continue | ||
243 | ;; | ||
244 | *) | ||
245 | # remove file and directory if empty | ||
246 | bbdebug 2 "Pruning $f" | ||
247 | rm $f | ||
248 | find $(dirname $f) -maxdepth 0 -empty -exec rmdir {} \; | ||
249 | ;; | ||
250 | esac | ||
251 | done | ||
252 | } | ||
253 | |||
254 | # Installing /usr/lib/gcc/* means we'd have two copies, one from gcc-cross | ||
255 | # and one from here. These can confuse gcc cross where includes use #include_next | ||
256 | # and builds track file dependencies (e.g. perl and its makedepends code). | ||
257 | # For determinism we don't install this ever and rely on the copy from gcc-cross. | ||
258 | # [YOCTO #7287] | ||
259 | SYSROOT_DIRS_IGNORE += "${libdir}/gcc" | ||