Hi Kevin,
That still works great.
For anybody who needs macports over homebrew I did these extra steps to select 
the correct compiler: 
    sudo port install gcc14 
    port select --list gcc
    sudo port select --set gcc mp-gcc14
    hash -r

Cheers
David





> On 25 Feb 2025, at 7:07 AM, Kevin Lin <kky...@alum.mit.edu> wrote:
> 
> 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