Hi David,

Of course!  I decided to write up some notes and put it up.  Here is a patch 
that worked for me with MIT Scheme 12.1 on macOS 15.3:

https://github.com/kkylin/mit-scheme-intel-mac-patch/blob/main/mit-scheme-12.1-patch

(save this in mit-scheme-12.1/src and run `patch < mit-scheme-12.1-patch`)

More detailed notes here:

https://github.com/kkylin/mit-scheme-intel-mac-patch?tab=readme-ov-file

It's been a while since I last did this, so I may have missed something.  
Comments & questions welcome!  (A bit busy at work these couple weeks so I may 
be slow to respond...)

Cheers,
Kevin

-----Original Message-----
From: David Gray <dg...@iesl.forth.gr>
Cc: mit-scheme-users@gnu.org

Hi, can you share the details of this? I assume some changes
to the Makefile for the linking. My method was such a mess I
don’t think that it is very repeatable.

David



> On 22 Dec 2024, at 12:05 PM, Kevin Lin <kky...@alum.mit.edu> wrote:
> 
> Hi David,
> 
> Your message inspired me (mid-vacation!) to try to
> compile Scheme with gcc (gcc-14 via Homebrew).  I did
> manage to get it to work.  As you said, it was
> necessary to comment out some code (gcc seems unhappy
> with Apple's header files; looks to me like Core
> Foundation things that are needed only for building a
> stand-alone Mac app, which I don't use).  Doing things
> this way leads to a compiler that seems to function
> just fine in my testing.
> 
> I also tried the following experiments:
> 
> 1) Compile the microcode using gcc but linking with
>   clang
> 
> 2) Compile the microcode using clang but linking with
>   gcc (this does not require commenting out any code)
> 
> (1) leads to the same compiler issues as before, while
> (2) again seems to work fine.  So maybe it's a linkage
> issue, rather than compilation per se?  Anyway it
> seems this is one way to build a working MIT Scheme on
> Intel Macs on a recent macOS.  It's a little clunky,
> but I don't know enough about how linking works to
> find a better solution.
> 
> Kevin
> 
> -----Original Message-----
> From: David Gray <dg...@iesl.forth.gr>
> Cc: mit-scheme-users@gnu.org
> 
> For what it's worth, it is a problem with the apple
> compiler. I managed to get a butchered version working by
> using gcc13 with macports.
> I just chopped out the lines with errors in the source,
> copied the all.com from the previous version. Unlikely as it
> seems this compiles scheme code correctly even with the
> usual-integrations. However I’m not expert enough to go
> anywhere further with this information.
> 
>> On 10 Dec 2024, at 6:23 AM, Kevin Lin <kky...@alum.mit.edu> wrote:
>> 
>> Thanks David.  I've been doing something similar to
>> you, but using a version of the work-around in my
>> first msg (despite my own disclaimers).  So far it
>> seems to work fine and I can get by with it.
>> -Kevin
>> 
>> 
>> -----Original Message-----
>> From: David Gray <dg...@iesl.forth.gr>
>> Cc: mit-scheme-users@gnu.org
>> 
>> I think you are correct in that it is saving that is the
>> problem. I really just want a couple of slow functions to be
>> compiled, so after digging around in the source I found
>> compile-procedure which does what I need for the
>> moment. Just load up the function, compile-procedure, then
>> run it.
>> 
>> 
>> 
>> 
>>> On 4 Dec 2024, at 10:43 PM, Kevin Lin <kky...@alum.mit.edu> wrote:
>>> 
>>> Sorry, two things I forgot to say:
>>> 
>>> - If scode that's been directly compiled (as in my
>>> example, and as opposed to loading it from a .bin
>>> file generated by SF) is then compiled into native
>>> code via say compile-scode, it does seem to run just
>>> fine.  But saving to file (via fasdump) and
>>> reloading leads to the same problems.
>>> 
>>> - Not necessarily recommending these kludges as a
>>> work-around for anyone else having similar issues --
>>> I don't know MIT Scheme internals and haven't tested
>>> these things; the kludges came about as an effort to
>>> isolate the issue.
>>> 
>>> Kevin
>>> 
>>> -----Original Message-----
>>> To: mit-scheme-users@gnu.org
>>> 
>>> Hi all,
>>> 
>>> I'm trying to build and run MIT/GNU Scheme 12.1 on an Intel
>>> Mac running Sequoia (15.1).  I've had similar issues as
>>> described on this thread:
>>> 
>>> https://lists.gnu.org/archive/html/mit-scheme-users/2023-10/msg00004.html
>>> 
>>> I've been digging around this for a bit, so this is long.
>>> I've broken this into sections.  Details on how I built
>>> Scheme on my machine come at the end.  Any insights or just
>>> knowing that someone has managed to get 12.1 running on a
>>> recent macOS would be great.
>>> 
>>> Thanks!
>>> 
>>> Kevin <kky...@alum.mit.edu>
>>> 
>>> *MAIN SYMPTOMS*
>>> 
>>> Here is a little transcript of what I get:
>>> 
>>> #|
>>> (cf "fact.scm")
>>> 
>>> ;Generating SCode for file: "fact.scm" => "fact.bin"... done
>>> ;Compiling file: "fact.bin" => "fact.com"... done
>>> ;Unspecified return value
>>> 
>>> 1 ]=> (load "fact.com")
>>> 
>>> ;Loading "fact.com"...
>>> ;The object fact, passed as an argument to
>>> return-address->stack-frame-type, is not in the correct
>>> range.
>>> ;To continue, call RESTART with an option number:
>>> ; (RESTART 1) => Return to read-eval-print level 1.
>>> |#
>>> 
>>> The file "fact.scm" is something more or less straight from
>>> SICP:
>>> 
>>> #|
>>> (declare (usual-integrations))
>>> 
>>> (define (fact n)
>>> (if (> n 1)
>>>    (* n (fact (- n 1)))
>>>    1))
>>> |#
>>> 
>>> Moreover, there appear to be issues affecting SF as well:
>>> 
>>> #|
>>> 1 ]=> (sf "fact.scm")
>>> 
>>> ;Generating SCode for file: "fact.scm" => "fact.bin"... done
>>> ;Unspecified return value
>>> 
>>> 1 ]=> (pp (fasload "fact.bin"))
>>> 
>>> ;Loading "fact.bin"... done
>>> (define (fact n)
>>> (if (%record n 1)
>>>    (%record n (fact (%record n)))
>>>    1))
>>> ;Unspecified return value
>>> |#
>>> 
>>> If I remove (declare (usual-integrations)) then it seems to
>>> be ok:
>>> 
>>> #|
>>> 1 ]=> (sf/system "fact.scm")
>>> 
>>> ;Generating SCode for file: "fact.scm" => "fact.bin"...
>>> ;  This program does not have a USUAL-INTEGRATIONS declaration.
>>> ;  Without this declaration, the compiler will be unable to perform
>>> ;  many optimizations, and as a result the compiled program will be
>>> ;  slower and perhaps larger than it could be.  Please read the MIT
>>> ;  Scheme User's Guide for more information about USUAL-INTEGRATIONS.
>>> ;... done
>>> ;Unspecified return value
>>> 
>>> 1 ]=> (pp (fasload "fact.bin"))
>>> 
>>> ;Loading "fact.bin"... done
>>> (define (fact n)
>>> (if (> n 1)
>>>    (* n (fact (- n 1)))
>>>    1))
>>> ;Unspecified return value
>>> |#
>>> 
>>> but CF continues to fail:
>>> 
>>> #|
>>> 1 ]=> (cf/system "fact.scm")
>>> 
>>> ;Generating SCode for file: "fact.scm" => "fact.bin"...
>>> ;  This program does not have a USUAL-INTEGRATIONS declaration.
>>> ;  Without this declaration, the compiler will be unable to perform
>>> ;  many optimizations, and as a result the compiled program will be
>>> ;  slower and perhaps larger than it could be.  Please read the MIT
>>> ;  Scheme User's Guide for more information about USUAL-INTEGRATIONS.
>>> ;... done
>>> ;Compiling file: "fact.bin" => "fact.com"... done
>>> ;Unspecified return value
>>> 
>>> 1 ]=> (load "fact.com")
>>> 
>>> ;Loading "fact.com"...
>>> ;The object fact, passed as an argument to
>>> return-address->stack-frame-type, is not in the correct
>>> range.
>>> ;To continue, call RESTART with an option number:
>>> ; (RESTART 1) => Return to read-eval-print level 1.
>>> |#
>>> 
>>> *IS FASDUMP THE PROBLEM?*
>>> 
>>> One thing I noticed is that if I took a .bin or .com file
>>> compiled on my Linux box and loaded it on my Intel Mac, it
>>> works just fine: this code (and more complicated programs)
>>> runs without a hiccup, and pretty-printing the .bin file
>>> looks fine to me.  It suggests the issue *might* be centered
>>> around saving binary files.  Digging around more, I found
>>> that if I bypass the FASDUMP defined in fasdump.c, SF
>>> appears to be ok again.  Here's a little kludge that does
>>> that.
>>> 
>>> (define *target-fasl-format*
>>> (eval '(target-fasl-format) (->environment cbf)))
>>> 
>>> (define (fasdump-kludge obj file)
>>> (portable-fasdump obj file *target-fasl-format*))
>>> 
>>> and what we find is this:
>>> 
>>> #|
>>> 1 ]=> (define fact-scode
>>>      ;; compile SCode without saving to file
>>>      (eval '(sf/file->scode "fact.scm" "" #f '())
>>>        (package/environment
>>>          (find-package '(scode-optimizer top-level)))))
>>> ;Value: fact-scode
>>> 
>>> 1 ]=> (pp fact-scode)   ;; looks ok to me
>>> (define (fact n)
>>> (if (&> n 1)
>>>    (&* n (fact (-1+ n)))
>>>    1))
>>> ;Unspecified return value
>>> 
>>> 1 ]=> (fasdump-kludge fact-scode "fact.bin")  ;; now save to file
>>> 
>>> ;Unspecified return value
>>> 
>>> 1 ]=> (pp (fasload "fact.bin"))  ;; reload and look
>>> 
>>> ;Loading "fact.bin"... done
>>> (define (fact n)
>>> (if (&> n 1)
>>>    (&* n (fact (-1+ n)))
>>>    1))
>>> ;Unspecified return value
>>> 
>>> |#
>>> The kludge doesn't work for compiled expressions and I
>>> didn't test it on a .com file.  I've also dug around
>>> fasdump.c but I don't understand the microcode and don't
>>> know where to start tracking down the issue.
>>> 
>>> Anecdotally, the native code compiler worked just fine in
>>> Monterey and earlier versions of macOS.
>>> 
>>> *MORE SYMPTOMS*
>>> 
>>> 1. One can get different errors by (i) adding more
>>> definitions to fact.scm, and (ii) selecting which
>>> primitives (+, *, >) get integrated.  I didn't include
>>> all the cases.
>>> 
>>> 2. DISK-SAVE also fails, but bands saved on working
>>> installations (e.g., ScmUtils) work just fine.
>>> 
>>> *HOW I BUILT SCHEME*
>>> 
>>> I use Apple's "gcc", which (I think) is just an alias for
>>> clang.  I massage various env vars (happy to share
>>> config.log), but none of that seems super important.  What
>>> *is* important is to set SDKROOT to
>>> 
>>> `xcrun --sdk macosx --show-sdk-path`
>>> 
>>> or clang won't compile the microcode.  This may have
>>> something to do with my having GCC installed (via Homebrew).
>>> Incidentally, I haven't tried uninstalling gcc as that would
>>> break too many things, but I did try unlinking gcc and it
>>> didn't make a difference to the behavior above.
>>> 
>>> In case it matters, all this is on a 2015 Intel MBP.  I get
>>> the same behavior on an M2 Mac via Rosetta, and on older
>>> Intel Macs on Sequoia + OCLP.
>>> 
>>> -- 
>>> 
>>> -- 
>>> 
>> 
>> --
> 
> --

-- 

Reply via email to