From: Sanjiv Gupta Date: Thu, 2 Jul 2009 17:35:38 +0000 (+0000) Subject: Fixed handling of -c option.wq X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=31b798197e441533b78fd9da1463dc38555a2fe1;p=oota-llvm.git Fixed handling of -c option.wq git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74711 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td b/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td index 9f5f25b236a..0182bd10011 100644 --- a/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td +++ b/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td @@ -13,6 +13,8 @@ def OptionList : OptionList<[ (help "Enable Debugging")), (switch_option "S", (help "Stop after compilation, do not assemble")), + (switch_option "c", + (help "Stop after assemble, do not link")), (parameter_option "I", (help "Add a directory to include path")), (parameter_option "pre-RA-sched", @@ -43,7 +45,7 @@ def llvm_ld : Tool<[ (in_language "llvm-bitcode"), (out_language "llvm-bitcode"), (output_suffix "bc"), - (cmd_line "llvm-ld -f -link-as-library $INFILE -o $OUTFILE"), + (cmd_line "llvm-ld -link-as-library $INFILE -o $OUTFILE"), (actions (case (switch_on "g"), (append_cmd "-disable-opt"), (not_empty "Wo,"), (unpack_values "Wo,"))) @@ -75,8 +77,9 @@ def gpasm : Tool<[ (in_language "assembler"), (out_language "object-code"), (output_suffix "o"), - (cmd_line "gpasm -I $CALL(GetStdAsmHeadersDir) $INFILE -o $OUTFILE"), + (cmd_line "gpasm -r decimal -p p16F1937 -I $CALL(GetStdAsmHeadersDir) -C -c $INFILE -o $OUTFILE"), (actions (case + (switch_on "c"), (stop_compilation), (not_empty "Wa,"), (unpack_values "Wa,"))) ]>; @@ -84,7 +87,7 @@ def mplink : Tool<[ (in_language "object-code"), (out_language "executable"), (output_suffix "out"), - (cmd_line "mplink /k $CALL(GetStdLinkerScriptsDir) /l $CALL(GetStdLibsDir) $INFILE -o $OUTFILE"), + (cmd_line "mplink.exe /k $CALL(GetStdLinkerScriptsDir) /l $CALL(GetStdLibsDir) 16f1937.lkr intrinsics.lib std.lib $INFILE -o $OUTFILE"), (actions (case (not_empty "Wl,"), (unpack_values "Wl,"))), (join) @@ -109,7 +112,9 @@ 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))>, + OptionalEdge<"clang_cc", "llvm_ld", (case + (switch_on "S"), (inc_weight), + (switch_on "c"), (inc_weight))>, Edge<"llvm_ld", "llc">, Edge<"llc", "gpasm">, Edge<"gpasm", "mplink"> diff --git a/tools/llvmc/example/mcc16/plugins/PIC16Base/PluginMain.cpp b/tools/llvmc/example/mcc16/plugins/PIC16Base/PluginMain.cpp index 09fb9695e9a..21a25b3f734 100644 --- a/tools/llvmc/example/mcc16/plugins/PIC16Base/PluginMain.cpp +++ b/tools/llvmc/example/mcc16/plugins/PIC16Base/PluginMain.cpp @@ -1,5 +1,9 @@ #include "AutoGenerated.inc" + #include "llvm/System/Path.h" +#include "llvm/Support/raw_ostream.h" + +using namespace llvm; namespace llvmc { extern char *ProgramName; @@ -11,19 +15,23 @@ static std::string GetDirSeparator(void) { } namespace hooks { +// Get the dir where c16 executables reside. std::string GetBinDir (void) { // Construct a Path object from the program name. - llvm::sys::Path ProgramFullName(llvmc::ProgramName, - strlen(llvmc::ProgramName)); + 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 = ProgramFullName.getDirname(); + std::string BinDir = ProgramFullPath.getDirname(); + // llvm::errs() << "BinDir: " << BinDir << '\n'; return BinDir + GetDirSeparator(); } +// Get the Top-level Installation dir for c16. std::string GetInstallDir (void) { - llvm::sys::Path BinDirPath = llvm::sys::Path(GetBinDir()); + sys::Path BinDirPath = sys::Path(GetBinDir()); // Go one more level up to get the install dir. std::string InstallDir = BinDirPath.getDirname(); @@ -31,17 +39,22 @@ std::string GetInstallDir (void) { return InstallDir + GetDirSeparator(); } +// Get the dir where the c16 header files reside. std::string GetStdHeadersDir (void) { return GetInstallDir() + "include"; } +// Get the dir where the assembler header files reside. std::string GetStdAsmHeadersDir (void) { return GetInstallDir() + "inc"; } + +// Get the dir where the linker scripts reside. std::string GetStdLinkerScriptsDir (void) { return GetInstallDir() + "lkr"; } +// Get the dir where startup code, intrinsics and lib reside. std::string GetStdLibsDir (void) { return GetInstallDir() + "lib"; }