Cleanup some example and empty directories that were left around after
the last import of contrib/llvm. Suggested by: obrien Approved by: rpaulo (mentor)
This commit is contained in:
parent
d000b49d26
commit
fec07a7df1
@ -1,29 +0,0 @@
|
||||
//===- Hello.cpp - Example code from "Writing an LLVMC Plugin" ------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Shows how to write llvmc-based drivers without using TableGen.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/CompilerDriver/AutoGenerated.h"
|
||||
#include "llvm/CompilerDriver/Main.inc"
|
||||
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
|
||||
namespace llvmc {
|
||||
namespace autogenerated {
|
||||
|
||||
int PreprocessOptions () { return 0; }
|
||||
|
||||
int PopulateLanguageMap (LanguageMap&) { llvm::outs() << "Hello!\n"; return 0; }
|
||||
|
||||
int PopulateCompilationGraph (CompilationGraph&) { return 0; }
|
||||
|
||||
}
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
##===- tools/llvmc/examples/Hello/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_BASED_DRIVER = Hello
|
||||
|
||||
include $(LEVEL)/Makefile.common
|
@ -1,14 +0,0 @@
|
||||
##===- tools/llvmc/examples/Makefile -----------------------*- Makefile -*-===##
|
||||
#
|
||||
# The LLVM Compiler Infrastructure
|
||||
#
|
||||
# This file is distributed under the University of Illinois Open Source
|
||||
# License. See LICENSE.TXT for details.
|
||||
#
|
||||
##===----------------------------------------------------------------------===##
|
||||
|
||||
LEVEL=../../..
|
||||
|
||||
PARALLEL_DIRS := Hello Simple mcc16 Skeleton
|
||||
|
||||
include $(LEVEL)/Makefile.common
|
@ -1,15 +0,0 @@
|
||||
##===- llvmc/examples/Simple/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_BASED_DRIVER = Simple
|
||||
BUILT_SOURCES = Simple.inc
|
||||
|
||||
include $(LEVEL)/Makefile.common
|
@ -1,2 +0,0 @@
|
||||
#include "llvm/CompilerDriver/Main.inc"
|
||||
#include "Simple.inc"
|
@ -1,41 +0,0 @@
|
||||
//===- Simple.td - A simple LLVMC-based driver ----------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// A simple LLVMC-based gcc wrapper.
|
||||
//
|
||||
// To compile, use this command:
|
||||
//
|
||||
// $ cd $LLVM_OBJ_DIR/tools/llvmc
|
||||
// $ make BUILD_EXAMPLES=1
|
||||
//
|
||||
// Run as:
|
||||
//
|
||||
// $ $LLVM_OBJ_DIR/$(BuildMode)/bin/Simple
|
||||
//
|
||||
// For instructions on how to build your own LLVMC-based driver, see
|
||||
// the 'examples/Skeleton' directory.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
include "llvm/CompilerDriver/Common.td"
|
||||
|
||||
def gcc : Tool<
|
||||
[(in_language "c"),
|
||||
(out_language "executable"),
|
||||
(output_suffix "out"),
|
||||
(command "gcc"),
|
||||
(sink),
|
||||
|
||||
// -o is what is used by default, out_file_option here is included for
|
||||
// instructive purposes.
|
||||
(out_file_option "-o")
|
||||
]>;
|
||||
|
||||
def LanguageMap : LanguageMap<[(lang_to_suffixes "c", "c")]>;
|
||||
|
||||
def CompilationGraph : CompilationGraph<[(edge "root", "gcc")]>;
|
@ -1,7 +0,0 @@
|
||||
//===- AutoGenerated.td ------------------------------------*- tablegen -*-===//
|
||||
//
|
||||
// Write the TableGen description of your llvmc-based driver here.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
include "llvm/CompilerDriver/Common.td"
|
@ -1,12 +0,0 @@
|
||||
//===--- Hooks.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.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Hook definitions should go here.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
@ -1,15 +0,0 @@
|
||||
//===--- 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 and AutoGenerated.inc.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/CompilerDriver/Main.inc"
|
||||
#include "AutoGenerated.inc"
|
@ -1,20 +0,0 @@
|
||||
##===- llvmc/examples/Skeleton/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 $(LEVEL)/Makefile.common refers to
|
||||
# $LLVM_OBJ_DIR/Makefile.common or $YOUR_LLVM_BASED_PROJECT/Makefile.common.
|
||||
export LEVEL = ../../../..
|
||||
|
||||
# Change this to the name of your LLVMC-based driver.
|
||||
LLVMC_BASED_DRIVER = llvmc-skeleton
|
||||
|
||||
# Change this to the name of .inc file built from your .td file.
|
||||
BUILT_SOURCES = AutoGenerated.inc
|
||||
|
||||
include $(LEVEL)/Makefile.common
|
@ -1,6 +0,0 @@
|
||||
|
||||
This is a template that can be used to create your own LLVMC-based drivers. Just
|
||||
copy the `Skeleton` directory to the location of your preference and edit
|
||||
`Skeleton/Makefile` and `Skeleton/AutoGenerated.inc`.
|
||||
|
||||
The build system assumes that your project is based on LLVM.
|
@ -1,109 +0,0 @@
|
||||
#include "llvm/System/Path.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace llvmc {
|
||||
extern char *ProgramName;
|
||||
|
||||
namespace autogenerated {
|
||||
extern llvm::cl::opt<std::string> Parameter_p;
|
||||
}
|
||||
}
|
||||
|
||||
using namespace llvm;
|
||||
using namespace llvmc;
|
||||
|
||||
// Returns the platform specific directory separator via #ifdefs.
|
||||
// FIXME: This currently work on linux and windows only. It does not
|
||||
// work on other unices.
|
||||
static std::string GetDirSeparator() {
|
||||
#if __linux__ || __APPLE__
|
||||
return "/";
|
||||
#else
|
||||
return "\\";
|
||||
#endif
|
||||
}
|
||||
|
||||
namespace hooks {
|
||||
// Get preprocessor define for the part.
|
||||
// It is __partname format in lower case.
|
||||
std::string
|
||||
GetLowerCasePartDefine(void) {
|
||||
std::string Partname;
|
||||
if (autogenerated::Parameter_p.empty()) {
|
||||
Partname = "16f1xxx";
|
||||
} else {
|
||||
Partname = autogenerated::Parameter_p;
|
||||
}
|
||||
|
||||
std::string LowerCase;
|
||||
for (unsigned i = 0; i < Partname.size(); i++) {
|
||||
LowerCase.push_back(std::tolower(Partname[i]));
|
||||
}
|
||||
|
||||
return "__" + LowerCase;
|
||||
}
|
||||
|
||||
std::string
|
||||
GetUpperCasePartDefine(void) {
|
||||
std::string Partname;
|
||||
if (autogenerated::Parameter_p.empty()) {
|
||||
Partname = "16f1xxx";
|
||||
} else {
|
||||
Partname = autogenerated::Parameter_p;
|
||||
}
|
||||
|
||||
std::string UpperCase;
|
||||
for (unsigned i = 0; i < Partname.size(); i++) {
|
||||
UpperCase.push_back(std::toupper(Partname[i]));
|
||||
}
|
||||
|
||||
return "__" + UpperCase;
|
||||
}
|
||||
|
||||
// Get the dir where c16 executables reside.
|
||||
std::string GetBinDir() {
|
||||
// Construct a Path object from the program name.
|
||||
void *P = (void*) (intptr_t) GetBinDir;
|
||||
sys::Path ProgramFullPath
|
||||
= sys::Path::GetMainExecutable(llvmc::ProgramName, P);
|
||||
|
||||
// Get the dir name for the program. It's last component should be 'bin'.
|
||||
std::string BinDir = ProgramFullPath.getDirname();
|
||||
|
||||
// llvm::errs() << "BinDir: " << BinDir << '\n';
|
||||
return BinDir + GetDirSeparator();
|
||||
}
|
||||
|
||||
// Get the Top-level Installation dir for c16.
|
||||
std::string GetInstallDir() {
|
||||
sys::Path BinDirPath = sys::Path(GetBinDir());
|
||||
|
||||
// Go one more level up to get the install dir.
|
||||
std::string InstallDir = BinDirPath.getDirname();
|
||||
|
||||
return InstallDir + GetDirSeparator();
|
||||
}
|
||||
|
||||
// Get the dir where the c16 header files reside.
|
||||
std::string GetStdHeadersDir() {
|
||||
return GetInstallDir() + "include";
|
||||
}
|
||||
|
||||
// Get the dir where the assembler header files reside.
|
||||
std::string GetStdAsmHeadersDir() {
|
||||
return GetInstallDir() + "inc";
|
||||
}
|
||||
|
||||
// Get the dir where the linker scripts reside.
|
||||
std::string GetStdLinkerScriptsDir() {
|
||||
return GetInstallDir() + "lkr";
|
||||
}
|
||||
|
||||
// Get the dir where startup code, intrinsics and lib reside.
|
||||
std::string GetStdLibsDir() {
|
||||
return GetInstallDir() + "lib";
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
//===--- 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.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Usually this file just includes CompilerDriver/Main.inc, but here we apply
|
||||
// some trickery to make the built-in '-save-temps' option hidden and enable
|
||||
// '--temp-dir' by default.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/CompilerDriver/BuiltinOptions.h"
|
||||
#include "llvm/CompilerDriver/Main.h"
|
||||
|
||||
#include "llvm/System/Path.h"
|
||||
#include "llvm/Config/config.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include "PIC16.inc"
|
||||
|
||||
namespace {
|
||||
|
||||
// Modify the PACKAGE_VERSION to use build number in top level configure file.
|
||||
void PIC16VersionPrinter(void) {
|
||||
std::cout << "MPLAB C16 1.0 " << PACKAGE_VERSION << "\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
|
||||
// HACK
|
||||
SaveTemps.setHiddenFlag(llvm::cl::Hidden);
|
||||
TempDirname.setHiddenFlag(llvm::cl::Hidden);
|
||||
Languages.setHiddenFlag(llvm::cl::Hidden);
|
||||
DryRun.setHiddenFlag(llvm::cl::Hidden);
|
||||
|
||||
llvm::cl::SetVersionPrinter(PIC16VersionPrinter);
|
||||
|
||||
// Ask for a standard temp dir, but just cache its basename., and delete it.
|
||||
llvm::sys::Path tempDir;
|
||||
tempDir = llvm::sys::Path::GetTemporaryDirectory();
|
||||
TempDirname = tempDir.getBasename();
|
||||
tempDir.eraseFromDisk(true);
|
||||
|
||||
// We are creating a temp dir in current dir, with the cached name.
|
||||
// But before that remove if one already exists with that name..
|
||||
tempDir = TempDirname;
|
||||
tempDir.eraseFromDisk(true);
|
||||
|
||||
return llvmc::Main(argc, argv);
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
##===- llvmc/examples/mcc16/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_BASED_DRIVER = mcc16
|
||||
BUILT_SOURCES = PIC16.inc
|
||||
|
||||
include $(LEVEL)/Makefile.common
|
@ -1,234 +0,0 @@
|
||||
//===- PIC16.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 "Enable Debugging")),
|
||||
(switch_option "E",
|
||||
(help "Stop after preprocessing, do not compile")),
|
||||
(switch_option "S",
|
||||
(help "Stop after compilation, do not assemble")),
|
||||
(switch_option "bc",
|
||||
(help "Stop after b-code generation, do not compile")),
|
||||
(switch_option "c",
|
||||
(help "Stop after assemble, do not link")),
|
||||
(prefix_option "p",
|
||||
(help "Specify part name")),
|
||||
(prefix_list_option "I",
|
||||
(help "Add a directory to include path")),
|
||||
(prefix_list_option "L",
|
||||
(help "Add a directory to library path")),
|
||||
(prefix_list_option "K",
|
||||
(help "Add a directory to linker script search path")),
|
||||
(parameter_option "l",
|
||||
(help "Specify a library to link")),
|
||||
(parameter_option "k",
|
||||
(help "Specify a linker script")),
|
||||
(parameter_option "m",
|
||||
(help "Generate linker map file with the given name")),
|
||||
(prefix_list_option "D",
|
||||
(help "Define a macro")),
|
||||
(switch_option "X",
|
||||
(help "Do not invoke mp2hex to create an output hex file.")),
|
||||
(switch_option "O0",
|
||||
(help "Do not optimize")),
|
||||
(switch_option "O1",
|
||||
(help "Optimization Level 1.")),
|
||||
(switch_option "O2",
|
||||
(help "Optimization Level 2.")),
|
||||
(switch_option "O3",
|
||||
(help "Optimization Level 3.")),
|
||||
(switch_option "Od",
|
||||
(help "Perform Debug-safe Optimizations only.")),
|
||||
(switch_option "w",
|
||||
(help "Disable all warnings.")),
|
||||
// (switch_option "O1",
|
||||
// (help "Optimization level 1")),
|
||||
// (switch_option "O2",
|
||||
// (help "Optimization level 2. (Default)")),
|
||||
// (parameter_option "pre-RA-sched",
|
||||
// (help "Example of an option that is passed to llc")),
|
||||
(parameter_option "regalloc",
|
||||
(help "Register allocator to use (possible values: simple, linearscan, pbqp, local; default=linearscan)")),
|
||||
(prefix_list_option "Wa,", (comma_separated),
|
||||
(help "Pass options to assembler (Run 'gpasm -help' for assembler options)")),
|
||||
(prefix_list_option "Wl,", (comma_separated),
|
||||
(help "Pass options to linker (Run 'mplink -help' for linker options)"))
|
||||
// (prefix_list_option "Wllc,",
|
||||
// (help "Pass options to llc")),
|
||||
// (prefix_list_option "Wo,",
|
||||
// (help "Pass options to llvm-ld"))
|
||||
]>;
|
||||
|
||||
// Tools
|
||||
class clang_based<string language, string cmd, string ext_E> : Tool<
|
||||
[(in_language language),
|
||||
(out_language "llvm-bitcode"),
|
||||
(output_suffix "bc"),
|
||||
(command cmd),
|
||||
(actions (case
|
||||
(and (multiple_input_files),
|
||||
(or (switch_on "S"), (switch_on "c"))),
|
||||
(error "cannot specify -o with -c or -S with multiple files"),
|
||||
(switch_on "E"), [(forward "E"),
|
||||
(stop_compilation), (output_suffix ext_E)],
|
||||
(and (switch_on "E"), (empty "o")), (no_out_file),
|
||||
(switch_on "bc"),[(stop_compilation), (output_suffix "bc")],
|
||||
(switch_on "g"), (append_cmd "-g"),
|
||||
(switch_on "w"), (append_cmd "-w"),
|
||||
(switch_on "O1"), (append_cmd ""),
|
||||
(switch_on "O2"), (append_cmd ""),
|
||||
(switch_on "O3"), (append_cmd ""),
|
||||
(switch_on "Od"), (append_cmd ""),
|
||||
(not_empty "D"), (forward "D"),
|
||||
(not_empty "I"), (forward "I"),
|
||||
(switch_on "O0"), (append_cmd "-O0"),
|
||||
(default), (append_cmd "-O1")))
|
||||
// (sink)
|
||||
]>;
|
||||
|
||||
def clang_cc : clang_based<"c", "$CALL(GetBinDir)clang -cc1 -I $CALL(GetStdHeadersDir) -D $CALL(GetLowerCasePartDefine) -D $CALL(GetUpperCasePartDefine) -triple=pic16- -emit-llvm-bc ", "i">;
|
||||
|
||||
//def clang_cc : Tool<[
|
||||
// (in_language "c"),
|
||||
// (out_language "llvm-bitcode"),
|
||||
// (output_suffix "bc"),
|
||||
// (cmd_line "$CALL(GetBinDir)clang-cc -I $CALL(GetStdHeadersDir) -triple=pic16- -emit-llvm-bc "),
|
||||
// (cmd_line kkkkk
|
||||
// (actions (case
|
||||
// (switch_on "g"), (append_cmd "g"),
|
||||
// (not_empty "I"), (forward "I"))),
|
||||
// (sink)
|
||||
//]>;
|
||||
|
||||
|
||||
// pre-link-and-lto step.
|
||||
def llvm_ld : Tool<[
|
||||
(in_language "llvm-bitcode"),
|
||||
(out_language "llvm-bitcode"),
|
||||
(output_suffix "bc"),
|
||||
(command "$CALL(GetBinDir)llvm-ld -L $CALL(GetStdLibsDir) -disable-licm-promotion -l std"),
|
||||
(out_file_option "-b"),
|
||||
(actions (case
|
||||
(switch_on "O0"), (append_cmd "-disable-opt"),
|
||||
(switch_on "O1"), (append_cmd "-disable-opt"),
|
||||
// Whenever O3 is not specified on the command line, default i.e. disable-inlining will always be added.
|
||||
(switch_on "O2"), (append_cmd ""),
|
||||
(switch_on "O3"), (append_cmd ""),
|
||||
(default), (append_cmd "-disable-inlining"))),
|
||||
(join)
|
||||
]>;
|
||||
|
||||
// optimize single file
|
||||
def llvm_ld_optimizer : Tool<[
|
||||
(in_language "llvm-bitcode"),
|
||||
(out_language "llvm-bitcode"),
|
||||
(output_suffix "bc"),
|
||||
// FIXME: we are still not disabling licm-promotion.
|
||||
// -disable-licm-promotion and building stdn library causes c16-71 to fail.
|
||||
(command "$CALL(GetBinDir)llvm-ld "),
|
||||
(out_file_option "-b"),
|
||||
(actions (case
|
||||
(switch_on "O0"), (append_cmd "-disable-opt"),
|
||||
(switch_on "O1"), (append_cmd "-disable-opt"),
|
||||
// Whenever O3 is not specified on the command line, default i.e. disable-inlining will always be added.
|
||||
(switch_on "O2"), (append_cmd ""),
|
||||
(switch_on "O3"), (append_cmd ""),
|
||||
(default), (append_cmd "-disable-inlining")))
|
||||
]>;
|
||||
|
||||
// optimizer step.
|
||||
def pic16passes : Tool<[
|
||||
(in_language "llvm-bitcode"),
|
||||
(out_language "llvm-bitcode"),
|
||||
(output_suffix "obc"),
|
||||
(command "$CALL(GetBinDir)opt -pic16cloner -pic16overlay -f"),
|
||||
(actions (case
|
||||
(switch_on "O0"), (append_cmd "-disable-opt")))
|
||||
]>;
|
||||
|
||||
def llc : Tool<[
|
||||
(in_language "llvm-bitcode"),
|
||||
(out_language "assembler"),
|
||||
(output_suffix "s"),
|
||||
(command "$CALL(GetBinDir)llc -march=pic16 -disable-jump-tables -pre-RA-sched=list-burr -f"),
|
||||
(actions (case
|
||||
(switch_on "S"), (stop_compilation),
|
||||
// (not_empty "Wllc,"), (unpack_values "Wllc,"),
|
||||
// (not_empty "pre-RA-sched"), (forward "pre-RA-sched")))
|
||||
(not_empty "regalloc"), (forward "regalloc"),
|
||||
(empty "regalloc"), (append_cmd "-regalloc=linearscan")))
|
||||
]>;
|
||||
|
||||
def gpasm : Tool<[
|
||||
(in_language "assembler"),
|
||||
(out_language "object-code"),
|
||||
(output_suffix "o"),
|
||||
(command "$CALL(GetBinDir)gpasm -z -r decimal -I $CALL(GetStdAsmHeadersDir) -C -c -w 2"),
|
||||
(actions (case
|
||||
(switch_on "c"), (stop_compilation),
|
||||
(switch_on "g"), (append_cmd "-g"),
|
||||
(not_empty "p"), (forward "p"),
|
||||
(empty "p"), (append_cmd "-p 16f1xxx"),
|
||||
(not_empty "Wa,"), (forward_value "Wa,")))
|
||||
]>;
|
||||
|
||||
def mplink : Tool<[
|
||||
(in_language "object-code"),
|
||||
(out_language "executable"),
|
||||
(output_suffix "cof"),
|
||||
(command "$CALL(GetBinDir)mplink -e -k $CALL(GetStdLinkerScriptsDir) -l $CALL(GetStdLibsDir) intrinsics.lib stdn.lib"),
|
||||
(actions (case
|
||||
(not_empty "Wl,"), (forward_value "Wl,"),
|
||||
(switch_on "X"), (append_cmd "-x"),
|
||||
(not_empty "L"), (forward_as "L", "-l"),
|
||||
(not_empty "K"), (forward_as "K", "-k"),
|
||||
(not_empty "m"), (forward "m"),
|
||||
(not_empty "p"), [(forward "p"), (append_cmd "-c")],
|
||||
(empty "p"), (append_cmd "-p 16f1xxx -c"),
|
||||
// (not_empty "l"), [(unpack_values "l"),(append_cmd ".lib")])),
|
||||
(not_empty "k"), (forward "k"),
|
||||
(not_empty "l"), (forward "l"))),
|
||||
(join)
|
||||
]>;
|
||||
|
||||
// Language map
|
||||
|
||||
def LanguageMap : LanguageMap<[
|
||||
(lang_to_suffixes "c", "c"),
|
||||
(lang_to_suffixes "c-cpp-output", "i"),
|
||||
(lang_to_suffixes "assembler", "s"),
|
||||
(lang_to_suffixes "assembler-with-cpp", "S"),
|
||||
(lang_to_suffixes "llvm-assembler", "ll"),
|
||||
(lang_to_suffixes "llvm-bitcode", "bc"),
|
||||
(lang_to_suffixes "object-code", "o"),
|
||||
(lang_to_suffixes "executable", "cof")
|
||||
]>;
|
||||
|
||||
// Compilation graph
|
||||
|
||||
def CompilationGraph : CompilationGraph<[
|
||||
(edge "root", "clang_cc"),
|
||||
(edge "root", "llvm_ld"),
|
||||
(optional_edge "root", "llvm_ld_optimizer",
|
||||
(case (switch_on "S"), (inc_weight),
|
||||
(switch_on "c"), (inc_weight))),
|
||||
(edge "root", "gpasm"),
|
||||
(edge "root", "mplink"),
|
||||
(edge "clang_cc", "llvm_ld"),
|
||||
(optional_edge "clang_cc", "llvm_ld_optimizer",
|
||||
(case (switch_on "S"), (inc_weight),
|
||||
(switch_on "c"), (inc_weight))),
|
||||
(edge "llvm_ld", "pic16passes"),
|
||||
(edge "llvm_ld_optimizer", "pic16passes"),
|
||||
(edge "pic16passes", "llc"),
|
||||
(edge "llc", "gpasm"),
|
||||
(edge "gpasm", "mplink")
|
||||
]>;
|
@ -1,75 +0,0 @@
|
||||
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 examples/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
|
Loading…
x
Reference in New Issue
Block a user