[PATCH v1] erofs-utils: Fix cross compile with autoconf

Gao Xiang hsiangkao at linux.alibaba.com
Sat Oct 7 19:24:50 AEDT 2023



On 2023/10/7 15:16, Sandeep Dhavale wrote:
> On Fri, Oct 6, 2023 at 8:27 PM Gao Xiang <hsiangkao at linux.alibaba.com> wrote:
>>
>> Hi Sandeep!
>>
>> On 2023/10/6 06:40, Sandeep Dhavale wrote:
>>> AC_RUN_IFELSE expects the action if cross compiling. If not provided
>>> cross compilation fails with error "configure: error: cannot run test
>>> program while cross compiling".
>>> Use 4096 as the buest guess PAGESIZE if cross compiling as it is still
>>> the most common page size.
>>
>> Thanks for your report!
>>
>>>
>>> Reported-in: https://lore.kernel.org/all/0101018aec71b531-0a354b1a-0b70-47a1-8efc-fea8c439304c-000000@us-west-2.amazonses.com/
>>> Fixes: 8ee2e591dfd6 ("erofs-utils: support detecting maximum block size")
>>> Signed-off-by: Sandeep Dhavale <dhavale at google.com>
>>> ---
>>>    configure.ac | 4 ++--
>>>    1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/configure.ac b/configure.ac
>>> index 13ee616..a546310 100644
>>> --- a/configure.ac
>>> +++ b/configure.ac
>>> @@ -284,8 +284,8 @@ AS_IF([test "x$MAX_BLOCK_SIZE" = "x"], [
>>>        return 0;
>>>    ]])],
>>>                                 [erofs_cv_max_block_size=`cat conftest.out`],
>>> -                             [],
>>> -                             []))
>>> +                             [erofs_cv_max_block_size=4096],
>>> +                             [erofs_cv_max_block_size=4096]))
>>>    ], [erofs_cv_max_block_size=$MAX_BLOCK_SIZE])
>>
>> Actually the following check will reset erofs_cv_max_block_size to 4096
>> if needed. But it seems that it has syntax errors.
>>
> Hi Gao,
> If I understand this correctly, the problem here is not having defined
> action if we are cross compiling for AC_RUN_IFELSE(). The cross
> compilation will fail until we have an action defined.
> 
> While at it I specified erofs_cv_max_block_size=4096 for the second
> action which will be the value if the test program fails to detect the
> page size.

Oh, thanks! got it.  How about updating erofs_cv_max_block_size to
$MAX_BLOCK_SIZE first, and fallback to 4096 if MAX_BLOCK_SIZE is
not defined? (We need to use $MAX_BLOCK_SIZE if defined anyway...)

I mean applying the following diff in addition to the previous diff too?

+                             [erofs_cv_max_block_size=$MAX_BLOCK_SIZE],
+                             [erofs_cv_max_block_size=$MAX_BLOCK_SIZE]))
     ], [erofs_cv_max_block_size=$MAX_BLOCK_SIZE])

If it works, I could apply this version.

Thanks,
Gao Xiang

> 
> With your suggested patch, cross compilation still fails with the error
>> configure: error: cannot run test program while cross compiling
>> See `config.log' for more details
> 
> Thanks,
> Sandeep.
> 
>> I wonder if the following diff could fix the issue too?
>>
>> Thanks,
>> Gao Xiang
>>
>> diff --git a/configure.ac b/configure.ac
>> index 13ee616..94eec01 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -288,6 +288,9 @@ AS_IF([test "x$MAX_BLOCK_SIZE" = "x"], [
>>                                 []))
>>    ], [erofs_cv_max_block_size=$MAX_BLOCK_SIZE])
>>
>> +AS_IF([test "x$erofs_cv_max_block_size" = "x"],
>> +      [erofs_cv_max_block_size=4096], [])
>> +
>>    # Configure debug mode
>>    AS_IF([test "x$enable_debug" != "xno"], [], [
>>      dnl Turn off all assert checking.
>> @@ -501,9 +504,6 @@ if test "x$have_libdeflate" = "xyes"; then
>>    fi
>>
>>    # Dump maximum block size
>> -AS_IF([test "x$erofs_cv_max_block_size" = "x"],
>> -      [$erofs_cv_max_block_size = 4096], [])
>> -
>>    AC_DEFINE_UNQUOTED([EROFS_MAX_BLOCK_SIZE], [$erofs_cv_max_block_size],
>>                     [The maximum block size which erofs-utils supports])


More information about the Linux-erofs mailing list