mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-04 22:07:27 +00:00
Add a --linker command-line option, make all tests pass.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50755 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
895820da24
commit
978d498e40
@ -1,5 +1,5 @@
|
||||
// Test that we can compile .c files as C++ and vice versa
|
||||
// RUN: llvmc2 -x c++ %s -x c %p/false.cpp -x lisp -x whatnot -x none %p/false2.cpp -o %t
|
||||
// RUN: llvmc2 --linker=c++ -x c++ %s -x c %p/false.cpp -x lisp -x whatnot -x none %p/false2.cpp -o %t
|
||||
// RUN: ./%t | grep hello
|
||||
|
||||
#include <iostream>
|
||||
@ -10,5 +10,5 @@ extern std::string test2();
|
||||
int main() {
|
||||
std::cout << "h";
|
||||
test();
|
||||
std::cout << test2() << '\n';
|
||||
std::cout << test2() << '\n';
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Test that we can compile C++ code.
|
||||
// RUN: llvmc2 %s -o %t
|
||||
// RUN: llvmc2 --linker=c++ %s -o %t
|
||||
// RUN: ./%t | grep hello
|
||||
#include <iostream>
|
||||
|
||||
|
@ -33,6 +33,13 @@ def CompilationGraph : CompilationGraph<[
|
||||
|
||||
Edge<llc, llvm_gcc_assembler>,
|
||||
Edge<llvm_gcc_assembler, llvm_gcc_linker>,
|
||||
OptionalEdge<llvm_gcc_assembler, llvm_gcc_cpp_linker,
|
||||
[(parameter_equals "linker", "g++"),
|
||||
(parameter_equals "linker", "c++")]>,
|
||||
|
||||
Edge<root, llvm_gcc_linker>
|
||||
|
||||
Edge<root, llvm_gcc_linker>,
|
||||
OptionalEdge<root, llvm_gcc_cpp_linker,
|
||||
[(parameter_equals "linker", "g++"),
|
||||
(parameter_equals "linker", "c++")]>
|
||||
]>;
|
||||
|
@ -81,19 +81,18 @@ def llvm_gcc_linker : Tool<
|
||||
]>;
|
||||
|
||||
// Alternative linker for C++
|
||||
// TOTHINK: how to implement this best?
|
||||
// Something like input_file_language can only choose between two languages.
|
||||
// def llvm_gcc_cpp_linker : Tool<
|
||||
// [(in_language "object-code"),
|
||||
// (out_language "executable"),
|
||||
// (output_suffix "out"),
|
||||
// (cmd_line "llvm-g++ $INFILE -o $OUTFILE"),
|
||||
// (join),
|
||||
// //(input_file_language "c++"),
|
||||
// (prefix_list_option "L", (forward)),
|
||||
// (prefix_list_option "l", (forward)),
|
||||
// (prefix_list_option "Wl", (unpack_values))
|
||||
// ]>;
|
||||
def llvm_gcc_cpp_linker : Tool<
|
||||
[(in_language "object-code"),
|
||||
(out_language "executable"),
|
||||
(output_suffix "out"),
|
||||
(cmd_line "llvm-g++ $INFILE -o $OUTFILE"),
|
||||
(join),
|
||||
(parameter_option "linker",
|
||||
(help "Choose linker (possible values: gcc, g++)")),
|
||||
(prefix_list_option "L", (forward)),
|
||||
(prefix_list_option "l", (forward)),
|
||||
(prefix_list_option "Wl", (unpack_values))
|
||||
]>;
|
||||
|
||||
// Language map
|
||||
|
||||
|
@ -175,11 +175,12 @@ struct GlobalOptionDescription : public OptionDescription {
|
||||
if (other.Type != Type)
|
||||
throw "Conflicting definitions for the option " + Name + "!";
|
||||
|
||||
if (Help.empty() && !other.Help.empty())
|
||||
if (Help == DefaultHelpString)
|
||||
Help = other.Help;
|
||||
else if (!Help.empty() && !other.Help.empty())
|
||||
cerr << "Warning: more than one help string defined for option "
|
||||
else if (other.Help != DefaultHelpString) {
|
||||
llvm::cerr << "Warning: more than one help string defined for option "
|
||||
+ Name + "\n";
|
||||
}
|
||||
|
||||
Flags |= other.Flags;
|
||||
}
|
||||
@ -290,8 +291,8 @@ struct ToolProperties : public RefCountedBase<ToolProperties> {
|
||||
|
||||
// Default ctor here is needed because StringMap can only store
|
||||
// DefaultConstructible objects
|
||||
ToolProperties() {}
|
||||
ToolProperties (const std::string& n) : Name(n) {}
|
||||
ToolProperties() : Flags(0) {}
|
||||
ToolProperties (const std::string& n) : Name(n), Flags(0) {}
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user