On 08/11/2016 09:12 AM, Yuriy Kolerov wrote:
>
>>>  Moreover the whole uClibc and every application must be compiled with
>> those macros. Here is my question. Is it acceptable just to compile toolchain
>> itself using CFLAGS_FOR_TARGET with those macros and don’t define them
>> manually in each application?
>>
>> If you enable LFS support in build system (uClibc or buildroot) these macros
>> will be automatically defined - no point or need to pass them as CFLAGS etc -
>> infact that would be wrong IMO.
> If you enable __UCLIBC_HAS_LFS__ while configuring uClibc then 
> _LARGEFILE64_SOURCE and _FILE_OFFSET_BITS=64 will not be defined 
> automatically. 

What was I smoking when replying ? You are correct - these macros have to be 
added
to each application's makefile or at top level as target C flags.

> E.g. Buildroot has this generic line in Makefile for packages:
>
> TARGET_CPPFLAGS += -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE 
> -D_FILE_OFFSET_BITS=64

Actually BR dropped support for disabling LFS in 2015 - before that the line 
above
used to be guarded by BR2_LARGEFILE.

> These defines are not placed to config.h or somewhere else. They must be 
> defined each time you compile anything. uClibc may be built by Buildroot with 
> these flags by default (actually it is not true at least for ARC - Buildroot 
> must be fixed but it is not a subject of this discussion). However you must 
> define these macros manually when building every application later.

Right, I stand corrected.

> I don’t understand this thing - is it possible to compile uClibc with full 
> support of LFS (see macros above) and don’t use this feature in applications 
> and everything will be ok? 

Indeed this is the case - if you don't build with LFS, xxx64 won't even be
available to begin with.

> And is it possible to compile uClibc without _LARGEFILE64_SOURCE and 
> _FILE_OFFSET_BITS=64 and compile applications with them and everything will 
> be ok? 

This mostly likely won't work as those defines will not be present in headers to
use in application.

> Right now when we build toolchain for ARC using Buildroot uClibc is compiled 
> without them and e.g. BusyBox is compiled with -D_LARGEFILE_SOURCE 
> -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 ...

Buildroot now assumes LFS to be default (and you can't switch it off) so
everything including uClibc / Busybox has LFS enabled already.

>
>> So you really don't need LFS to be able to use locks - but need to make sure
>> that for common generic ABI - user struct flock pairs correctly with kernel
>> struct
>> flock64 with or w/o LFS.

But this point remains valid - for our ABI - kernel uses struct flock64 and this
needs to be binary compatible with uClibc struct flock and struct flock64 (LFS 
only)

Read the comment in libc/sysdeps/linux/common-generic/bits/stat.h

-Vineet

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

Reply via email to