Perl-Dist-APPerl icon indicating copy to clipboard operation
Perl-Dist-APPerl copied to clipboard

Native Darwin/arm64 support

Open dolmen opened this issue 1 year ago • 2 comments

It would be cool if APPerl could also work on current Macs with Apple Silicon chips.

$ uname -s -m
Darwin arm64
$ curl -sLO https://github.com/G4Vi/Perl-Dist-APPerl/releases/download/v0.6.0/perl.com
$ sh ./perl.com -E 'say "Hello!"'                                                 
error: this ape binary only supports x86_64

dolmen avatar Jun 05 '24 13:06 dolmen

As a workaround I tried running perl.com using Rosetta (system emulator for running x86_64 binaries on arm64):

$ arch -x86_64 ./perl.com -E 'say "Hello!"'
arch: ./perl.com isn't executable
$ arch -x86_64 sh ./perl.com -E 'say "Hello!"'
chmod: /var/folders/7b/5rfj3bgs3tj34c6f2jy8h39w0000gn/T//.ape-1.10.6949: No such file or directory
mv: rename /var/folders/7b/5rfj3bgs3tj34c6f2jy8h39w0000gn/T//.ape-1.10.6949 to /var/folders/7b/5rfj3bgs3tj34c6f2jy8h39w0000gn/T//.ape-1.10: No such file or directory
./perl.com: line 19: /var/folders/7b/5rfj3bgs3tj34c6f2jy8h39w0000gn/T//.ape-1.10: No such file or directory
./perl.com: line 19: exec: /var/folders/7b/5rfj3bgs3tj34c6f2jy8h39w0000gn/T//.ape-1.10: cannot execute: No such file or directory
$ arch -x86_64 sh ./perl.com -E 'say "Hello!"'
ape error: : not found (maybe chmod +x or ./ needed)
$ ls -la $TMPDIR/.ape*                                          
-rwxr-xr-x  1 omengue  staff  12288  5 jui 15:19 /var/folders/7b/5rfj3bgs3tj34c6f2jy8h39w0000gn/T//.ape-1.10
$ chmod u+x perl.com
$ arch -x86_64 ./perl.com -E 'say "Hello!"'
Hello!
$ arch -x86_64 ./perl.com -E 'say "Hello $^O!"'
Hello cosmo!

Note: the requirement of chmod u+x is already documented.

dolmen avatar Jun 05 '24 13:06 dolmen

Agreed, it would be cool! I'd like to add this, but it will be at least a couple months before I can dig into this and I do not have any arm64 hardware handy.

If you'd like to experiment with it, inside of share/5.36-cosmo3.patch change $COSMOCC/bin/x86_64-unknown-cosmo-cc to $COSMOCC/bin/aarch64-unknown-cosmo-cc and in lib/Perl/Dist/APPerl.pm replace x86_64 with aarch64 and see if that gets you an arm64 apperl build. Once that works we can try making a dual arch fat binary build with Cosmopolitan's apelink.

G4Vi avatar Jun 06 '24 03:06 G4Vi