Message ID | 983f847ed905297a7f8e78b258e482c71b13232a.1346227179.git.baruch@tkos.co.il |
---|---|
State | Accepted |
Commit | 32f4957b153bdabe7af60d529942aca7d1a4783d |
Headers | show |
>>>>> "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.
>>>>> "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@busybox.net
Baruch> http://lists.busybox.net/mailman/listinfo/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
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))
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