Add support for frameworks. Patch by Shantonu Sen!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46421 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2008-01-27 22:58:59 +00:00
parent c66a4f912f
commit 3992f5231a

View File

@ -55,10 +55,18 @@ static cl::list<std::string> LibPaths("L", cl::Prefix,
cl::desc("Specify a library search path"), cl::desc("Specify a library search path"),
cl::value_desc("directory")); cl::value_desc("directory"));
static cl::list<std::string> FrameworkPaths("F", cl::Prefix,
cl::desc("Specify a framework search path"),
cl::value_desc("directory"));
static cl::list<std::string> Libraries("l", cl::Prefix, static cl::list<std::string> Libraries("l", cl::Prefix,
cl::desc("Specify libraries to link to"), cl::desc("Specify libraries to link to"),
cl::value_desc("library prefix")); cl::value_desc("library prefix"));
static cl::list<std::string> Frameworks("framework",
cl::desc("Specify frameworks to link to"),
cl::value_desc("framework"));
// Options to control the linking, optimization, and code gen processes // Options to control the linking, optimization, and code gen processes
static cl::opt<bool> LinkAsLibrary("link-as-library", static cl::opt<bool> LinkAsLibrary("link-as-library",
cl::desc("Link the .bc files together as a library, not an executable")); cl::desc("Link the .bc files together as a library, not an executable"));
@ -287,6 +295,8 @@ static int GenerateCFile(const std::string &OutputFile,
/// OutputFilename - The name of the file to generate. /// OutputFilename - The name of the file to generate.
/// NativeLinkItems - The native libraries, files, code with which to link /// NativeLinkItems - The native libraries, files, code with which to link
/// LibPaths - The list of directories in which to find libraries. /// LibPaths - The list of directories in which to find libraries.
/// FrameworksPaths - The list of directories in which to find frameworks.
/// Frameworks - The list of frameworks (dynamic libraries)
/// gcc - The pathname to use for GGC. /// gcc - The pathname to use for GGC.
/// envp - A copy of the process's current environment. /// envp - A copy of the process's current environment.
/// ///
@ -331,10 +341,12 @@ static int GenerateNative(const std::string &OutputFilename,
args.push_back(OutputFilename); args.push_back(OutputFilename);
args.push_back(InputFilename); args.push_back(InputFilename);
// Add in the library paths // Add in the library and framework paths
for (unsigned index = 0; index < LibPaths.size(); index++) { for (unsigned index = 0; index < LibPaths.size(); index++) {
args.push_back("-L"); args.push_back("-L" + LibPaths[index]);
args.push_back(LibPaths[index]); }
for (unsigned index = 0; index < FrameworkPaths.size(); index++) {
args.push_back("-F" + FrameworkPaths[index]);
} }
// Add the requested options // Add the requested options
@ -350,6 +362,11 @@ static int GenerateNative(const std::string &OutputFilename,
args.push_back(LinkItems[index].first); args.push_back(LinkItems[index].first);
} }
// Add in frameworks to link.
for (unsigned index = 0; index < Frameworks.size(); index++) {
args.push_back("-framework");
args.push_back(Frameworks[index]);
}
// Now that "args" owns all the std::strings for the arguments, call the c_str // Now that "args" owns all the std::strings for the arguments, call the c_str
// method to get the underlying string array. We do this game so that the // method to get the underlying string array. We do this game so that the