diff --git a/graal-nodejs/doc/api/single-executable-applications.md b/graal-nodejs/doc/api/single-executable-applications.md index 58454158816..147c927ee35 100644 --- a/graal-nodejs/doc/api/single-executable-applications.md +++ b/graal-nodejs/doc/api/single-executable-applications.md @@ -159,7 +159,8 @@ platforms: * Windows * macOS -* Linux (AMD64 only) +* Linux (all distributions [supported by Node.js][] except Alpine and all + architectures [supported by Node.js][] except s390x and ppc64) This is due to a lack of better tools to generate single-executables that can be used to test this feature on other platforms. @@ -180,3 +181,4 @@ to help us document them. [postject]: https://github.com/nodejs/postject [signtool]: https://learn.microsoft.com/en-us/windows/win32/seccrypto/signtool [single executable applications]: https://github.com/nodejs/single-executable +[supported by Node.js]: https://github.com/nodejs/node/blob/main/BUILDING.md#platform-list diff --git a/graal-nodejs/doc/contributing/maintaining/maintaining-single-executable-application-support.md b/graal-nodejs/doc/contributing/maintaining/maintaining-single-executable-application-support.md index e3957230f30..51cafb5ae6f 100644 --- a/graal-nodejs/doc/contributing/maintaining/maintaining-single-executable-application-support.md +++ b/graal-nodejs/doc/contributing/maintaining/maintaining-single-executable-application-support.md @@ -54,7 +54,9 @@ for the following features are in the list of work we'd like to get to: * Running an archive of multiple files. * Embedding [Node.js CLI options][] into the binary. * [XCOFF][] executable format. -* Run tests on Linux architectures/distributions other than AMD64 Ubuntu. +* Run tests on Alpine Linux. +* Run tests on s390x Linux. +* Run tests on ppc64 Linux. ## Disabling single executable application support diff --git a/graal-nodejs/test/parallel/test-single-executable-application.js b/graal-nodejs/test/parallel/test-single-executable-application.js index 01329ff2ae4..902093dc6e4 100644 --- a/graal-nodejs/test/parallel/test-single-executable-application.js +++ b/graal-nodejs/test/parallel/test-single-executable-application.js @@ -16,6 +16,11 @@ if (!process.config.variables.single_executable_application) if (!['darwin', 'win32', 'linux'].includes(process.platform)) common.skip(`Unsupported platform ${process.platform}.`); +if (process.platform === 'linux' && process.config.variables.asan) { + // Source of the memory leak - https://github.com/nodejs/node/blob/da0bc6db98cef98686122ea1e2cd2dbd2f52d123/src/node_sea.cc#L94. + common.skip('Running the resultant binary fails because of a memory leak ASAN error.'); +} + if (process.platform === 'linux' && process.config.variables.is_debug === 1) common.skip('Running the resultant binary fails with `Couldn\'t read target executable"`.'); @@ -36,17 +41,16 @@ if (process.config.variables.want_separate_host_toolset !== 0) common.skip('Running the resultant binary fails with `Segmentation fault (core dumped)`.'); if (process.platform === 'linux') { - try { - const osReleaseText = readFileSync('/etc/os-release', { encoding: 'utf-8' }); - if (!/^NAME="Ubuntu"/m.test(osReleaseText)) { - throw new Error('Not Ubuntu.'); - } - } catch { - common.skip('Only supported Linux distribution is Ubuntu.'); + const osReleaseText = readFileSync('/etc/os-release', { encoding: 'utf-8' }); + const isAlpine = /^NAME="Alpine Linux"/m.test(osReleaseText); + if (isAlpine) common.skip('Alpine Linux is not supported.'); + + if (process.arch === 's390x') { + common.skip('On s390x, postject fails with `memory access out of bounds`.'); } - if (process.arch !== 'x64') { - common.skip(`Unsupported architecture for Linux - ${process.arch}.`); + if (process.arch === 'ppc64') { + common.skip('On ppc64, this test times out.'); } }