From ecc8e5e9dfe4f0fe1f7049d297962edb832c8197 Mon Sep 17 00:00:00 2001 From: Jeremy Rand Date: Sat, 18 Jul 2015 09:52:27 -0500 Subject: [PATCH] Add a project specific readme file --- README.md | 53 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index a784a08c..fda982ad 100644 --- a/README.md +++ b/README.md @@ -1,49 +1,70 @@ What is LLVM? ============ -LLVM is an open source suite of compiler tools. LLVM itself takes source code in an intermediate format and turns it into assembly (or object files) for a particular architecture. There are other projects which build on top of that. Clang takes C/C++/Objective C code in and spits out the intermediate format. Put those together and you get a C compiler which can target many architectures. +LLVM is an open source suite of compiler tools. LLVM itself takes source code +in an intermediate format and turns it into assembly (or object files) for a +particular architecture. There are other projects which build on top of that. +Clang takes C/C++/Objective C code in and spits out the intermediate format. +Put those together and you get a C compiler which can target many architectures. What is LLVM-65816? ================= -This is my project to add 65816 support in LLVM. If this is successful, it will be able to convert LLVM intermediate representation into 65816 assembly. Ideally, this assembly would be in a format which Merlin 32 could then assembly into object files and ultimately executables. If we have this, we would have a modern C compiler which can be used to build GS executables. +This is my project to add 65816 support in LLVM. If this is successful, it +will be able to convert LLVM intermediate representation into 65816 assembly. +Ideally, this assembly would be in a format which Merlin 32 could then assemble +into object files and ultimately executables. If we have this, we would have a +modern C compiler which can be used to build Apple //GS executables. What is the status? =============== -The LLVM documentation recommends that new targets use the Sparc target as a guide and that is what I have done. Mostly, I have created 65816 versions of each of the files for the Sparc target. I have disabled large blocks of the Sparc code that I copied and marked them up with “WDC_TODO” comments. I have spent a fair bit of time to describe the registers (actually didn’t take long to describe the registers because we don’t have many) and the instruction set. That is in reasonable shape but there is definitely work there too. +The LLVM documentation recommends that new targets use the Sparc target as a +guide and that is what I have done. Mostly, I have created 65816 versions of +each of the files for the Sparc target. I have disabled large blocks of the +Sparc code that I copied and marked them up with “WDC_TODO” comments. I have +spent a fair bit of time to describe the registers (actually didn’t take long +to describe the registers because we don’t have many) and the instruction set. +That is in reasonable shape but there is definitely work there too. -Right now, you can get the code and compile it. You will be left with a clang binary that appears to have 65816 support. If you try to compile any C code with it targeting the 65816 though, the compiler will crash today. But, as of yesterday, I couldn’t even get a build so that is some progress. +Right now, you can get the code and compile it. You will be left with a clang +binary that appears to have 65816 support. If you try to compile any C code +with it targeting the 65816 though, the compiler will crash today. But, as of +yesterday, I couldn’t even get a build so that is some progress. What is next? =========== My initial goal is to get the compiler to produce assembly for this C code: -int answerToTheUltimateQuestion(void) -{ - return 42; // The answer -} + int answerToTheUltimateQuestion(void) + { + return 42; // The answer + } -Once that is working, then I will try to get more working until it is a usable compiler. There are _lots_ of issues and problems waiting for me (us?). +Once that is working, then I will try to get more working until it is a usable +compiler. There are _lots_ of issues and problems waiting for me (us?). How to build the project? ========================= Here are the steps to checkout the code and build it: -$ cd some/good/place/to/put/this -$ git clone https://github.com/jeremysrand/llvm-65816.git -$ mkdir build -$ cd build -$ cmake -G "Unix Makefiles" ../llvm-65816 -$ make + $ cd some/good/place/to/put/this + $ git clone https://github.com/jeremysrand/llvm-65816.git + $ mkdir build + $ cd build + $ cmake -G "Unix Makefiles" ../llvm-65816 + $ make That works for me on my Mac. Note, you probably need to download cmake. How to help? ============ -There is _lots_ of work to be done here before this becomes a useful tool. But, now that it builds and I have dozens of WDC_TODO’s sprinkled around the code, it is maybe a reasonable time to open this up to anyone else who wants to contribute. +There is _lots_ of work to be done here before this becomes a useful tool. +But, now that it builds and I have dozens of WDC_TODO’s sprinkled around the +code, it is maybe a reasonable time to open this up to anyone else who wants to +contribute. Below is the text from the LLVM README: