From f1d126d4fa29a3d384332be60eef32840d07bf75 Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Thu, 20 Aug 2026 15:33:50 -0700 Subject: [PATCH] Support both legacy and non-legacy EH in ports Split out from #27575 --- test/test_other.py | 9 +++++++++ tools/ports/freetype.py | 11 +++++++++-- tools/ports/libpng.py | 8 +++++++- tools/ports/sdl2_image.py | 6 +++++- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/test/test_other.py b/test/test_other.py index 8a94aaf317aa4..ca9b3fe93f50b 100644 --- a/test/test_other.py +++ b/test/test_other.py @@ -2617,6 +2617,14 @@ def test_sdl2_gfx_linkable(self): self.emcc('browser/test_sdl2_misc.c', ['-Wl,-fatal-warnings', '-sMAIN_MODULE', '-sUSE_SDL_GFX=2', '-o', 'a.out.js']) self.emcc('browser/test_sdl2_misc.c', ['-Wl,-fatal-warnings', '-sMAIN_MODULE', '--use-port=sdl2_gfx', '-o', 'a.out.js']) + @with_all_sjlj + @requires_network + def test_sdl2_image_linkable(self): + # Same as above but for sdl2_image library + self.emcc('browser/test_sdl2_misc.c', ['-Wl,-fatal-warnings', '-sMAIN_MODULE', '-sUSE_SDL_IMAGE=2', '-o', 'a.out.js']) + self.emcc('browser/test_sdl2_misc.c', ['-Wl,-fatal-warnings', '-sMAIN_MODULE', '--use-port=sdl2_image', '-o', 'a.out.js']) + + @with_all_sjlj @requires_network def test_libpng(self): copy_asset('third_party/libpng/pngtest.png') @@ -2625,6 +2633,7 @@ def test_libpng(self): self.do_runf('third_party/libpng/pngtest.c', 'libpng passes test', cflags=['--embed-file', 'pngtest.png', '--use-port=libpng']) + @with_all_sjlj @requires_pthreads @requires_network def test_libpng_with_pthreads(self): diff --git a/tools/ports/freetype.py b/tools/ports/freetype.py index fb673373c0373..ac5983709f47f 100644 --- a/tools/ports/freetype.py +++ b/tools/ports/freetype.py @@ -10,7 +10,10 @@ PKG_VERSION = '26.2.20' HASH = '460ea4dc9cc879822556d801341a1cf3efcd57a13cd4da64169603ea98873337dd19e3c8c6d9054b27d10acbbaa8d5c59b7f560c697b98dc2640bcd88f57554a' -variants = {'freetype-legacysjlj': {'SUPPORT_LONGJMP': 'wasm', 'WASM_LEGACY_EXCEPTIONS': 1}} +variants = { + 'freetype-wasmsjlj': {'SUPPORT_LONGJMP': 'wasm', 'WASM_LEGACY_EXCEPTIONS': 0}, + 'freetype-legacysjlj': {'SUPPORT_LONGJMP': 'wasm', 'WASM_LEGACY_EXCEPTIONS': 1}, +} deps = ['zlib'] @@ -20,7 +23,10 @@ def needed(settings): def get_lib_name(settings): if settings.SUPPORT_LONGJMP == 'wasm': - return 'libfreetype-legacysjlj.a' + if settings.WASM_LEGACY_EXCEPTIONS: + return 'libfreetype-legacysjlj.a' + else: + return 'libfreetype-wasmsjlj.a' else: return 'libfreetype.a' @@ -97,6 +103,7 @@ def create(final): if settings.SUPPORT_LONGJMP == 'wasm': flags.append('-sSUPPORT_LONGJMP=wasm') + flags.append(f'-sWASM_LEGACY_EXCEPTIONS={settings.WASM_LEGACY_EXCEPTIONS}') ports.make_pkg_config('freetype2', PKG_VERSION, '-sUSE_FREETYPE') ports.build_port(source_path, final, 'freetype', flags=flags, srcs=srcs) diff --git a/tools/ports/libpng.py b/tools/ports/libpng.py index 7dd62c1f07a91..f603390ec2fb3 100644 --- a/tools/ports/libpng.py +++ b/tools/ports/libpng.py @@ -13,6 +13,8 @@ deps = ['zlib'] variants = { 'libpng-mt': {'PTHREADS': 1}, + 'libpng-wasmsjlj': {'SUPPORT_LONGJMP': 'wasm', 'WASM_LEGACY_EXCEPTIONS': 0}, + 'libpng-mt-wasmsjlj': {'PTHREADS': 1, 'SUPPORT_LONGJMP': 'wasm', 'WASM_LEGACY_EXCEPTIONS': 0}, 'libpng-legacysjlj': {'SUPPORT_LONGJMP': 'wasm', 'WASM_LEGACY_EXCEPTIONS': 1}, 'libpng-mt-legacysjlj': {'PTHREADS': 1, 'SUPPORT_LONGJMP': 'wasm', 'WASM_LEGACY_EXCEPTIONS': 1}, } @@ -27,7 +29,10 @@ def get_lib_name(settings): if settings.PTHREADS: suffix += '-mt' if settings.SUPPORT_LONGJMP == 'wasm': - suffix += '-legacysjlj' + if settings.WASM_LEGACY_EXCEPTIONS: + suffix += '-legacysjlj' + else: + suffix += '-wasmsjlj' return f'libpng{suffix}.a' @@ -46,6 +51,7 @@ def create(final): flags += ['-pthread'] if settings.SUPPORT_LONGJMP == 'wasm': flags.append('-sSUPPORT_LONGJMP=wasm') + flags.append(f'-sWASM_LEGACY_EXCEPTIONS={settings.WASM_LEGACY_EXCEPTIONS}') ports.build_port(source_path, final, 'libpng', flags=flags, exclude_files=['pngtest'], exclude_dirs=['scripts', 'contrib']) diff --git a/tools/ports/sdl2_image.py b/tools/ports/sdl2_image.py index 138fb3f09cd1b..c8db48ada1ba9 100644 --- a/tools/ports/sdl2_image.py +++ b/tools/ports/sdl2_image.py @@ -44,7 +44,10 @@ def get_lib_name(settings): if settings.PTHREADS: libname += '-mt' if settings.SUPPORT_LONGJMP == 'wasm': - libname += '-wasm-sjlj' + if settings.WASM_LEGACY_EXCEPTIONS: + libname += '-legacysjlj' + else: + libname += '-wasmsjlj' return libname + '.a' @@ -76,6 +79,7 @@ def create(final): if settings.SUPPORT_LONGJMP == 'wasm': flags.append('-sSUPPORT_LONGJMP=wasm') + flags.append(f'-sWASM_LEGACY_EXCEPTIONS={settings.WASM_LEGACY_EXCEPTIONS}') ports.build_port(src_dir, final, 'sdl2_image', flags=flags, srcs=srcs)