summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel McGregor <daniel.mcgregor@vecima.com>2016-07-15 15:08:20 -0600
committerOtavio Salvador <otavio@ossystems.com.br>2016-07-18 10:39:20 -0300
commit5019f33ecc30608431f1221b27cdc78d439df328 (patch)
tree58d4e7201bbdf8cde4d5f554d65543552c0ff1cc
parentdcef9ff46b9dc6f718cf2e63d48842dd0236bed1 (diff)
downloadmeta-java-5019f33ecc30608431f1221b27cdc78d439df328.tar.gz
openjdk-8: Detect compiler version
Some supported hosts still use GCC 4.X. These don't support the flags needed to make GCC 6 work, so check the GCC version and add appropriate compiler flags. This implementation will append flags for any gcc version, but it's only used for GCC 6 right now. Signed-off-by: Daniel McGregor <daniel.mcgregor@vecima.com> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
-rw-r--r--recipes-core/openjdk/openjdk-8-common.inc41
1 files changed, 39 insertions, 2 deletions
diff --git a/recipes-core/openjdk/openjdk-8-common.inc b/recipes-core/openjdk/openjdk-8-common.inc
index 74f686d..089f907 100644
--- a/recipes-core/openjdk/openjdk-8-common.inc
+++ b/recipes-core/openjdk/openjdk-8-common.inc
@@ -239,6 +239,43 @@ EXTRA_OECONF_append = "\
239 --with-update-version=${OPENJDK_UPDATE_VERSION} \ 239 --with-update-version=${OPENJDK_UPDATE_VERSION} \
240" 240"
241 241
242CFLAGS_append = " -fno-lifetime-dse -fno-delete-null-pointer-checks" 242# GCC 6 sets the default C++ standard to C++14 and introduces dead store
243CXXFLAGS_append = " -fno-lifetime-dse -fno-delete-null-pointer-checks" 243# elimination by default. OpenJDK 8 is not ready for either of these
244# changes.
245FLAGS_GCC6 = "-fno-lifetime-dse -fno-delete-null-pointer-checks"
246
247# All supported cross compilers support the compiler flags that were
248# added to make compilation with gcc6 work. But the host compiler for
249# native compilation is a different story: it may be too old (for example,
250# gcc 4.9.2 on Debian Wheezy). In that case we need to check what the
251# version is and only add the flags that are appropriate for that GCC
252# version.
253
254def version_specific_cflags(d):
255 extraflags = None
256 version = None
257
258 if bb.data.inherits_class('native', d):
259 from subprocess import Popen, PIPE
260
261 cmd = d.expand('${CPP} -P -').split()
262 cc = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
263 # This check is GCC specific. Clang always returns 4. For Clang
264 # __clang_major__ and __clang_minor__ need to be checked. Ideally
265 # __GNUC_MINOR__ would be checked as well, but for this recipe
266 # GCC major is all we care about.
267 version = cc.communicate(b'__GNUC__')[0].decode('utf-8')[0]
268 else:
269 # in the cross case, trust that GCCVERSION is correct. This won't
270 # work if the native toolchain is Clang, but as of this writing that
271 # doesn't work anyway.
272 version = d.getVar('GCCVERSION', expand=True)[0]
273
274 if int(version) >= 4:
275 extraflags = d.getVar('FLAGS_GCC%d' % int(version), True)
276
277 return ''.join(extraflags)
278
279CFLAGS_append = " ${@version_specific_cflags(d)}"
280CXXFLAGS_append = " ${@version_specific_cflags(d)}"
244CXX_append = " -std=gnu++98" 281CXX_append = " -std=gnu++98"