tan  0.0.1
linker.cpp
1 #include "linker/linker.h"
2 #include <string>
3 #include "llvm_api/clang_frontend.h"
4 #include <iostream>
5 
6 namespace tanlang {
7 
8 void Linker::add_files(const vector<str> &filenames) {
9  _input_files.insert(_input_files.end(), filenames.begin(), filenames.end());
10 }
11 
12 bool Linker::link() {
13  // TODO: allow changing these default options
14  vector<const char *> args{};
15  args.push_back("clang");
16  args.push_back("-stdlib=libc++"); /// link to libc++ by default
17 
18  for (const str &e : _input_files) {
19  args.push_back(e.c_str());
20  }
21  for (const str &e : _flags) {
22  args.push_back(e.c_str());
23  }
24  args.push_back("-lm"); /// link to libm by default
25  printf("-lm\n");
26 
27  std::for_each(args.begin(), args.end(), [](const auto &a) { std::cout << a << ' '; });
28  std::cout << ' ';
29 
30  return !clang_main((int)args.size(), (char **)args.data());
31 }
32 
33 void Linker::add_flag(const str &flag) { _flags.push_back(flag); }
34 
35 void Linker::add_flags(vector<str> flags) { _flags.insert(_flags.begin(), flags.begin(), flags.end()); }
36 
37 } // namespace tanlang