Patchwork uclibc/arm: don't install ldd.host and ldconfig.host if !HAVE_SHARED

login
register
mail settings
Submitter Axel Lin
Date July 28, 2013, 4:48 p.m.
Message ID <1375030117.13990.1.camel@phoenix>
Download mbox | patch
Permalink /patch/262607/
State Rejected
Headers show

Comments

Axel Lin - July 28, 2013, 4:48 p.m.
ldd.host and ldconfig.host will be built only when HAVE_SHARED=y.

This fixes below build error when
 # BR2_BFIN_FLAT is not set
 # ARCH_HAS_MMU is not set
 UCLIBC_FORMAT_FLAT=y

make[1]: Leaving directory `/opt/test/buildroot/buildroot/output/build/uclibc-0.9.33.2'
/usr/bin/install -D -m 0755 /opt/test/buildroot/buildroot/output/build/uclibc-0.9.33.2/utils/ldd.host /opt/test/buildroot/buildroot/output/host/usr/bin/ldd
/usr/bin/install: cannot stat '/opt/test/buildroot/buildroot/output/build/uclibc-0.9.33.2/utils/ldd.host': No such file or directory
make: *** [/opt/test/buildroot/buildroot/output/build/uclibc-0.9.33.2/.stamp_staging_installed] Error 1

Signed-off-by: Axel Lin <axel.lin@ingics.com>
---
 package/uclibc/uclibc.mk | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)
Thomas Petazzoni - July 28, 2013, 4:59 p.m.
Dear Axel Lin,

On Mon, 29 Jul 2013 00:48:37 +0800, Axel Lin wrote:
> ldd.host and ldconfig.host will be built only when HAVE_SHARED=y.
> 
> This fixes below build error when
>  # BR2_BFIN_FLAT is not set
>  # ARCH_HAS_MMU is not set
>  UCLIBC_FORMAT_FLAT=y
> 
> make[1]: Leaving directory `/opt/test/buildroot/buildroot/output/build/uclibc-0.9.33.2'
> /usr/bin/install -D -m 0755 /opt/test/buildroot/buildroot/output/build/uclibc-0.9.33.2/utils/ldd.host /opt/test/buildroot/buildroot/output/host/usr/bin/ldd
> /usr/bin/install: cannot stat '/opt/test/buildroot/buildroot/output/build/uclibc-0.9.33.2/utils/ldd.host': No such file or directory
> make: *** [/opt/test/buildroot/buildroot/output/build/uclibc-0.9.33.2/.stamp_staging_installed] Error 1

Which Buildroot configuration triggers this?


> +	if grep -q HAVE_SHARED=y $(@D)/.config; then \
> +		$(INSTALL) -D -m 0755 $(@D)/utils/ldd.host $(HOST_DIR)/usr/bin/ldd; \
> +		ln -sf ldd $(HOST_DIR)/usr/bin/$(GNU_TARGET_NAME)-ldd; \
> +		$(INSTALL) -D -m 0755 $(@D)/utils/ldconfig.host $(HOST_DIR)/usr/bin/ldconfig; \
> +		ln -sf ldconfig $(HOST_DIR)/usr/bin/$(GNU_TARGET_NAME)-ldconfig; \
> +	fi

I'd prefer not to grep into the uClibc configuration, and instead find
out which Buildroot configuration triggers this problem and find a
proper solution to it.

Thanks,

Thomas
Axel Lin - July 28, 2013, 5:17 p.m.
2013/7/29 Thomas Petazzoni <thomas.petazzoni@free-electrons.com>:
> Dear Axel Lin,
>
> On Mon, 29 Jul 2013 00:48:37 +0800, Axel Lin wrote:
>> ldd.host and ldconfig.host will be built only when HAVE_SHARED=y.
>>
>> This fixes below build error when
>>  # BR2_BFIN_FLAT is not set
>>  # ARCH_HAS_MMU is not set
>>  UCLIBC_FORMAT_FLAT=y
>>
>> make[1]: Leaving directory `/opt/test/buildroot/buildroot/output/build/uclibc-0.9.33.2'
>> /usr/bin/install -D -m 0755 /opt/test/buildroot/buildroot/output/build/uclibc-0.9.33.2/utils/ldd.host /opt/test/buildroot/buildroot/output/host/usr/bin/ldd
>> /usr/bin/install: cannot stat '/opt/test/buildroot/buildroot/output/build/uclibc-0.9.33.2/utils/ldd.host': No such file or directory
>> make: *** [/opt/test/buildroot/buildroot/output/build/uclibc-0.9.33.2/.stamp_staging_installed] Error 1
>
> Which Buildroot configuration triggers this?

Hi Thomas,

Below is my settings.
I'm pretty new in using buildroot, below is my settings.
I hope my description here is clear.

$ make menuconfig

mainly with below settings:
ARM, arm7tdmi, uClibc,
BR2_USE_MMU is not set

$ make uclibc-menuconfig

ARCH_HAS_MMU is not set
UCLIBC_FORMAT_FLAT=y
ARCH_HAS_NO_SHARED=y
When ARCH_HAS_NO_SHARED=y, HAVE_SHARED is automatically set to "not set".

Then I got the build error.

I think the root cause is because ldd.host and ldconfig.host will only be built
when HAVE_SHARED=y.
However, in package/uclibc/uclibc.mk, it always install ldd.host and
ldconfig.host if $(BR2_BINFMT_FLAT) is not set.

>
>
>> +     if grep -q HAVE_SHARED=y $(@D)/.config; then \
>> +             $(INSTALL) -D -m 0755 $(@D)/utils/ldd.host $(HOST_DIR)/usr/bin/ldd; \
>> +             ln -sf ldd $(HOST_DIR)/usr/bin/$(GNU_TARGET_NAME)-ldd; \
>> +             $(INSTALL) -D -m 0755 $(@D)/utils/ldconfig.host $(HOST_DIR)/usr/bin/ldconfig; \
>> +             ln -sf ldconfig $(HOST_DIR)/usr/bin/$(GNU_TARGET_NAME)-ldconfig; \
>> +     fi
>
> I'd prefer not to grep into the uClibc configuration, and instead find
> out which Buildroot configuration triggers this problem and find a
> proper solution to it.
>
> Thanks,
>
> Thomas
> --
> Thomas Petazzoni, Free Electrons
> Kernel, drivers, real-time and embedded Linux
> development, consulting, training and support.
> http://free-electrons.com
Thomas Petazzoni - July 28, 2013, 5:22 p.m.
Dear Axel Lin,

On Mon, 29 Jul 2013 01:17:00 +0800, Axel Lin wrote:

> Below is my settings.
> I'm pretty new in using buildroot, below is my settings.
> I hope my description here is clear.
> 
> $ make menuconfig
> 
> mainly with below settings:
> ARM, arm7tdmi, uClibc,
> BR2_USE_MMU is not set
> 
> $ make uclibc-menuconfig
> 
> ARCH_HAS_MMU is not set
> UCLIBC_FORMAT_FLAT=y
> ARCH_HAS_NO_SHARED=y
> When ARCH_HAS_NO_SHARED=y, HAVE_SHARED is automatically set to "not set".

As soon as you customize the uClibc configuration with
uclibc-menuconfig, then we cannot support all the possible build
failures that you will get.

So the solution to this problem is to improve the ARM noMMU support in
Buildroot, making sure that:

 1/ The uClibc configuration is automatically adjusted appropriately.

 2/ The uClibc tools are not installed.


> However, in package/uclibc/uclibc.mk, it always install ldd.host and
> ldconfig.host if $(BR2_BINFMT_FLAT) is not set.

BR2_BINFMT_FLAT should be set when ARM noMMU is used, because I don't
think ELF binaries are supported on ARM noMMU.

I know Gustavo is working on improving the ARM noMMU, hopefully he will
post patches soon.

Thomas
Axel Lin - July 28, 2013, 5:30 p.m.
2013/7/29 Thomas Petazzoni <thomas.petazzoni@free-electrons.com>:
> Dear Axel Lin,
>
> On Mon, 29 Jul 2013 01:17:00 +0800, Axel Lin wrote:
>
>> Below is my settings.
>> I'm pretty new in using buildroot, below is my settings.
>> I hope my description here is clear.
>>
>> $ make menuconfig
>>
>> mainly with below settings:
>> ARM, arm7tdmi, uClibc,
>> BR2_USE_MMU is not set
>>
>> $ make uclibc-menuconfig
>>
>> ARCH_HAS_MMU is not set
>> UCLIBC_FORMAT_FLAT=y
>> ARCH_HAS_NO_SHARED=y
>> When ARCH_HAS_NO_SHARED=y, HAVE_SHARED is automatically set to "not set".
>
> As soon as you customize the uClibc configuration with
> uclibc-menuconfig, then we cannot support all the possible build
> failures that you will get.
>
> So the solution to this problem is to improve the ARM noMMU support in
> Buildroot, making sure that:
>
>  1/ The uClibc configuration is automatically adjusted appropriately.
>
>  2/ The uClibc tools are not installed.
>
>
>> However, in package/uclibc/uclibc.mk, it always install ldd.host and
>> ldconfig.host if $(BR2_BINFMT_FLAT) is not set.
>
> BR2_BINFMT_FLAT should be set when ARM noMMU is used, because I don't
> think ELF binaries are supported on ARM noMMU.
May I ask why config BR2_BINFMT_FLAT depends on BR2_bfin || BR2_m68k
I ask this becuase I'm going to build for arm7tdmi which is noMMU.
And config BR2_BINFMT_FLAT is invisible now due to the dependency.

>
> I know Gustavo is working on improving the ARM noMMU, hopefully he will
> post patches soon.
Good to know this.
And thanks for your reply.

Regards,
Axel
Thomas Petazzoni - July 29, 2013, 7:15 a.m.
Dear Axel Lin,

On Mon, 29 Jul 2013 01:30:16 +0800, Axel Lin wrote:

> > BR2_BINFMT_FLAT should be set when ARM noMMU is used, because I don't
> > think ELF binaries are supported on ARM noMMU.
> May I ask why config BR2_BINFMT_FLAT depends on BR2_bfin || BR2_m68k
> I ask this becuase I'm going to build for arm7tdmi which is noMMU.
> And config BR2_BINFMT_FLAT is invisible now due to the dependency.

That's because nobody ever worked on ARM noMMU support in Buildroot, so
things need to be fixed.

Best regards,

Thomas
Axel Lin - July 31, 2013, 5:20 p.m.
> BR2_BINFMT_FLAT should be set when ARM noMMU is used, because I don't
> think ELF binaries are supported on ARM noMMU.
>
> I know Gustavo is working on improving the ARM noMMU, hopefully he will
> post patches soon.
Hi,
I'm still not able to build a FLAT executable.
Just to let you know If there is patch for supporting noMMU available
on the maillist,
I'm happy to test it.

Or is there other projects support building applications for noMMU?
I tried uClinux-dist but got build error. ( And uClinux-dist seems
does not update for a long time.)

Thanks,
Axel

Patch

diff --git a/package/uclibc/uclibc.mk b/package/uclibc/uclibc.mk
index 644c531..1fe1a40 100644
--- a/package/uclibc/uclibc.mk
+++ b/package/uclibc/uclibc.mk
@@ -514,10 +514,12 @@  endef
 # For FLAT binfmts (static) there are no host utils
 ifeq ($(BR2_BINFMT_FLAT),)
 define UCLIBC_INSTALL_UTILS_STAGING
-	$(INSTALL) -D -m 0755 $(@D)/utils/ldd.host $(HOST_DIR)/usr/bin/ldd
-	ln -sf ldd $(HOST_DIR)/usr/bin/$(GNU_TARGET_NAME)-ldd
-	$(INSTALL) -D -m 0755 $(@D)/utils/ldconfig.host $(HOST_DIR)/usr/bin/ldconfig
-	ln -sf ldconfig $(HOST_DIR)/usr/bin/$(GNU_TARGET_NAME)-ldconfig
+	if grep -q HAVE_SHARED=y $(@D)/.config; then \
+		$(INSTALL) -D -m 0755 $(@D)/utils/ldd.host $(HOST_DIR)/usr/bin/ldd; \
+		ln -sf ldd $(HOST_DIR)/usr/bin/$(GNU_TARGET_NAME)-ldd; \
+		$(INSTALL) -D -m 0755 $(@D)/utils/ldconfig.host $(HOST_DIR)/usr/bin/ldconfig; \
+		ln -sf ldconfig $(HOST_DIR)/usr/bin/$(GNU_TARGET_NAME)-ldconfig; \
+	fi
 endef
 endif