Difference between revisions of "Clean on Mac OS X"

From Clean
Jump to navigationJump to search
(Add linker compilation patches + instructions (gives error, not sure how to solve yet))
(Change building of patch_bin, clm, clms to include new patch and build in x86 mode)
Line 33: Line 33:
 
~/clean$ wget http://files.dazjorz.com/clean/clean_mac_codegenerator.patch
 
~/clean$ wget http://files.dazjorz.com/clean/clean_mac_codegenerator.patch
 
~/clean$ wget http://files.dazjorz.com/clean/clean_mac_stdenvinclusion.patch
 
~/clean$ wget http://files.dazjorz.com/clean/clean_mac_stdenvinclusion.patch
 +
~/clean$ wget http://files.dazjorz.com/clean/clean_mac_clm.patch
 
~/clean$ md5sum *.patch
 
~/clean$ md5sum *.patch
 +
3fda955b8801fd1da98a55ba09d6a795  clean_mac_clm.patch
 
b23bff5456fa29f5bad3c5f3c4879df7  clean_mac_codegenerator.patch
 
b23bff5456fa29f5bad3c5f3c4879df7  clean_mac_codegenerator.patch
 
cb877dc83ecd1c0cd8d7307de255d22b  clean_mac_runtimesystem.patch
 
cb877dc83ecd1c0cd8d7307de255d22b  clean_mac_runtimesystem.patch
Line 107: Line 109:
  
 
<pre>
 
<pre>
~/clean$ cd clean/src
+
~/clean$ patch -p0 <clean_mac_clm.patch
~/clean/clean/src$ make tools/clm/patch_bin
+
patching file clean/src/tools/clm/Makefile.macosx
 +
patching file clean/src/tools/clm/clm.c
 +
~/clean$ cd clean/src/tools/clm
 +
~/clean/clean/src/tools/clm$ make -f Makefile.macosx
 
[...]
 
[...]
~/clean/clean/src$ file tools/clm/patch_bin tools/clm/clm
+
~/clean/clean/src/tools/clm$ file patch_bin clm
tools/clm/patch_bin: Mach-O 64-bit executable x86_64
+
patch_bin: Mach-O executable i386
tools/clm/clm:       Mach-O 64-bit executable x86_64
+
clm:      Mach-O executable i386
</pre>
+
~/clean/clean/src/tools/clm$ make -f Makefile.macosx clms
'''XXX seeing i386 here is fine too. Maybe I should update the Makefiles to be i386 anyway.'''
+
[...]
<pre>
+
~/clean/clean/src/tools/clm$ file clms
 +
clms: Mach-O executable i386
 +
~/clean/clean/src/tools/clm$ cd ../..
 
~/clean/clean/src$ make ../bin/patch_bin
 
~/clean/clean/src$ make ../bin/patch_bin
 
cp tools/clm/patch_bin ../bin/patch_bin
 
cp tools/clm/patch_bin ../bin/patch_bin
Line 121: Line 128:
 
cp tools/clm/clm ../bin/clm
 
cp tools/clm/clm ../bin/clm
 
[...]
 
[...]
~/clean/clean/src$ make tools/clm/clms
 
[...]
 
~/clean/clean/src$ file tools/clm/clms
 
tools/clm/clms: Mach-O 64-bit executable x86_64
 
 
~/clean/clean/src$ cd ../..
 
~/clean/clean/src$ cd ../..
 
~/clean$
 
~/clean$

Revision as of 13:00, 6 September 2010

This page is a work-in-progress for building Clean on recent Mac OS X systems. There is an official build for Clean on Mac, but it's 32-bit-PowerPC-based; a shame since the newest Macs are 64-bit-Intel-based.

A useful page for building Clean on recent Unices is the Clean2.2 on 64bit Xubuntu page, which ends in the same problems I end up with here.

I haven't started working with Clean itself yet, therefore I don't know very well all of its components; however I hope to find out what everything does and how it works together in the process.

This guide assumes basic knowledge of Terminal.app and the basics of UNIX. I am running on a MacBook Pro 2009 model running Mac OS X 10.6.4. Please report back in the Discussion above what your results are.

Downloading sources

Because a part of Clean is written in Clean, we need to take a 'bootstrap' package to build. This package contains some 'precompiled' Clean source (no machine-dependent object code, however). You can get it from the Download page (direct link).

Of course, the way of downloading and the place to download is up to you. I use wget and download to $HOME/clean.

~$ mkdir clean
~$ cd clean
~/clean$ wget http://clean.cs.ru.nl/download/Clean22/linux/Clean2.2_boot.tar.gz
[...]
2010-09-05 14:10:41 (429 KB/s) - '`Clean2.2_boot.tar.gz'' opgeslagen [5651786/5651786]

And unpack it...

~/clean$ tar -xzf Clean2.2_boot.tar.gz

Download some of my patches, which will hopefully be merged (after which this guide will be updated):

