mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 15:11:24 +00:00
Support -emit-llvm properly (with -S and -c).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60764 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
677a7ec489
commit
74bcb057c0
@ -13,7 +13,7 @@
|
||||
|
||||
def OptList : OptionList<[
|
||||
(switch_option "emit-llvm",
|
||||
(help "Emit LLVM bitcode files instead of native object files")),
|
||||
(help "Emit LLVM .ll files instead of native object files")),
|
||||
(switch_option "E",
|
||||
(help "Stop after the preprocessing stage, do not run the compiler")),
|
||||
(switch_option "fsyntax-only",
|
||||
@ -42,7 +42,7 @@ def OptList : OptionList<[
|
||||
(help "Pass options to linker"))
|
||||
]>;
|
||||
|
||||
class llvm_gcc_based <string cmd_prefix, string in_lang> : Tool<
|
||||
class llvm_gcc_based <string cmd_prefix, string in_lang, string E_ext> : Tool<
|
||||
[(in_language in_lang),
|
||||
(out_language "llvm-bitcode"),
|
||||
(output_suffix "bc"),
|
||||
@ -54,23 +54,27 @@ class llvm_gcc_based <string cmd_prefix, string in_lang> : Tool<
|
||||
!strconcat(cmd_prefix, " -E $INFILE")),
|
||||
(switch_on "fsyntax-only"),
|
||||
!strconcat(cmd_prefix, " -fsyntax-only $INFILE"),
|
||||
(and (switch_on "S"), (switch_on "emit-llvm")),
|
||||
!strconcat(cmd_prefix, " -S $INFILE -o $OUTFILE -emit-llvm"),
|
||||
(default),
|
||||
!strconcat(cmd_prefix, " -c $INFILE -o $OUTFILE -emit-llvm"))),
|
||||
(actions
|
||||
(case
|
||||
(switch_on "emit-llvm"), (stop_compilation),
|
||||
(switch_on "E"), [(stop_compilation), (output_suffix "i")],
|
||||
(switch_on "S"), (stop_compilation),
|
||||
(switch_on "E"), [(stop_compilation), (output_suffix E_ext)],
|
||||
(and (switch_on "emit-llvm"), (switch_on "S")),
|
||||
[(output_suffix "ll"), (stop_compilation)],
|
||||
(and (switch_on "emit-llvm"), (switch_on "c")), (stop_compilation),
|
||||
(switch_on "fsyntax-only"), (stop_compilation),
|
||||
(not_empty "include"), (forward "include"),
|
||||
(not_empty "I"), (forward "I"))),
|
||||
(sink)
|
||||
]>;
|
||||
|
||||
def llvm_gcc_c : llvm_gcc_based<"llvm-gcc -x c", "c">;
|
||||
def llvm_gcc_cpp : llvm_gcc_based<"llvm-g++ -x c++", "c++">;
|
||||
def llvm_gcc_m : llvm_gcc_based<"llvm-gcc -x objective-c", "objective-c">;
|
||||
def llvm_gcc_mxx : llvm_gcc_based<"llvm-gcc -x objective-c++", "objective-c++">;
|
||||
def llvm_gcc_c : llvm_gcc_based<"llvm-gcc -x c", "c", "i">;
|
||||
def llvm_gcc_cpp : llvm_gcc_based<"llvm-g++ -x c++", "c++", "i">;
|
||||
def llvm_gcc_m : llvm_gcc_based<"llvm-gcc -x objective-c", "objective-c", "mi">;
|
||||
def llvm_gcc_mxx : llvm_gcc_based<"llvm-gcc -x objective-c++",
|
||||
"objective-c++", "mi">;
|
||||
|
||||
def opt : Tool<
|
||||
[(in_language "llvm-bitcode"),
|
||||
|
@ -1,15 +1,20 @@
|
||||
// A replacement for the Clang's ccc script.
|
||||
// Depends on the Base plugin.
|
||||
// To compile, use this command:
|
||||
//
|
||||
// cd $LLVMC2_DIR
|
||||
// make DRIVER_NAME=ccc2 BUILTIN_PLUGINS=Clang
|
||||
//
|
||||
// Or just use the default llvmc, which now has this plugin enabled.
|
||||
|
||||
include "llvm/CompilerDriver/Common.td"
|
||||
|
||||
def Priority : PluginPriority<1>;
|
||||
|
||||
def Options : OptionList<[
|
||||
// Extern options
|
||||
(switch_option "E", (extern)),
|
||||
(switch_option "S", (extern)),
|
||||
(switch_option "c", (extern)),
|
||||
(switch_option "fsyntax-only", (extern)),
|
||||
(switch_option "emit-llvm", (extern)),
|
||||
@ -20,6 +25,7 @@ def Options : OptionList<[
|
||||
(parameter_list_option "l", (extern)),
|
||||
(prefix_list_option "Wa,", (extern)),
|
||||
(prefix_list_option "Wl,", (extern)),
|
||||
|
||||
(switch_option "clang", (help "Use Clang instead of llvm-gcc"))
|
||||
]>;
|
||||
|
||||
@ -34,15 +40,17 @@ class clang_based<string language, string cmd, string ext_E> : Tool<
|
||||
!strconcat(cmd, " -E $INFILE -o $OUTFILE"),
|
||||
(default),
|
||||
!strconcat(cmd, " -E $INFILE")),
|
||||
(switch_on "c"),
|
||||
!strconcat(cmd, " -fsyntax-only $INFILE"),
|
||||
(and (switch_on "S"), (switch_on "emit-llvm")),
|
||||
!strconcat(cmd, " -emit-llvm $INFILE -o $OUTFILE"),
|
||||
(default),
|
||||
!strconcat(cmd, " -emit-llvm-bc $INFILE -o $OUTFILE"))),
|
||||
(actions (case (switch_on "E"),
|
||||
[(stop_compilation), (output_suffix ext_E)],
|
||||
(switch_on "c"), (stop_compilation),
|
||||
(switch_on "fsyntax-only"), (stop_compilation),
|
||||
(switch_on "emit-llvm"), (stop_compilation),
|
||||
(and (switch_on "S"), (switch_on "emit-llvm")),
|
||||
[(stop_compilation), (output_suffix "ll")],
|
||||
(and (switch_on "c"), (switch_on "emit-llvm")),
|
||||
(stop_compilation),
|
||||
(not_empty "include"), (forward "include"),
|
||||
(not_empty "I"), (forward "I"))),
|
||||
(sink)
|
||||
@ -60,7 +68,8 @@ def as : Tool<
|
||||
(out_language "object-code"),
|
||||
(output_suffix "o"),
|
||||
(cmd_line "as $INFILE -o $OUTFILE"),
|
||||
(actions (case (not_empty "Wa,"), (unpack_values "Wa,")))
|
||||
(actions (case (not_empty "Wa,"), (unpack_values "Wa,"),
|
||||
(switch_on "c"), (stop_compilation)))
|
||||
]>;
|
||||
|
||||
// Default linker
|
||||
|
Loading…
Reference in New Issue
Block a user