summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2014-11-25 17:58:10 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-12-03 12:23:56 +0000
commitf82156640b1888d5a470db19bed9fc67f198f5ba (patch)
tree58c30a8f933bdea29fc481b2e0c04d3a6e531354
parent893f9b21878ef4372331b0e8ab0ca246567830d4 (diff)
downloadpoky-f82156640b1888d5a470db19bed9fc67f198f5ba.tar.gz
gcc: Rework shared work
The current implementation of shared work for gcc is at best confusing. It relies on the fetch/unpack/patch tasks having exactly the same stamps and if this gets broken for some reason, its hard to figure out what the problem is. It also leads to complex code in bitbake. The benefits of shared work for gcc are clear but a better approach is needed. This patch adjusts things so that a single new recipe (gcc-source) provides the fetch/unpack/patch/preconfigure tasks, the rest of gcc simply depends on these tasks and have no fetch/unpack/patch tasks of their own. This means we should get the significant benefits (disk usage/performance) of the single source tree but in a way which has less potential for problems and is easier for people to understand. The cost is an extra recipe/some inc files which is probably a good tradeoff. (From OE-Core rev: ceaa0a448dc5ebddb4f7fb94fb8a503a1c0248c3) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/recipes-devtools/gcc/gcc-common.inc51
-rw-r--r--meta/recipes-devtools/gcc/gcc-configure-common.inc1
-rw-r--r--meta/recipes-devtools/gcc/gcc-shared-source.inc6
-rw-r--r--meta/recipes-devtools/gcc/gcc-source.inc34
-rw-r--r--meta/recipes-devtools/gcc/gcc-source_4.8.bb2
-rw-r--r--meta/recipes-devtools/gcc/gcc-source_4.9.bb2
-rw-r--r--meta/recipes-devtools/gcc/libgcc-common.inc2
7 files changed, 48 insertions, 50 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-common.inc b/meta/recipes-devtools/gcc/gcc-common.inc
index 9d41f651ed..04c701a974 100644
--- a/meta/recipes-devtools/gcc/gcc-common.inc
+++ b/meta/recipes-devtools/gcc/gcc-common.inc
@@ -79,19 +79,6 @@ ${GNU_MIRROR}/gcc http://mirrors.rcn.net/pub/sourceware/gcc/releases/ \n \
79${GNU_MIRROR}/gcc http://gcc.get-software.com/releases/ \n \ 79${GNU_MIRROR}/gcc http://gcc.get-software.com/releases/ \n \
80${GNU_MIRROR}/gcc http://gcc.get-software.com/releases/ \n \ 80${GNU_MIRROR}/gcc http://gcc.get-software.com/releases/ \n \
81" 81"
82
83python do_preconfigure () {
84 import subprocess
85 cmd = d.expand('PATH=${PATH} cd ${S} && gnu-configize')
86 subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
87 # See 0044-gengtypes.patch, we need to regenerate this file
88 bb.utils.remove(d.expand("${S}/gcc/gengtype-lex.c"))
89 cmd = d.expand("sed -i 's/BUILD_INFO=info/BUILD_INFO=/' ${S}/gcc/configure")
90 subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
91}
92addtask do_preconfigure after do_patch before do_configure
93do_preconfigure[depends] += "gnu-config-native:do_populate_sysroot autoconf-native:do_populate_sysroot"
94
95# 82#
96# Set some default values 83# Set some default values
97# 84#
@@ -101,48 +88,12 @@ BINV = "${PV}"
101S = "${TMPDIR}/work-shared/gcc-${PV}-${PR}/gcc-${PV}" 88S = "${TMPDIR}/work-shared/gcc-${PV}-${PR}/gcc-${PV}"
102B = "${WORKDIR}/gcc-${PV}/build.${HOST_SYS}.${TARGET_SYS}" 89B = "${WORKDIR}/gcc-${PV}/build.${HOST_SYS}.${TARGET_SYS}"
103 90
104# SS means Shared Stamps directory
105SS = "${TMPDIR}/stamps/work-shared/gcc-${PV}-${PR}"
106do_fetch[stamp-base] = "${SS}"
107do_unpack[stamp-base] = "${SS}"
108do_patch[stamp-base] = "${SS}"
109do_preconfigure[stamp-base] = "${SS}"
110SSCLEAN = "${TMPDIR}/stamps/work-shared/gcc-[0-9]*-*"
111do_fetch[stamp-base-clean] = "${SSCLEAN}"
112do_unpack[stamp-base-clean] = "${SSCLEAN}"
113do_unpack[umask] = "022"
114do_patch[stamp-base-clean] = "${SSCLEAN}"
115do_preconfigure[stamp-base-clean] = "${SSCLEAN}"
116
117# SW means Shared Work directory
118SW = "${TMPDIR}/work-shared/gcc-${PV}-${PR}"
119SSTATE_SWSPEC = "sstate:gcc::${PV}:${PR}::${SSTATE_VERSION}:"
120WORKDIR_task-unpack = "${SW}"
121WORKDIR_task-patch = "${SW}"
122WORKDIR_task-preconfigure = "${SW}"
123
124target_includedir ?= "${includedir}" 91target_includedir ?= "${includedir}"
125target_libdir ?= "${libdir}" 92target_libdir ?= "${libdir}"
126target_base_libdir ?= "${base_libdir}" 93target_base_libdir ?= "${base_libdir}"
127target_prefix ?= "${prefix}" 94target_prefix ?= "${prefix}"
128 95
129CLEANFUNCS += "workshared_clean" 96# We need to ensure that for the shared work directory, the do_patch signatures match
130# The do_clean should be exclusive since share ${S}
131do_clean[lockfiles] = "${SW}.clean.lock"
132
133python workshared_clean () {
134 """clear the source directory"""
135 dir = d.expand("${SW}")
136 bb.note("Removing " + dir)
137 oe.path.remove(dir)
138
139 """clear the the stamps in work-shared"""
140 dir = "%s.*" % bb.data.expand(d.getVarFlag('do_fetch', 'stamp-base', True), d)
141 bb.note("Removing " + dir)
142 oe.path.remove(dir)
143}
144
145# We need to ensure that for the shared work directory, the do_patch singatures match
146# The real WORKDIR location isn't a dependency for the shared workdir. 97# The real WORKDIR location isn't a dependency for the shared workdir.
147src_patches[vardepsexclude] = "WORKDIR" 98src_patches[vardepsexclude] = "WORKDIR"
148should_apply[vardepsexclude] += "PN" 99should_apply[vardepsexclude] += "PN"
diff --git a/meta/recipes-devtools/gcc/gcc-configure-common.inc b/meta/recipes-devtools/gcc/gcc-configure-common.inc
index f33678c75a..0693118992 100644
--- a/meta/recipes-devtools/gcc/gcc-configure-common.inc
+++ b/meta/recipes-devtools/gcc/gcc-configure-common.inc
@@ -1,4 +1,5 @@
1require gcc-multilib-config.inc 1require gcc-multilib-config.inc
2require gcc-shared-source.inc
2# 3#
3# Build the list of lanaguages to build. 4# Build the list of lanaguages to build.
4# 5#
diff --git a/meta/recipes-devtools/gcc/gcc-shared-source.inc b/meta/recipes-devtools/gcc/gcc-shared-source.inc
new file mode 100644
index 0000000000..ec30865c6a
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-shared-source.inc
@@ -0,0 +1,6 @@
1deltask do_fetch
2deltask do_unpack
3deltask do_patch
4
5do_configure[depends] += "gcc-source:do_preconfigure"
6do_populate_lic[depends] += "gcc-source:do_unpack"
diff --git a/meta/recipes-devtools/gcc/gcc-source.inc b/meta/recipes-devtools/gcc/gcc-source.inc
new file mode 100644
index 0000000000..968830aa35
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-source.inc
@@ -0,0 +1,34 @@
1deltask do_configure
2deltask do_compile
3deltask do_package
4deltask do_package_write_rpm
5deltask do_package_write_ipk
6deltask do_package_write_deb
7deltask do_install
8deltask do_populate_sysroot
9deltask do_populate_lic
10deltask do_package_qa
11deltask do_packagedata
12deltask do_rm_work
13
14WORKDIR = "${TMPDIR}/work-shared/gcc-${PV}-${PR}"
15SSTATE_SWSPEC = "sstate:gcc::${PV}:${PR}::${SSTATE_VERSION}:"
16
17STAMP = "${STAMPS_DIR}/work-shared/gcc-${PV}-${PR}"
18STAMPCLEAN = "${STAMPS_DIR}/work-shared/gcc-[0-9]*-*"
19
20INHIBIT_DEFAULT_DEPS = "1"
21DEPENDS = ""
22
23python do_preconfigure () {
24 import subprocess
25 cmd = d.expand('PATH=${PATH} cd ${S} && gnu-configize')
26 subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
27 # See 0044-gengtypes.patch, we need to regenerate this file
28 bb.utils.remove(d.expand("${S}/gcc/gengtype-lex.c"))
29 cmd = d.expand("sed -i 's/BUILD_INFO=info/BUILD_INFO=/' ${S}/gcc/configure")
30 subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
31}
32addtask do_preconfigure after do_patch
33do_preconfigure[depends] += "gnu-config-native:do_populate_sysroot autoconf-native:do_populate_sysroot"
34
diff --git a/meta/recipes-devtools/gcc/gcc-source_4.8.bb b/meta/recipes-devtools/gcc/gcc-source_4.8.bb
new file mode 100644
index 0000000000..234b82efc6
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-source_4.8.bb
@@ -0,0 +1,2 @@
1require recipes-devtools/gcc/gcc-${PV}.inc
2require recipes-devtools/gcc/gcc-source.inc
diff --git a/meta/recipes-devtools/gcc/gcc-source_4.9.bb b/meta/recipes-devtools/gcc/gcc-source_4.9.bb
new file mode 100644
index 0000000000..234b82efc6
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-source_4.9.bb
@@ -0,0 +1,2 @@
1require recipes-devtools/gcc/gcc-${PV}.inc
2require recipes-devtools/gcc/gcc-source.inc
diff --git a/meta/recipes-devtools/gcc/libgcc-common.inc b/meta/recipes-devtools/gcc/libgcc-common.inc
index c81a80c6de..1e1e1c11fd 100644
--- a/meta/recipes-devtools/gcc/libgcc-common.inc
+++ b/meta/recipes-devtools/gcc/libgcc-common.inc
@@ -1,5 +1,7 @@
1BPN = "libgcc" 1BPN = "libgcc"
2 2
3require gcc-shared-source.inc
4
3INHIBIT_DEFAULT_DEPS = "1" 5INHIBIT_DEFAULT_DEPS = "1"
4 6
5do_configure () { 7do_configure () {