[FFmpeg-devel] [FFmpeg-cvslog] tests/checkasm: Add partial support for wasm
Martin Storsjö
martin at martin.st
Wed Dec 4 15:27:26 EET 2024
On Wed, 4 Dec 2024, Zhao Zhili wrote:
>
>
>> On Dec 4, 2024, at 17:56, Martin Storsjö <martin at martin.st> wrote:
>>
>> On Wed, 4 Dec 2024, Zhao Zhili wrote:
>>
>>> ffmpeg | branch: master | Zhao Zhili <zhilizhao at tencent.com> | Wed Nov 20 20:45:35 2024 +0800| [ea3d21c349db5bbfee7840857de81e4b2fc757fa] | committer: Zhao Zhili
>>>
>>> tests/checkasm: Add partial support for wasm
>>>
>>> WASI mssing signal and siglongjmp support. This patch workaround
>>> build error and add simd128 flag. Please note that many tests use
>>> large array on stack, so you need to increase the stack size when
>>> build checkasm, e.g., --extra-ldflags='-Wl,-z,stack-size=10485760'
>>>
>>> Signed-off-by: Zhao Zhili <zhilizhao at tencent.com>
>>>
>>>> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ea3d21c349db5bbfee7840857de81e4b2fc757fa
>>> ---
>>>
>>> tests/checkasm/checkasm.c | 8 ++++++++
>>> tests/checkasm/checkasm.h | 15 +++++++++++++--
>>> 2 files changed, 21 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
>>> index f30c53cec2..544e3ee9ba 100644
>>> --- a/tests/checkasm/checkasm.c
>>> +++ b/tests/checkasm/checkasm.c
>>> @@ -363,6 +363,8 @@ static const struct {
>>> #elif ARCH_LOONGARCH
>>> { "LSX", "lsx", AV_CPU_FLAG_LSX },
>>> { "LASX", "lasx", AV_CPU_FLAG_LASX },
>>> +#elif ARCH_WASM
>>> + { "SIMD128", "simd128", AV_CPU_FLAG_SIMD128 },
>>> #endif
>>> { NULL }
>>> };
>>> @@ -770,6 +772,8 @@ static LONG NTAPI signal_handler(EXCEPTION_POINTERS *e) {
>>> }
>>> #endif
>>> #else
>>> +
>>> +#ifndef _WASI_EMULATED_SIGNAL
>>> static void signal_handler(int s);
>>>
>>> static const struct sigaction signal_handler_act = {
>>> @@ -784,6 +788,8 @@ static void signal_handler(int s) {
>>> checkasm_load_context(s);
>>> }
>>> }
>>> +#endif // _WASI_EMULATED_SIGNAL
>>> +
>>> #endif
>>>
>>> /* Compares a string with a wildcard pattern. */
>>> @@ -933,10 +939,12 @@ int main(int argc, char *argv[])
>>> AddVectoredExceptionHandler(0, signal_handler);
>>> #endif
>>> #else
>>> +#ifndef _WASI_EMULATED_SIGNAL
>>> sigaction(SIGBUS, &signal_handler_act, NULL);
>>> sigaction(SIGFPE, &signal_handler_act, NULL);
>>> sigaction(SIGILL, &signal_handler_act, NULL);
>>> sigaction(SIGSEGV, &signal_handler_act, NULL);
>>> +#endif // _WASI_EMULATED_SIGNAL
>>> #endif
>>> #if HAVE_PRCTL && defined(PR_SET_UNALIGN)
>>> prctl(PR_SET_UNALIGN, PR_UNALIGN_SIGBUS);
>>> diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h
>>> index 0ba5c3040d..a1bd19c54a 100644
>>> --- a/tests/checkasm/checkasm.h
>>> +++ b/tests/checkasm/checkasm.h
>>> @@ -66,12 +66,23 @@ typedef struct { CONTEXT c; int status; } checkasm_context;
>>> #define checkasm_save_context() 0
>>> #define checkasm_load_context() do {} while (0)
>>> #endif
>>> -#else
>>> +#else // _WIN32
>>> +
>>> +#ifdef _WASI_EMULATED_SIGNAL
>>
>> Why the nested #else + #ifdef, why not #elif defined()? I think that would keep the logic slightly less complex.
>
> Should be fixed by
> https://ffmpeg.org/pipermail/ffmpeg-devel/2024-December/337041.html
>
> By the way, how to make nested conditional compile readable? The code use nested #if already:
>
> #ifdef _WIN32
> #include <windows.h>
> #if ARCH_X86_32
> #include <setjmp.h>
>
> I remember this patch use nested #else + #ifdef is for easy to comment.
> Should we use indent like in VLC?
I don't mind adding indentation to the ifdefs, and adding comments can
help readability as well.
// Martin
More information about the ffmpeg-devel
mailing list