~/clean$ wget http://files.dazjorz.com/clean/clean_mac_runtimesystem.patch
~/clean$ wget http://files.dazjorz.com/clean/clean_mac_codegenerator.patch
~/clean$ wget http://files.dazjorz.com/clean/clean_mac_stdenvinclusion.patch
~/clean$ wget http://files.dazjorz.com/clean/clean_mac_clm.patch
~/clean$ md5sum *.patch
3fda955b8801fd1da98a55ba09d6a795  clean_mac_clm.patch
b23bff5456fa29f5bad3c5f3c4879df7  clean_mac_codegenerator.patch
cb877dc83ecd1c0cd8d7307de255d22b  clean_mac_runtimesystem.patch
e8bf18f68d336ddf879c5c8e11eaec56  clean_mac_stdenvinclusion.patch

Building the RuntimeSystem

Because the standard Makefile assumes we are using Linux, we will build the RuntimeSystem ourselves.

~/clean$ patch -p0 <clean_mac_runtimesystem.patch 
patching file clean/src/RuntimeSystem/Makefile.macosx
patching file clean/src/RuntimeSystem/Makefileprofile.macosx
patching file clean/src/RuntimeSystem/iprofile.s
patching file clean/src/RuntimeSystem/scon.c
patching file clean/src/RuntimeSystem/ufileIO2.c
~/clean$ cd clean/src/RuntimeSystem
~/clean/clean/src/RuntimeSystem$ make -f Makefile.macosx
[...]
~/clean/clean/src/RuntimeSystem$ file _startup.o
_startup.o: Mach-O object i386
~/clean/clean/src/RuntimeSystem$ make -f Makefileprofile.macosx
[...]
~/clean/clean/src/RuntimeSystem$ file _startupProfile.o
_startupProfile.o: Mach-O object i386
~/clean/clean/src/RuntimeSystem$ cd ..
~/clean/clean/src$ make ../stdenv/Clean\ System\ Files/_startup.o
cp RuntimeSystem/_startup.o ../stdenv/Clean\ System\ Files/_startup.o
~/clean/clean/src$ make ../stdenv/Clean\ System\ Files/_startupProfile.o
cp RuntimeSystem/_startupProfile.o ../stdenv/Clean\ System\ Files/_startupProfile.o
~/clean/clean/src$ cd ../..
~/clean$

Building the Code Generator

~/clean$ patch -p0 <clean_mac_codegenerator.patch
~/clean$ cd clean/src/CodeGenerator
~/clean/clean/src/CodeGenerator$ mkdir o
~/clean/clean/src/CodeGenerator$ make -f Makefile.macosx_intel
[...]
~/clean/clean/src/CodeGenerator$ file cg
cg: Mach-O executable i386
~/clean/clean/src/CodeGenerator$ cd ..
~/clean/clean/src$ make ../exe/cg
cp CodeGenerator/cg ../exe/cg
~/clean/clean/src$ cd ../..
~/clean$

Compiling the system libraries

~/clean$ cd stdenv/Clean\ System\ Files
~/clean/stdenv/Clean System Files$ ../../exe/cg _system
Unknown parameter type 0
reg.r -6, -8
Internal error in function: as_move_instruction 2

XXX This obviously does not work yet. XXX

Compiling patch_bin, clm and clms

We need to install patch_bin correctly first, before compiling clms. Clm will be built automatically while building patch_bin.

~/clean$ patch -p0 <clean_mac_clm.patch
patching file clean/src/tools/clm/Makefile.macosx
patching file clean/src/tools/clm/clm.c
~/clean$ cd clean/src/tools/clm
~/clean/clean/src/tools/clm$ make -f Makefile.macosx
[...]
~/clean/clean/src/tools/clm$ file patch_bin clm
patch_bin: Mach-O executable i386
clm:       Mach-O executable i386
~/clean/clean/src/tools/clm$ make -f Makefile.macosx clms
[...]
~/clean/clean/src/tools/clm$ file clms
clms: Mach-O executable i386
~/clean/clean/src/tools/clm$ cd ../..
~/clean/clean/src$ make ../bin/patch_bin
cp tools/clm/patch_bin ../bin/patch_bin
~/clean/clean/src$ make ../bin/clm
cp tools/clm/clm ../bin/clm
[...]
~/clean/clean/src$ cd ../..
~/clean$

Compiling the linker

~/clean$ patch -p0 <clean_mac_stdenvinclusion.patch
Patching file clean/src/Makefile
~/clean$ cd clean/src
~/clean/clean/src$ cp ../exe/cg tools/elf_linker
~/clean/clean/src$ make tools/elf_linker/linker
[...]
Unknown parameter type 0
reg.r -6, -8
Internal error in function: as_move_instruction 2

Same error. Maybe I don't get it in my other directory because that `cg` is x86_64.

Compiling cocl

TODO

Compiling htoclean

TODO

Installing and wrapping up

TODO