Repository navigation
Conversation
|
The CI fails because I haven't uploaded preview |
|
Building the NaCl loader with MinGW requires JWasm: I wonder if we can extend the script to build specific host tools. I actually suspect that some macOS tools are meant to be built for the host as well (nasm, pkg-config…), and that we were lucky to be able to reuse the ones built for the target because we weren't cross-compiling… |
|
I'm very proud of this: build_naclruntime() {
local nacl_arch_list=()
case "${PLATFORM}" in
windows-amd64-*)
nacl_arch_list+=('amd64')
;;
windows-i686-*)
nacl_arch_list+=('i686')
nacl_arch_list+=('amd64')
;;
linux-amd64-*)
nacl_arch_list+=('amd64')
;;
linux-i686-*)
nacl_arch_list+=('i686')
;;
linux-arm64-*)
nacl_arch_list+=('armhf')
;;
linux-armhf-*)
nacl_arch_list+=('armhf')
;;
macos-amd64-*)
nacl_arch_list+=('amd64')
;;
macos-arm64-*)
nacl_arch_list+=('amd64')
;;
*)
log ERROR 'Unsupported platform for naclruntime'
;;
esac
local dir_name="DaemonEngine-native_client-${NACLRUNTIME_REVISION:0:7}"
local archive_name="native_client-${NACLRUNTIME_REVISION}.zip"
download_extract naclruntime "${archive_name}" \
"{$NACLRUNTIME_BASEURL}/${NACLRUNTIME_REVISION}"
"${download_only}" && return
cd "${dir_name}"
for nacl_arch in "${nacl_arch_list[@]}"
do
(
setup_platform "${PLATFORM_SYSTEM}-${nacl_arch}-${PLATFORM_COMPILER}"
cmake_build
)
case "${PLATFORM}" in
linux-*)
mv "${PREFIX}/bin/nacl_helper_bootstrap" "${PREFIX}/nacl_helper_bootstrap-${nacl_arch}"
;;
esac
mv "${PREFIX}/bin/sel_ldr${EXE_EXT}" "${PREFIX}/nacl_loader-${nacl_arch}${EXE_EXT}"
done |
1506732 to
56101b2
Compare
Yes, So we better refactor this and reuse the mechanism for JWasm. |
65ccd0f to
96a1e9d
Compare
… needed for cross-compilation
eb0893d to
6d2955a
Compare
6d2955a to
71dc995
Compare
bd56fb3 to
7179f26
Compare
Now done. Those “packages“:
Are now guaranteed to be compiled the native way and stored in their own native prefix that is not packaged. The building of the NaCl client is now working out of the box with MinGW. Well, at least on Ubuntu 24.04 Noble. On Debian 13 Trixie I get some “-Wincompatible-pointer-types” errors, to be fixed in Native Client upstream. The build tooling is fine. |
8db6365 to
c456a3f
Compare
|
Something annoying is that both the NASM build we download (2.16.03) and the latest stable one (3.01 from October 2025) provide a macOS fat binary of i386 and amd64, no arm64… So we can compile macOS deps for both amd64 and arm64 from amd64, but we can only build arm64 deps from arm64. That's not a big deal because I build on amd64, but that is annoying. |
c0fa777 to
f9d7a91
Compare
The old PNaCl toolchain has been being shipped as part of the deps package, with the host platform for the compilers assumed to be the same as the target platform of the deps package. Experimental Saigo support has thus far required manually downloading the SDK. Now, make the Saigo toolchain auto-downloadable (if USE_NACL_SAIGO=1) independently from the target platform dependencies. This has several advantages: - No need to download the NaCl toolchain if you are not building NaCl. - No need to download a useless NaCl toolchain when cross-compiling. - Toolchain can be downloaded for host systems that don't have a deps package, or where the deps package being used doesn't match the real host system. (The SDK is available for more systems than the deps package.) The toolchain is downloaded from Github and then, like the deps package, extracted into external_deps/.
Add external_deps/sdk-build.sh which can be used as an alternative to auto-downloading Saigo. Like external_deps/build.sh, it builds the dependency package and installs it to the expected location. It is a thin wrapper around the saigo-nacl-sdk CMake build; if you need more control it is better to use CMake directly.
835bb03 to
8c2dfcb
Compare
…ckaged with architecture suffix
This introduces a big change: the NaCl loader and bootstrap executables are now suffixed with their architecture, like the IRT:
nacl_loader-amd64,nacl_helper_bootstrap-amd4.To avoid name collision, the armhf loader wrapper for running armhf on arm64 is now named
nacl_helper_bootstrap-ldarmhf, it chainloads what is nownacl_helper_bootstrap-armhf.This change genericizes what already existed for loading the amd64 loader on windows-amd64 when running the i686 engine, except now that's all the loaders that have a suffix, not just the non-native one.
This makes things very easy to manage, for example the external_deps script just loops over all the different nexe architecture an engine architecture can support and builds the nacl_loader for it. This already works for the windows-i686 deps build: it builds both the i686 and amd64 loaders using MinGW.
This same mechanism would be usable in the future to build for the linux-arm64 deps both the armhf loader and the amd64 loader (purposed to be running on box64 when armhf support isn't there in hardware).
With that loader suffix thing I deeply rewrote the NaCl startup code in
VirtualMachine.cpp, which is then already shaped for the ability to chose between armhf or amd64 on box64 at run time. The integration of box64 (CMake code, etc.) isn't there, but theVirtualMachine.cppcode is ready. That rework is deep and deduplicate and refactor intensively the binary name construction and the command construction.I started adding the
macos-arm64-defaultdeps configuration. For now not everything works, but it already successfully builds the amd64 loader.The IRT was previously fetched as part of the naclsdk, which is not removed yet, so the IRT is still shipped the old way at this point.
For Saigo it uses the recent release I packaged:
For the NaCl loader it uses my
illwieckz/stagingbranch that contains all my unmerged code: