[PATCH] build: support building static library

Gao Xiang hsiangkao at linux.alibaba.com
Thu Jun 6 12:45:33 AEST 2024



On 2024/6/6 10:25, Chen Linxuan wrote:
> Hi,
> 
> On 2024/6/6 10:22, Gao Xiang wrote:
>> Hi,
>>
>> On 2024/6/6 10:13, Chen Linxuan wrote:
>>> Hi Xiang!
>>>
>>> On 2024/5/23 16:05, Gao Xiang wrote:
>>>> Hi Comix!
>>>>
>>>> On 2024/5/23 15:31, ComixHe wrote:
>>>>> In some cases, developer may need to integrate erofs-utils into their
>>>>> proejct as a static library to reduce package dependencies and
>>>>> have more finer control over the feature used by the project.
>>>>
>>>> Thanks for sharing this.
>>>>
>>>>>
>>>>> For exapmle, squashfuse provides a static library `libsquashfuse.a` and
>>>
>>> We want a static library for running fuse-erofs, maybe liberofsfuse or something like that, to make a appimage like bundle with erofs.
>>>
>>> For quite a long time, Appimage guys patch the fuse program of squashfs to get such a static library, and this patch is accepted by Debian.
>>>
>>> https://github.com/AppImageCommunity/libappimage/blob/master/src/patches/squashfuse.patch
>>>
>>> https://salsa.debian.org/sgmoore/squashfuse/-/commit/489b04eb7f5e45478f2ba5cd8d7173bb96
>>>
>>> The patch just make a binary to be a static library by changing `main` to `fusefs_main`.
>>>
>>
>> Since squashfs don't have any offical libsquashfs, so I guess they tried
>> export the squashfuse project as a library.
>>
>> But erofs-utils is quite another story since we already have an offical
>> `liberofs` concept.   If you'd like to export some FUSE interface, would
>> you mind moving some logic in fuse/ to lib/?  Does this way also work
>> for you?
> 
> Sure.
> 
> We will send other patches later.

Err, sorry, a second thought.. If you just would like
to move all code from fuse/main.c to lib/,  I also think
it's somewhat strange.

So just address your requirement (erofsfuse_main), would
you mind just export liberofsfuse static library instead?
Since it's a bit tangled with libfuse version, so I'm now
hesitated to move into lib/...

For mkfs, I guess we will have offical API interfaces for
users to build images later, so libmkerofs is not worthwhile.

I'm not sure dump.erofs is useful too since low-level APIs
are provided. As for fsck, it's similar to mkfs in the future.


Thanks,
Gao Xiang

> 
> Thanks,
> Chen Linxuan
> 
>>
>> Thanks,
>> Gao Xiang
>>
>>
>>> We just want to do the same thing appimage guys do to squashfs.
>>>
>>>>> exposes some useful functions, Appimage uses this static library to build
>>>>> image. It could ensure that the executable image can be executed directly
>>>>> on most linux platforms and the user doesn't need to install squashfuse
>>>>> in order to execute the image.
>>>>>
>>>>> Signed-off-by: ComixHe <heyuming at deepin.org>
>>>>> ---
>>>>>   configure.ac     | 28 ++++++++++++++++++++++++++++
>>>>>   dump/Makefile.am | 10 ++++++++++
>>>>>   fsck/Makefile.am | 10 ++++++++++
>>>>>   fuse/Makefile.am | 10 ++++++++++
>>>>>   mkfs/Makefile.am | 10 ++++++++++
>>>>>   5 files changed, 68 insertions(+)
>>>>>
>>>>> diff --git a/configure.ac b/configure.ac
>>>>> index 1989bca..16ddb7c 100644
>>>>> --- a/configure.ac
>>>>> +++ b/configure.ac
>>>>> @@ -147,6 +147,30 @@ AC_ARG_ENABLE(fuse,
>>>>>      [AS_HELP_STRING([--enable-fuse], [enable erofsfuse @<:@default=no@:>@])],
>>>>>      [enable_fuse="$enableval"], [enable_fuse="no"])
>>>>> +AC_ARG_ENABLE([static-fuse],
>>>>> +    [AS_HELP_STRING([--enable-static-fuse],
>>>>> +                    [build erofsfuse as a static library @<:@default=no@:>@])],
>>>>> +    [enable_static_fuse="$enableval"],
>>>>> +    [enable_static_fuse="no"])
>>>>> +
>>>>> +AC_ARG_ENABLE([static-dump],
>>>>> +    [AS_HELP_STRING([--enable-static-dump],
>>>>> +                    [build dump.erofs as a static library @<:@default=no@:>@])],
>>>>> +    [enable_static_dump="$enableval"],
>>>>> +    [enable_static_dump="no"])
>>>>> +
>>>>> +AC_ARG_ENABLE([static-mkfs],
>>>>> +    [AS_HELP_STRING([--enable-static-mkfs],
>>>>> +                    [build mkfs.erofs as a static library @<:@default=no@:>@])],
>>>>> +    [enable_static_mkfs="$enableval"],
>>>>> +    [enable_static_mkfs="no"])
>>>>> +
>>>>> +AC_ARG_ENABLE([static-fsck],
>>>>> +    [AS_HELP_STRING([--enable-static-fsck],
>>>>> +                    [build fsck.erofs as a static library @<:@default=no@:>@])],
>>>>> +    [enable_static_fsck="$enableval"],
>>>>> +    [enable_static_fsck="no"])
>>>>
>>>> But how could we support static libraries from binaries?
>>>>
>>>> I guess you need static liberofs instead?
>>>>
>>>> Thanks,
>>>> Gao Xiang
>>>>
>>


More information about the Linux-erofs mailing list