Difference between revisions of "Clean on Mac OS X"
(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 | + | 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 | + | ~/clean/clean/src/tools/clm$ file patch_bin clm |
− | + | patch_bin: Mach-O executable i386 | |
− | tools/clm/clm: | + | 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 | ~/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$ 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