summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndré Draszik <andre.draszik@jci.com>2018-08-13 16:09:18 +0100
committerRichard Leitner <dev@g0hl1n.net>2018-08-13 22:55:05 +0200
commitbb3dcf4228fb457939680dc9df3df2bda681abfb (patch)
treeb282afae242e3d8c4b4ea988f783aee6010fc383
parent3c710bf3a90fde0cf6d590ffefc349bfb9a1c677 (diff)
downloadmeta-java-bb3dcf4228fb457939680dc9df3df2bda681abfb.tar.gz
openjdk-build-helper: move c compiler flags retrieval to here (from openjdk-8)
Icedtea 7 and OpenJDK 7 will need to apply new compiler flags for certain compiler version without breaking support for older (host) compilers. Move here so that the same code can be re-used. Signed-off-by: André Draszik <andre.draszik@jci.com> Signed-off-by: Richard Leitner <richard.leitner@skidata.com>
-rw-r--r--classes/openjdk-build-helper.bbclass35
-rw-r--r--recipes-core/openjdk/openjdk-8-common.inc45
2 files changed, 39 insertions, 41 deletions
diff --git a/classes/openjdk-build-helper.bbclass b/classes/openjdk-build-helper.bbclass
index 785ddf0..78906b0 100644
--- a/classes/openjdk-build-helper.bbclass
+++ b/classes/openjdk-build-helper.bbclass
@@ -14,3 +14,38 @@ def openjdk_build_helper_get_parallel_make(d):
14 return 1 14 return 1
15 15
16 return pm.partition('-j')[2].strip().split(' ')[0] 16 return pm.partition('-j')[2].strip().split(' ')[0]
17
18# All supported cross compilers support the compiler flags that were
19# added to make compilation with gcc6 work. But the host compiler for
20# native compilation is a different story: it may be too old (for example,
21# gcc 4.9.2 on Debian Wheezy). In that case we need to check what the
22# version is and only add the flags that are appropriate for that GCC
23# version.
24def openjdk_build_helper_get_cflags_by_cc_version(d, version):
25 if version.isdigit():
26 return d.getVar('FLAGS_GCC%d' % int(version)) or ''
27 return ''
28
29def openjdk_build_helper_get_build_cflags(d):
30 def get_build_cc_version(build_cc):
31 from subprocess import Popen, PIPE
32 cmd = d.expand('%s -dumpversion' % build_cc).split()
33 cc = Popen(cmd, stdout=PIPE, stderr=PIPE)
34 return cc.communicate()[0].decode('utf-8')[0]
35
36 build_cc = d.getVar('BUILD_CC')
37 version = get_build_cc_version(build_cc)
38 return openjdk_build_helper_get_cflags_by_cc_version(d, version)
39
40def openjdk_build_helper_get_target_cflags(d):
41 import re
42
43 # in the cross case, trust that GCCVERSION is correct. This won't
44 # work if the native toolchain is Clang, but as of this writing that
45 # doesn't work anyway.
46 version = d.getVar('GCCVERSION')[0]
47 # skip non digit characters at the beginning, e.g. from "linaro-6.2%"
48 match = re.search("\d", version)
49 if match:
50 version = version[match.start():]
51 return openjdk_build_helper_get_cflags_by_cc_version(d, version)
diff --git a/recipes-core/openjdk/openjdk-8-common.inc b/recipes-core/openjdk/openjdk-8-common.inc
index 0c77d7c..1c33a3b 100644
--- a/recipes-core/openjdk/openjdk-8-common.inc
+++ b/recipes-core/openjdk/openjdk-8-common.inc
@@ -219,46 +219,9 @@ FLAGS_GCC6 = "-fno-lifetime-dse -fno-delete-null-pointer-checks"
219FLAGS_GCC7 = "-fno-lifetime-dse -fno-delete-null-pointer-checks" 219FLAGS_GCC7 = "-fno-lifetime-dse -fno-delete-null-pointer-checks"
220FLAGS_GCC8 = "-fno-lifetime-dse -fno-delete-null-pointer-checks -Wno-error=return-type" 220FLAGS_GCC8 = "-fno-lifetime-dse -fno-delete-null-pointer-checks -Wno-error=return-type"
221 221
222# All supported cross compilers support the compiler flags that were
223# added to make compilation with gcc6 work. But the host compiler for
224# native compilation is a different story: it may be too old (for example,
225# gcc 4.9.2 on Debian Wheezy). In that case we need to check what the
226# version is and only add the flags that are appropriate for that GCC
227# version.
228
229def get_cflags_by_cc_version(d, version):
230 if version.isdigit():
231 return d.getVar('FLAGS_GCC%d' % int(version)) or ''
232 return ''
233
234def get_build_cflags(d):
235 def get_build_cc_version(build_cc):
236 from subprocess import Popen, PIPE
237 cmd = d.expand('%s -dumpversion' % build_cc).split()
238 cc = Popen(cmd, stdout=PIPE, stderr=PIPE)
239 return cc.communicate()[0].decode('utf-8')[0]
240
241 build_cc = d.getVar('BUILD_CC')
242 version = get_build_cc_version(build_cc)
243 return get_cflags_by_cc_version(d, version)
244
245def get_target_cflags(d):
246 import re
247
248 # in the cross case, trust that GCCVERSION is correct. This won't
249 # work if the native toolchain is Clang, but as of this writing that
250 # doesn't work anyway.
251 version = d.getVar('GCCVERSION')[0]
252 # skip non digit characters at the beginning, e.g. from "linaro-6.2%"
253 match = re.search("\d", version)
254 if match:
255 version = version[match.start():]
256 return get_cflags_by_cc_version(d, version)
257
258
259# flags for -native, and for bits that need a host-tool during -cross 222# flags for -native, and for bits that need a host-tool during -cross
260BUILD_CFLAGS_append = " ${@get_build_cflags(d)}" 223BUILD_CFLAGS_append = " ${@openjdk_build_helper_get_build_cflags(d)}"
261BUILD_CXXFLAGS_append = " ${@get_build_cflags(d)}" 224BUILD_CXXFLAGS_append = " ${@openjdk_build_helper_get_build_cflags(d)}"
262# flags for -cross 225# flags for -cross
263TARGET_CFLAGS_append = " ${@get_target_cflags(d)}" 226TARGET_CFLAGS_append = " ${@openjdk_build_helper_get_target_cflags(d)}"
264TARGET_CXXFLAGS_append = " ${@get_target_cflags(d)}" 227TARGET_CXXFLAGS_append = " ${@openjdk_build_helper_get_target_cflags(d)}"