diff --git a/docs/WritingAnLLVMBackend.html b/docs/WritingAnLLVMBackend.html index 909432ef453..bddc021a323 100644 --- a/docs/WritingAnLLVMBackend.html +++ b/docs/WritingAnLLVMBackend.html @@ -217,6 +217,56 @@ e.g.:
For now, just take a look at lib/Target/CBackend for an example of how the C backend is written.
+ + + + +To actually create your backend, you need to create and modify a few files. +Here, the absolute minimum will be discussed. To actually use LLVM's target +independent codegenerator, you must implement extra +things.
+ +First of all, you should create a subdirectory under lib/Target, +which will hold all the files related to your target. Let's assume that our +target is called, "Dummy", we would create the directory +lib/Target/Dummy.
+ +In this new directory, you should put a Makefile. You can probably +copy one from another target and modify it. It should at least contain the +LEVEL, LIBRARYNAME and TARGET variables, and then +include $(LEVEL)/Makefile.common. Be careful to give the library the +correct name, it must be named LLVMDummy (see the MIPS target, for +example). Alternatively, you can split the library into +LLVMDummyCodeGen and LLVMDummyAsmPrinter, the latter of which +should be implemented in a subdirectory below lib/Target/Dummy (see the +PowerPC target, for example).
+ +Note that these two naming schemes are hardcoded into llvm-config. Using any +other naming scheme will confuse llvm-config and produce lots of (seemingly +unrelated) linker errors when linking llc.
+ +To make your target actually do something, you need to implement a subclass +of TargetMachine. This implementation should typically be in the file +lib/Target/DummyTargetMachine.cpp, but any file in the +lib/Target directory will be built and should work. To use LLVM's target independent code generator, you should +create a subclass of LLVMTargetMachine. This is what all current +machine backends do. To create a target from scratch, create a subclass of +TargetMachine. This is what the current language backends do.
+ +To get LLVM to actually build and link your target, you also need to add it +to the TARGETS_TO_BUILD variable. To do this, you need to modify the +configure script to know about your target when parsing the +--enable-targets option. Search the configure script for +TARGETS_TO_BUILD, add your target to the lists there (some creativity +required) and then reconfigure. Alternatively, you can change +autotools/configure.ac and regenerate configure by running +./autoconf/AutoRegen.sh. +