* [Buildroot] [PATCH] poco: fix parallel build failure
@ 2012-08-29 8:04 Baruch Siach
2012-09-14 10:00 ` Peter Korsgaard
2012-09-17 19:27 ` Peter Korsgaard
0 siblings, 2 replies; 4+ messages in thread
From: Baruch Siach @ 2012-08-29 8:04 UTC (permalink / raw)
To: buildroot
This added patch should fix
http://autobuild.buildroot.net/results/1bf7e51ef30af9bbf5e423e80ef07212b83bdaf8/.
CROSSENV is now required also in the install stages to prevent a rebuild using
the host native toolchain.
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
---
I've never encountered this build failure on my machine, so I can't verify the
fix. If this patch is accepted, and we won't get these failures on the
autobuild machines, I'll try to upstream this patch.
package/poco/poco-fix-parallel-build.patch | 71 ++++++++++++++++++++++++++++
package/poco/poco.mk | 6 ++-
2 files changed, 75 insertions(+), 2 deletions(-)
create mode 100644 package/poco/poco-fix-parallel-build.patch
diff --git a/package/poco/poco-fix-parallel-build.patch b/package/poco/poco-fix-parallel-build.patch
new file mode 100644
index 0000000..39a1e3e
--- /dev/null
+++ b/package/poco/poco-fix-parallel-build.patch
@@ -0,0 +1,71 @@
+poco: fix parallel build
+
+The makefile rule for generating objects implicitly depends on the existence
+of the containing directory. The makefile dependecies do not reflect this,
+however. Instead, the final compilation producs depend on one of libdirs,
+bindirs, or static_bindirs, which in turn depend on objdirs. This breaks
+parallel build since the objdirs target may not complete before the object
+files build starts as follows (abbreviated):
+
+make[2]: Entering directory `/home/test/test/output/build/poco-1.4.3p1/Zip'
+mkdir -p /home/test/test/output/build/poco-1.4.3p1/Zip/obj/Linux/powerpc/release_static
+mkdir -p /home/test/test/output/build/poco-1.4.3p1/Zip/obj/Linux/powerpc/debug_static
+mkdir -p /home/test/test/output/build/poco-1.4.3p1/Zip/obj/Linux/powerpc/release_shared
+mkdir -p /home/test/test/output/build/poco-1.4.3p1/Zip/obj/Linux/powerpc/debug_shared
+** Compiling src/AutoDetectStream.cpp (release, shared)
+...
+Assembler messages:
+Fatal error: can't create /home/test/test/output/build/poco-1.4.3p1/Zip/obj/Linux/powerpc/release_shared/AutoDetectStream.o: No such file or directory
+
+Add direct dependency on the objects directories to fix this.
+
+Signed-off-by: Baruch Siach <baruch@tkos.co.il>
+---
+
+diff -Nur poco-1.4.3p1-all.orig/build/rules/compile poco-1.4.3p1-all/build/rules/compile
+--- poco-1.4.3p1-all.orig/build/rules/compile 2012-01-23 16:12:26.000000000 +0200
++++ poco-1.4.3p1-all/build/rules/compile 2012-08-28 13:10:17.000000000 +0300
+@@ -33,35 +32,35 @@
+ #
+ # Rules for compiling
+ #
+-$(OBJPATH_DEBUG_STATIC)/%.o: $(SRCDIR)/%.cpp $(DEPPATH)/%.d
++$(OBJPATH_DEBUG_STATIC)/%.o: $(SRCDIR)/%.cpp $(DEPPATH)/%.d objdirs
+ @echo "** Compiling" $< "(debug, static)"
+ $(CXX) $(INCLUDE) $(CXXFLAGS) $(DEBUGOPT_CXX) $(STATICOPT_CXX) -c $< -o $@
+
+-$(OBJPATH_RELEASE_STATIC)/%.o: $(SRCDIR)/%.cpp $(DEPPATH)/%.d
++$(OBJPATH_RELEASE_STATIC)/%.o: $(SRCDIR)/%.cpp $(DEPPATH)/%.d objdirs
+ @echo "** Compiling" $< "(release, static)"
+ $(CXX) $(INCLUDE) $(CXXFLAGS) $(RELEASEOPT_CXX) $(STATICOPT_CXX) -c $< -o $@
+
+-$(OBJPATH_DEBUG_STATIC)/%.o: $(SRCDIR)/%.c $(DEPPATH)/%.d
++$(OBJPATH_DEBUG_STATIC)/%.o: $(SRCDIR)/%.c $(DEPPATH)/%.d objdirs
+ @echo "** Compiling" $< "(debug, static)"
+ $(CC) $(INCLUDE) $(CFLAGS) $(DEBUGOPT_CC) $(STATICOPT_CC) -c $< -o $@
+
+-$(OBJPATH_RELEASE_STATIC)/%.o: $(SRCDIR)/%.c $(DEPPATH)/%.d
++$(OBJPATH_RELEASE_STATIC)/%.o: $(SRCDIR)/%.c $(DEPPATH)/%.d objdirs
+ @echo "** Compiling" $< "(release, static)"
+ $(CC) $(INCLUDE) $(CFLAGS) $(RELEASEOPT_CC) $(STATICOPT_CC) -c $< -o $@
+
+-$(OBJPATH_DEBUG_SHARED)/%.o: $(SRCDIR)/%.cpp $(DEPPATH)/%.d
++$(OBJPATH_DEBUG_SHARED)/%.o: $(SRCDIR)/%.cpp $(DEPPATH)/%.d objdirs
+ @echo "** Compiling" $< "(debug, shared)"
+ $(CXX) $(INCLUDE) $(CXXFLAGS) $(DEBUGOPT_CXX) $(SHAREDOPT_CXX) -c $< -o $@
+
+-$(OBJPATH_RELEASE_SHARED)/%.o: $(SRCDIR)/%.cpp $(DEPPATH)/%.d
++$(OBJPATH_RELEASE_SHARED)/%.o: $(SRCDIR)/%.cpp $(DEPPATH)/%.d objdirs
+ @echo "** Compiling" $< "(release, shared)"
+ $(CXX) $(INCLUDE) $(CXXFLAGS) $(RELEASEOPT_CXX) $(SHAREDOPT_CXX) -c $< -o $@
+
+-$(OBJPATH_DEBUG_SHARED)/%.o: $(SRCDIR)/%.c $(DEPPATH)/%.d
++$(OBJPATH_DEBUG_SHARED)/%.o: $(SRCDIR)/%.c $(DEPPATH)/%.d objdirs
+ @echo "** Compiling" $< "(debug, shared)"
+ $(CC) $(INCLUDE) $(CFLAGS) $(DEBUGOPT_CC) $(SHAREDOPT_CC) -c $< -o $@
+
+-$(OBJPATH_RELEASE_SHARED)/%.o: $(SRCDIR)/%.c $(DEPPATH)/%.d
++$(OBJPATH_RELEASE_SHARED)/%.o: $(SRCDIR)/%.c $(DEPPATH)/%.d objdirs
+ @echo "** Compiling" $< "(release, shared)"
+ $(CC) $(INCLUDE) $(CFLAGS) $(RELEASEOPT_CC) $(SHAREDOPT_CC) -c $< -o $@
+
diff --git a/package/poco/poco.mk b/package/poco/poco.mk
index f74c2b1..c73d6b6 100644
--- a/package/poco/poco.mk
+++ b/package/poco/poco.mk
@@ -50,11 +50,13 @@ define POCO_BUILD_CMDS
endef
define POCO_INSTALL_STAGING_CMDS
- $(MAKE) DESTDIR=$(STAGING_DIR) POCO_TARGET_OSARCH=$(ARCH) install -C $(@D)
+ $(MAKE) DESTDIR=$(STAGING_DIR) POCO_TARGET_OSARCH=$(ARCH) \
+ CROSSENV=$(TARGET_CROSS) install -C $(@D)
endef
define POCO_INSTALL_TARGET_CMDS
- $(MAKE) DESTDIR=$(TARGET_DIR) POCO_TARGET_OSARCH=$(ARCH) install -C $(@D)
+ $(MAKE) DESTDIR=$(TARGET_DIR) POCO_TARGET_OSARCH=$(ARCH) \
+ CROSSENV=$(TARGET_CROSS) install -C $(@D)
endef
$(eval $(generic-package))
--
1.7.10.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH] poco: fix parallel build failure
2012-08-29 8:04 [Buildroot] [PATCH] poco: fix parallel build failure Baruch Siach
@ 2012-09-14 10:00 ` Peter Korsgaard
2012-09-17 19:27 ` Peter Korsgaard
1 sibling, 0 replies; 4+ messages in thread
From: Peter Korsgaard @ 2012-09-14 10:00 UTC (permalink / raw)
To: buildroot
>>>>> "Baruch" == Baruch Siach <baruch@tkos.co.il> writes:
Baruch> This added patch should fix
Baruch> http://autobuild.buildroot.net/results/1bf7e51ef30af9bbf5e423e80ef07212b83bdaf8/.
Baruch> CROSSENV is now required also in the install stages to prevent a rebuild using
Baruch> the host native toolchain.
Baruch> Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Baruch> ---
Baruch> I've never encountered this build failure on my machine, so I
Baruch> can't verify the fix. If this patch is accepted, and we won't
Baruch> get these failures on the autobuild machines, I'll try to
Baruch> upstream this patch.
Committed, thanks. Don't forget to send patch upstream.
--
Bye, Peter Korsgaard
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH] poco: fix parallel build failure
2012-08-29 8:04 [Buildroot] [PATCH] poco: fix parallel build failure Baruch Siach
2012-09-14 10:00 ` Peter Korsgaard
@ 2012-09-17 19:27 ` Peter Korsgaard
2012-09-19 6:40 ` Baruch Siach
1 sibling, 1 reply; 4+ messages in thread
From: Peter Korsgaard @ 2012-09-17 19:27 UTC (permalink / raw)
To: buildroot
>>>>> "Baruch" == Baruch Siach <baruch@tkos.co.il> writes:
Baruch> This added patch should fix
Baruch> http://autobuild.buildroot.net/results/1bf7e51ef30af9bbf5e423e80ef07212b83bdaf8/.
Baruch> CROSSENV is now required also in the install stages to prevent
Baruch> a rebuild using the host native toolchain.
Sorry, this doesn't actually work. We now have
http://autobuild.buildroot.net/results/1cca8b4115674f12884bcbc0c680efed0fb939ae/
Which is because poco now gets rebuilt at the install staging/target
steps, where we're not passing MYSQL_LIBDIR/INCDIR as all the .o targets
are considered out of date because of the phony objdirs prerequisite.
I don't right away see a clean solution to it (you could use order-only
('|') rules, but it isn't really pretty), so I simply reverted this and
just changed the build step to use MAKE1.
Feel free to submit a correct patch insted.
Baruch> Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Baruch> ---
Baruch> I've never encountered this build failure on my machine, so I can't verify the
Baruch> fix. If this patch is accepted, and we won't get these failures on the
Baruch> autobuild machines, I'll try to upstream this patch.
Baruch> package/poco/poco-fix-parallel-build.patch | 71 ++++++++++++++++++++++++++++
Baruch> package/poco/poco.mk | 6 ++-
Baruch> 2 files changed, 75 insertions(+), 2 deletions(-)
Baruch> create mode 100644 package/poco/poco-fix-parallel-build.patch
Baruch> diff --git a/package/poco/poco-fix-parallel-build.patch b/package/poco/poco-fix-parallel-build.patch
Baruch> new file mode 100644
Baruch> index 0000000..39a1e3e
Baruch> --- /dev/null
Baruch> +++ b/package/poco/poco-fix-parallel-build.patch
Baruch> @@ -0,0 +1,71 @@
Baruch> +poco: fix parallel build
Baruch> +
Baruch> +The makefile rule for generating objects implicitly depends on the existence
Baruch> +of the containing directory. The makefile dependecies do not reflect this,
Baruch> +however. Instead, the final compilation producs depend on one of libdirs,
Baruch> +bindirs, or static_bindirs, which in turn depend on objdirs. This breaks
Baruch> +parallel build since the objdirs target may not complete before the object
Baruch> +files build starts as follows (abbreviated):
Baruch> +
Baruch> +make[2]: Entering directory `/home/test/test/output/build/poco-1.4.3p1/Zip'
Baruch> +mkdir -p /home/test/test/output/build/poco-1.4.3p1/Zip/obj/Linux/powerpc/release_static
Baruch> +mkdir -p /home/test/test/output/build/poco-1.4.3p1/Zip/obj/Linux/powerpc/debug_static
Baruch> +mkdir -p /home/test/test/output/build/poco-1.4.3p1/Zip/obj/Linux/powerpc/release_shared
Baruch> +mkdir -p /home/test/test/output/build/poco-1.4.3p1/Zip/obj/Linux/powerpc/debug_shared
Baruch> +** Compiling src/AutoDetectStream.cpp (release, shared)
Baruch> +...
Baruch> +Assembler messages:
Baruch> +Fatal error: can't create /home/test/test/output/build/poco-1.4.3p1/Zip/obj/Linux/powerpc/release_shared/AutoDetectStream.o: No such file or directory
Baruch> +
Baruch> +Add direct dependency on the objects directories to fix this.
Baruch> +
Baruch> +Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Baruch> +---
Baruch> +
Baruch> +diff -Nur poco-1.4.3p1-all.orig/build/rules/compile poco-1.4.3p1-all/build/rules/compile
Baruch> +--- poco-1.4.3p1-all.orig/build/rules/compile 2012-01-23 16:12:26.000000000 +0200
Baruch> ++++ poco-1.4.3p1-all/build/rules/compile 2012-08-28 13:10:17.000000000 +0300
Baruch> +@@ -33,35 +32,35 @@
Baruch> + #
Baruch> + # Rules for compiling
Baruch> + #
Baruch> +-$(OBJPATH_DEBUG_STATIC)/%.o: $(SRCDIR)/%.cpp $(DEPPATH)/%.d
Baruch> ++$(OBJPATH_DEBUG_STATIC)/%.o: $(SRCDIR)/%.cpp $(DEPPATH)/%.d objdirs
Baruch> + @echo "** Compiling" $< "(debug, static)"
Baruch> + $(CXX) $(INCLUDE) $(CXXFLAGS) $(DEBUGOPT_CXX) $(STATICOPT_CXX) -c $< -o $@
Baruch> +
Baruch> +-$(OBJPATH_RELEASE_STATIC)/%.o: $(SRCDIR)/%.cpp $(DEPPATH)/%.d
Baruch> ++$(OBJPATH_RELEASE_STATIC)/%.o: $(SRCDIR)/%.cpp $(DEPPATH)/%.d objdirs
Baruch> + @echo "** Compiling" $< "(release, static)"
Baruch> + $(CXX) $(INCLUDE) $(CXXFLAGS) $(RELEASEOPT_CXX) $(STATICOPT_CXX) -c $< -o $@
Baruch> +
Baruch> +-$(OBJPATH_DEBUG_STATIC)/%.o: $(SRCDIR)/%.c $(DEPPATH)/%.d
Baruch> ++$(OBJPATH_DEBUG_STATIC)/%.o: $(SRCDIR)/%.c $(DEPPATH)/%.d objdirs
Baruch> + @echo "** Compiling" $< "(debug, static)"
Baruch> + $(CC) $(INCLUDE) $(CFLAGS) $(DEBUGOPT_CC) $(STATICOPT_CC) -c $< -o $@
Baruch> +
Baruch> +-$(OBJPATH_RELEASE_STATIC)/%.o: $(SRCDIR)/%.c $(DEPPATH)/%.d
Baruch> ++$(OBJPATH_RELEASE_STATIC)/%.o: $(SRCDIR)/%.c $(DEPPATH)/%.d objdirs
Baruch> + @echo "** Compiling" $< "(release, static)"
Baruch> + $(CC) $(INCLUDE) $(CFLAGS) $(RELEASEOPT_CC) $(STATICOPT_CC) -c $< -o $@
Baruch> +
Baruch> +-$(OBJPATH_DEBUG_SHARED)/%.o: $(SRCDIR)/%.cpp $(DEPPATH)/%.d
Baruch> ++$(OBJPATH_DEBUG_SHARED)/%.o: $(SRCDIR)/%.cpp $(DEPPATH)/%.d objdirs
Baruch> + @echo "** Compiling" $< "(debug, shared)"
Baruch> + $(CXX) $(INCLUDE) $(CXXFLAGS) $(DEBUGOPT_CXX) $(SHAREDOPT_CXX) -c $< -o $@
Baruch> +
Baruch> +-$(OBJPATH_RELEASE_SHARED)/%.o: $(SRCDIR)/%.cpp $(DEPPATH)/%.d
Baruch> ++$(OBJPATH_RELEASE_SHARED)/%.o: $(SRCDIR)/%.cpp $(DEPPATH)/%.d objdirs
Baruch> + @echo "** Compiling" $< "(release, shared)"
Baruch> + $(CXX) $(INCLUDE) $(CXXFLAGS) $(RELEASEOPT_CXX) $(SHAREDOPT_CXX) -c $< -o $@
Baruch> +
Baruch> +-$(OBJPATH_DEBUG_SHARED)/%.o: $(SRCDIR)/%.c $(DEPPATH)/%.d
Baruch> ++$(OBJPATH_DEBUG_SHARED)/%.o: $(SRCDIR)/%.c $(DEPPATH)/%.d objdirs
Baruch> + @echo "** Compiling" $< "(debug, shared)"
Baruch> + $(CC) $(INCLUDE) $(CFLAGS) $(DEBUGOPT_CC) $(SHAREDOPT_CC) -c $< -o $@
Baruch> +
Baruch> +-$(OBJPATH_RELEASE_SHARED)/%.o: $(SRCDIR)/%.c $(DEPPATH)/%.d
Baruch> ++$(OBJPATH_RELEASE_SHARED)/%.o: $(SRCDIR)/%.c $(DEPPATH)/%.d objdirs
Baruch> + @echo "** Compiling" $< "(release, shared)"
Baruch> + $(CC) $(INCLUDE) $(CFLAGS) $(RELEASEOPT_CC) $(SHAREDOPT_CC) -c $< -o $@
Baruch> +
Baruch> diff --git a/package/poco/poco.mk b/package/poco/poco.mk
Baruch> index f74c2b1..c73d6b6 100644
Baruch> --- a/package/poco/poco.mk
Baruch> +++ b/package/poco/poco.mk
Baruch> @@ -50,11 +50,13 @@ define POCO_BUILD_CMDS
Baruch> endef
Baruch> define POCO_INSTALL_STAGING_CMDS
Baruch> - $(MAKE) DESTDIR=$(STAGING_DIR) POCO_TARGET_OSARCH=$(ARCH) install -C $(@D)
Baruch> + $(MAKE) DESTDIR=$(STAGING_DIR) POCO_TARGET_OSARCH=$(ARCH) \
Baruch> + CROSSENV=$(TARGET_CROSS) install -C $(@D)
Baruch> endef
Baruch> define POCO_INSTALL_TARGET_CMDS
Baruch> - $(MAKE) DESTDIR=$(TARGET_DIR) POCO_TARGET_OSARCH=$(ARCH) install -C $(@D)
Baruch> + $(MAKE) DESTDIR=$(TARGET_DIR) POCO_TARGET_OSARCH=$(ARCH) \
Baruch> + CROSSENV=$(TARGET_CROSS) install -C $(@D)
Baruch> endef
Baruch> $(eval $(generic-package))
Baruch> --
Baruch> 1.7.10.4
Baruch> _______________________________________________
Baruch> buildroot mailing list
Baruch> buildroot at busybox.net
Baruch> http://lists.busybox.net/mailman/listinfo/buildroot
--
Bye, Peter Korsgaard
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH] poco: fix parallel build failure
2012-09-17 19:27 ` Peter Korsgaard
@ 2012-09-19 6:40 ` Baruch Siach
0 siblings, 0 replies; 4+ messages in thread
From: Baruch Siach @ 2012-09-19 6:40 UTC (permalink / raw)
To: buildroot
Hi Peter,
On Mon, Sep 17, 2012 at 09:27:21PM +0200, Peter Korsgaard wrote:
> >>>>> "Baruch" == Baruch Siach <baruch@tkos.co.il> writes:
> Baruch> This added patch should fix
> Baruch> http://autobuild.buildroot.net/results/1bf7e51ef30af9bbf5e423e80ef07212b83bdaf8/.
>
> Baruch> CROSSENV is now required also in the install stages to prevent
> Baruch> a rebuild using the host native toolchain.
>
> Sorry, this doesn't actually work. We now have
>
> http://autobuild.buildroot.net/results/1cca8b4115674f12884bcbc0c680efed0fb939ae/
>
> Which is because poco now gets rebuilt at the install staging/target
> steps, where we're not passing MYSQL_LIBDIR/INCDIR as all the .o targets
> are considered out of date because of the phony objdirs prerequisite.
>
> I don't right away see a clean solution to it (you could use order-only
> ('|') rules, but it isn't really pretty), so I simply reverted this and
> just changed the build step to use MAKE1.
>
> Feel free to submit a correct patch insted.
Thanks. I'll work on something better if I have time.
baruch
--
http://baruch.siach.name/blog/ ~. .~ Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
- baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-09-19 6:40 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-29 8:04 [Buildroot] [PATCH] poco: fix parallel build failure Baruch Siach
2012-09-14 10:00 ` Peter Korsgaard
2012-09-17 19:27 ` Peter Korsgaard
2012-09-19 6:40 ` Baruch Siach
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox