[llvm-commits] [llvm] r73013 - in /llvm/trunk/tools/llvmc/example/mcc16: ./ Makefile README driver/ driver/Main.cpp driver/Makefile plugins/ plugins/Makefile plugins/PIC16Base/ plugins/PIC16Base/Makefile plugins/PIC16Base/PIC16Base.td plugins/PIC16Base/PluginMain.cpp

Mikhail Glushenkov foldr at codedgers.com
Sun Jun 7 00:08:02 PDT 2009


Author: foldr
Date: Sun Jun  7 02:08:01 2009
New Revision: 73013

URL: http://llvm.org/viewvc/llvm-project?rev=73013&view=rev
Log:
A basic PIC16 toolchain driver.

Nice addition to the examples and also a starting point for Sanjiv to work on.

Added:
    llvm/trunk/tools/llvmc/example/mcc16/
    llvm/trunk/tools/llvmc/example/mcc16/Makefile
    llvm/trunk/tools/llvmc/example/mcc16/README
    llvm/trunk/tools/llvmc/example/mcc16/driver/
    llvm/trunk/tools/llvmc/example/mcc16/driver/Main.cpp
    llvm/trunk/tools/llvmc/example/mcc16/driver/Makefile
    llvm/trunk/tools/llvmc/example/mcc16/plugins/
    llvm/trunk/tools/llvmc/example/mcc16/plugins/Makefile
    llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/
    llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/Makefile
    llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td
    llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PluginMain.cpp

Added: llvm/trunk/tools/llvmc/example/mcc16/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/example/mcc16/Makefile?rev=73013&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/example/mcc16/Makefile (added)
+++ llvm/trunk/tools/llvmc/example/mcc16/Makefile Sun Jun  7 02:08:01 2009
@@ -0,0 +1,24 @@
+##===- llvmc/example/mcc16/Makefile ------------------------*- Makefile -*-===##
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open
+# Source License. See LICENSE.TXT for details.
+#
+##===----------------------------------------------------------------------===##
+
+# Change this so that $(BASE_LEVEL)/Makefile.common refers to
+# $LLVM_DIR/Makefile.common.
+export LLVMC_BASE_LEVEL = ../../../..
+
+# Change this to the name of your LLVMC-based driver.
+export LLVMC_BASED_DRIVER_NAME = mcc16
+
+# List your plugin names here
+export LLVMC_BUILTIN_PLUGINS = PIC16Base
+
+LEVEL = $(LLVMC_BASE_LEVEL)
+
+DIRS = plugins driver
+
+include $(LEVEL)/Makefile.common

Added: llvm/trunk/tools/llvmc/example/mcc16/README
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/example/mcc16/README?rev=73013&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/example/mcc16/README (added)
+++ llvm/trunk/tools/llvmc/example/mcc16/README Sun Jun  7 02:08:01 2009
@@ -0,0 +1,75 @@
+This is a basic compiler driver for the PIC16 toolchain that shows how to create
+your own llvmc-based drivers. It is based on the example/Skeleton template.
+
+The PIC16 toolchain looks like this:
+
+clang-cc (FE) -> llvm-ld (optimizer) -> llc (codegen) -> native-as -> native-ld
+
+Following features were requested by Sanjiv:
+
+From: Sanjiv Gupta <sanjiv.gupta <at> microchip.com>
+Subject: Re: llvmc for PIC16
+Newsgroups: gmane.comp.compilers.llvm.devel
+Date: 2009-06-05 06:51:14 GMT
+
+The salient features that we want to have in the driver are:
+1. llvm-ld will be used as "The Optimizer".
+2. If the user has specified to generate the final executable, then
+llvm-ld should run on all the .bc files generated by clang and create a
+single optimized .bc file for further tools.
+3. -Wo <options> - pass optimizations to the llvm-ld
+4. mcc16 -Wl <options> - pass options to native linker.
+5. mcc16 -Wa <options> - pass options to native assembler.
+
+Here are some example command lines and sample command invocations as to
+what should be done.
+
+$ mcc16 -S foo.c
+// [clang-cc foo.c] -> foo.bc
+// [llvm-ld foo.bc] -> foo.opt.bc
+// [llc foo.opt.bc] -> foo.s
+
+$ mcc16 -S foo.c bar.c
+// [clang-cc foo.c] -> foo.bc
+// [llvm-ld foo.bc] -> foo.opt.bc
+// [llc foo.opt.bc] -> foo.s
+// [clang-cc bar.c] -> bar.bc
+// [llvm-ld bar.bc] -> bar.opt.bc
+// [llc bar.opt.bc] -> bar.s
+
+** Use of -g causes llvm-ld to run with -disable-opt
+$ mcc16 -S -g foo.c
+// [clang-cc foo.c] -> foo.bc
+// [llvm-ld -disable-opt foo.bc] -> foo.opt.bc
+// [llc foo.opt.bc] -> foo.s
+
+** -I is passed to clang-cc, -pre-RA-sched=list-burr to llc.
+$ mcc16 -S -g -I ../include -pre-RA-sched=list-burr foo.c
+// [clang-cc -I ../include foo.c] -> foo.bc
+// [llvm-ld -disable-opt foo.bc] -> foo.opt.bc
+// [llc -pre-RA-sched=list-burr foo.opt.bc] -> foo.s
+
+** -Wo passes options to llvm-ld
+$ mcc16 -Wo=opt1,opt2 -S -I ../include -pre-RA-sched=list-burr foo.c
+// [clang-cc -I ../include foo.c] -> foo.bc
+// [llvm-ld -opt1 -opt2 foo.bc] -> foo.opt.bc
+// [llc -pre-RA-sched=list-burr foo.opt.bc] -> foo.s
+
+** -Wa passes options to native as.
+$ mcc16 -c foo.c -Wa=opt1
+// [clang-cc foo.c] -> foo.bc
+// [llvm-ld foo.bc] -> foo.opt.bc
+// [llc foo.opt.bc] -> foo.s
+// [native-as -opt1 foo.s] -> foo.o
+
+$ mcc16 -Wo=opt1 -Wl=opt2 -Wa=opt3 foo.c bar.c
+// [clang-cc foo.c] -> foo.bc
+// [clang-cc bar.c] -> bar.bc
+// [llvm-ld -opt1 foo.bc bar.bc] -> a.out.bc
+// [llc a.out.bc] -> a.out.s
+// [native-as -opt3 a.out.s] -> a.out.o
+// [native-ld -opt2 a.out.o] -> a.out
+
+Is this achievable by a tablegen based driver ?
+
+- Sanjiv

Added: llvm/trunk/tools/llvmc/example/mcc16/driver/Main.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/example/mcc16/driver/Main.cpp?rev=73013&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/example/mcc16/driver/Main.cpp (added)
+++ llvm/trunk/tools/llvmc/example/mcc16/driver/Main.cpp Sun Jun  7 02:08:01 2009
@@ -0,0 +1,14 @@
+//===--- Main.cpp - The LLVM Compiler Driver -------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open
+// Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  Just include CompilerDriver/Main.inc.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/CompilerDriver/Main.inc"

Added: llvm/trunk/tools/llvmc/example/mcc16/driver/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/example/mcc16/driver/Makefile?rev=73013&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/example/mcc16/driver/Makefile (added)
+++ llvm/trunk/tools/llvmc/example/mcc16/driver/Makefile Sun Jun  7 02:08:01 2009
@@ -0,0 +1,22 @@
+##===- llvmc/example/mcc16/driver/Makefile -----------------*- Makefile -*-===##
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open
+# Source License. See LICENSE.TXT for details.
+#
+##===----------------------------------------------------------------------===##
+
+LEVEL = $(LLVMC_BASE_LEVEL)/..
+
+TOOLNAME = $(LLVMC_BASED_DRIVER_NAME)
+LLVMLIBS = CompilerDriver
+
+ifneq ($(LLVMC_BUILTIN_PLUGINS),)
+USEDLIBS += $(patsubst %,plugin_llvmc_%,$(LLVMC_BUILTIN_PLUGINS))
+endif
+
+LINK_COMPONENTS = support system
+REQUIRES_EH := 1
+
+include $(LEVEL)/Makefile.common

Added: llvm/trunk/tools/llvmc/example/mcc16/plugins/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/example/mcc16/plugins/Makefile?rev=73013&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/example/mcc16/plugins/Makefile (added)
+++ llvm/trunk/tools/llvmc/example/mcc16/plugins/Makefile Sun Jun  7 02:08:01 2009
@@ -0,0 +1,18 @@
+##===- llvmc/example/Skeleton/plugins/Makefile -------------*- Makefile -*-===##
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open
+# Source License. See LICENSE.TXT for details.
+#
+##===----------------------------------------------------------------------===##
+
+LEVEL = $(LLVMC_BASE_LEVEL)/..
+
+ifneq ($(LLVMC_BUILTIN_PLUGINS),)
+DIRS = $(LLVMC_BUILTIN_PLUGINS)
+endif
+
+export LLVMC_BUILTIN_PLUGIN=1
+
+include $(LEVEL)/Makefile.common

Added: llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/Makefile?rev=73013&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/Makefile (added)
+++ llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/Makefile Sun Jun  7 02:08:01 2009
@@ -0,0 +1,17 @@
+##===- llvmc/example/Skeleton/plugins/Plugin/Makefile ------*- Makefile -*-===##
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+##===----------------------------------------------------------------------===##
+
+LEVEL = $(LLVMC_BASE_LEVEL)/../..
+
+# Change this to the name of your plugin.
+LLVMC_PLUGIN = PIC16Base
+
+BUILT_SOURCES = AutoGenerated.inc
+
+include $(LEVEL)/Makefile.common

Added: llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td?rev=73013&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td (added)
+++ llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td Sun Jun  7 02:08:01 2009
@@ -0,0 +1,116 @@
+//===- PIC16Base.td - PIC16 toolchain driver ---------------*- tablegen -*-===//
+//
+// A basic driver for the PIC16 toolchain.
+//
+//===----------------------------------------------------------------------===//
+
+include "llvm/CompilerDriver/Common.td"
+
+// Options
+
+def OptionList : OptionList<[
+ (switch_option "g",
+    (help "Disable optimizations")),
+ (switch_option "S",
+    (help "Stop after compilation, do not assemble")),
+ (parameter_option "I",
+    (help "Add a directory to include path")),
+ (parameter_option "pre-RA-sched",
+    (help "Example of an option that is passed to llc")),
+ (prefix_list_option "Wa,",
+    (help "Pass options to native assembler")),
+ (prefix_list_option "Wl,",
+    (help "Pass options to native linker")),
+ (prefix_list_option "Wllc,",
+    (help "Pass options to llc")),
+ (prefix_list_option "Wo,",
+    (help "Pass options to llvm-ld"))
+]>;
+
+// Tools
+
+def clang_cc : Tool<[
+ (in_language "c"),
+ (out_language "llvm-bitcode"),
+ (output_suffix "bc"),
+ (cmd_line "clang-cc $INFILE -o $OUTFILE"),
+ (actions (case
+          (not_empty "I"), (forward "I"))),
+ (sink)
+]>;
+
+def llvm_ld : Tool<[
+ (in_language "llvm-bitcode"),
+ (out_language "llvm-bitcode"),
+ (output_suffix "bc"),
+ (cmd_line "llvm-ld $INFILE -o $OUTFILE"),
+ (actions (case
+          (switch_on "g"), (append_cmd "-disable-opt"),
+          (not_empty "Wo,"), (unpack_values "Wo,")))
+]>;
+
+def llvm_ld_lto : Tool<[
+ (in_language "llvm-bitcode"),
+ (out_language "llvm-bitcode"),
+ (output_suffix "bc"),
+ (cmd_line "llvm-ld $INFILE -o $OUTFILE"),
+ (actions (case
+          (switch_on "g"), (append_cmd "-disable-opt"),
+          (not_empty "Wo,"), (unpack_values "Wo,"))),
+ (join)
+]>;
+
+def llc : Tool<[
+ (in_language "llvm-bitcode"),
+ (out_language "assembler"),
+ (output_suffix "s"),
+ (cmd_line "llc -f $INFILE -o $OUTFILE"),
+ (actions (case
+          (switch_on "S"), (stop_compilation),
+          (not_empty "Wllc,"), (unpack_values "Wllc,"),
+          (not_empty "pre-RA-sched"), (forward "pre-RA-sched")))
+]>;
+
+def native_as : Tool<[
+ (in_language "assembler"),
+ (out_language "object-code"),
+ (output_suffix "o"),
+ (cmd_line "native-as $INFILE -o $OUTFILE"),
+ (actions (case
+          (not_empty "Wa,"), (unpack_values "Wa,")))
+]>;
+
+def native_ld : Tool<[
+ (in_language "object-code"),
+ (out_language "executable"),
+ (output_suffix "out"),
+ (cmd_line "native-ld $INFILE -o $OUTFILE"),
+ (actions (case
+          (not_empty "Wl,"), (unpack_values "Wl,"))),
+ (join)
+]>;
+
+// Language map
+
+def LanguageMap : LanguageMap<[
+    LangToSuffixes<"c", ["c"]>,
+    LangToSuffixes<"c-cpp-output", ["i"]>,
+    LangToSuffixes<"assembler", ["s"]>,
+    LangToSuffixes<"assembler-with-cpp", ["S"]>,
+    LangToSuffixes<"llvm-assembler", ["ll"]>,
+    LangToSuffixes<"llvm-bitcode", ["bc"]>,
+    LangToSuffixes<"object-code", ["o"]>,
+    LangToSuffixes<"executable", ["out"]>
+]>;
+
+// Compilation graph
+
+def CompilationGraph : CompilationGraph<[
+    Edge<"root", "clang_cc">,
+    Edge<"clang_cc", "llvm_ld_lto">,
+    Edge<"llvm_ld_lto", "llc">,
+    OptionalEdge<"clang_cc", "llvm_ld", (case (switch_on "S"), (inc_weight))>,
+    Edge<"llvm_ld", "llc">,
+    Edge<"llc", "native_as">,
+    Edge<"native_as", "native_ld">
+]>;

Added: llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PluginMain.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PluginMain.cpp?rev=73013&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PluginMain.cpp (added)
+++ llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PluginMain.cpp Sun Jun  7 02:08:01 2009
@@ -0,0 +1 @@
+#include "AutoGenerated.inc"





More information about the llvm-commits mailing list