1 #include "llvm/Support/Path.h"
2 #include "llvm/Support/CommandLine.h"
3 #include "llvm/Support/raw_ostream.h"
8 extern char *ProgramName
;
10 namespace autogenerated
{
11 extern llvm::cl::opt
<std::string
> Parameter_p
;
16 using namespace llvmc
;
18 // Returns the platform specific directory separator via #ifdefs.
19 // FIXME: This currently work on linux and windows only. It does not
20 // work on other unices.
21 static std::string
GetDirSeparator() {
22 #if __linux__ || __APPLE__
30 // Get preprocessor define for the part.
31 // It is __partname format in lower case.
33 GetLowerCasePartDefine(void) {
35 if (autogenerated::Parameter_p
.empty()) {
38 Partname
= autogenerated::Parameter_p
;
41 std::string LowerCase
;
42 for (unsigned i
= 0; i
< Partname
.size(); i
++) {
43 LowerCase
.push_back(std::tolower(Partname
[i
]));
46 return "__" + LowerCase
;
50 GetUpperCasePartDefine(void) {
52 if (autogenerated::Parameter_p
.empty()) {
55 Partname
= autogenerated::Parameter_p
;
58 std::string UpperCase
;
59 for (unsigned i
= 0; i
< Partname
.size(); i
++) {
60 UpperCase
.push_back(std::toupper(Partname
[i
]));
63 return "__" + UpperCase
;
66 // Get the dir where c16 executables reside.
67 std::string
GetBinDir() {
68 // Construct a Path object from the program name.
69 void *P
= (void*) (intptr_t) GetBinDir
;
70 sys::Path ProgramFullPath
71 = sys::Path::GetMainExecutable(llvmc::ProgramName
, P
);
73 // Get the dir name for the program. It's last component should be 'bin'.
74 std::string BinDir
= ProgramFullPath
.getDirname();
76 // llvm::errs() << "BinDir: " << BinDir << '\n';
77 return BinDir
+ GetDirSeparator();
80 // Get the Top-level Installation dir for c16.
81 std::string
GetInstallDir() {
82 sys::Path BinDirPath
= sys::Path(GetBinDir());
84 // Go one more level up to get the install dir.
85 std::string InstallDir
= BinDirPath
.getDirname();
87 return InstallDir
+ GetDirSeparator();
90 // Get the dir where the c16 header files reside.
91 std::string
GetStdHeadersDir() {
92 return GetInstallDir() + "include";
95 // Get the dir where the assembler header files reside.
96 std::string
GetStdAsmHeadersDir() {
97 return GetInstallDir() + "inc";
100 // Get the dir where the linker scripts reside.
101 std::string
GetStdLinkerScriptsDir() {
102 return GetInstallDir() + "lkr";
105 // Get the dir where startup code, intrinsics and lib reside.
106 std::string
GetStdLibsDir() {
107 return GetInstallDir() + "lib";