Andreas Huber | c9410c7 | 2016-07-28 12:18:40 -0700 | [diff] [blame] | 1 | #include "AST.h" |
Andreas Huber | 5345ec2 | 2016-07-29 13:33:27 -0700 | [diff] [blame] | 2 | #include "Coordinator.h" |
Andreas Huber | c9410c7 | 2016-07-28 12:18:40 -0700 | [diff] [blame] | 3 | #include "Formatter.h" |
Andreas Huber | 84f89de | 2016-07-28 15:39:51 -0700 | [diff] [blame] | 4 | #include "FQName.h" |
Andreas Huber | c9410c7 | 2016-07-28 12:18:40 -0700 | [diff] [blame] | 5 | |
Andreas Huber | 68f2459 | 2016-07-29 14:53:48 -0700 | [diff] [blame] | 6 | #include <android-base/logging.h> |
Andreas Huber | c9410c7 | 2016-07-28 12:18:40 -0700 | [diff] [blame] | 7 | #include <stdio.h> |
Andreas Huber | b82318c | 2016-08-02 14:45:54 -0700 | [diff] [blame] | 8 | #include <unistd.h> |
Andreas Huber | c9410c7 | 2016-07-28 12:18:40 -0700 | [diff] [blame] | 9 | |
10 | using namespace android; | ||||
11 | |||||
Andreas Huber | b82318c | 2016-08-02 14:45:54 -0700 | [diff] [blame] | 12 | static void usage(const char *me) { |
13 | fprintf(stderr, "usage: %s -o output-path fqname ...\n", me); | ||||
14 | } | ||||
15 | |||||
16 | int main(int argc, char **argv) { | ||||
17 | std::string outputDir; | ||||
18 | |||||
Andreas Huber | 737080b | 2016-08-02 15:38:04 -0700 | [diff] [blame^] | 19 | const char *me = argv[0]; |
20 | |||||
Andreas Huber | b82318c | 2016-08-02 14:45:54 -0700 | [diff] [blame] | 21 | int res; |
22 | while ((res = getopt(argc, argv, "ho:")) >= 0) { | ||||
23 | switch (res) { | ||||
24 | case 'o': | ||||
25 | { | ||||
26 | outputDir = optarg; | ||||
27 | break; | ||||
28 | } | ||||
29 | |||||
30 | case '?': | ||||
31 | case 'h': | ||||
32 | default: | ||||
33 | { | ||||
Andreas Huber | 737080b | 2016-08-02 15:38:04 -0700 | [diff] [blame^] | 34 | usage(me); |
Andreas Huber | b82318c | 2016-08-02 14:45:54 -0700 | [diff] [blame] | 35 | exit(1); |
36 | break; | ||||
37 | } | ||||
38 | } | ||||
39 | } | ||||
40 | |||||
41 | argc -= optind; | ||||
42 | argv += optind; | ||||
43 | |||||
Andreas Huber | 737080b | 2016-08-02 15:38:04 -0700 | [diff] [blame^] | 44 | // Valid options are now in argv[0] .. argv[argc - 1]. |
45 | |||||
Andreas Huber | b82318c | 2016-08-02 14:45:54 -0700 | [diff] [blame] | 46 | if (outputDir.empty()) { |
Andreas Huber | 737080b | 2016-08-02 15:38:04 -0700 | [diff] [blame^] | 47 | usage(me); |
Andreas Huber | b82318c | 2016-08-02 14:45:54 -0700 | [diff] [blame] | 48 | exit(1); |
49 | } else { | ||||
50 | const size_t len = outputDir.size(); | ||||
51 | if (outputDir[len - 1] != '/') { | ||||
52 | outputDir += "/"; | ||||
53 | } | ||||
54 | } | ||||
55 | |||||
Andreas Huber | dc98133 | 2016-07-29 15:46:54 -0700 | [diff] [blame] | 56 | const char *TOP = getenv("TOP"); |
57 | if (TOP == NULL) { | ||||
58 | LOG(ERROR) << "Your environment does not define $TOP."; | ||||
59 | return 1; | ||||
60 | } | ||||
61 | |||||
62 | std::string interfacesPath = TOP; | ||||
63 | interfacesPath.append("/hardware/interfaces/"); | ||||
64 | |||||
65 | Coordinator coordinator(interfacesPath); | ||||
Andreas Huber | 5345ec2 | 2016-07-29 13:33:27 -0700 | [diff] [blame] | 66 | |
Andreas Huber | 737080b | 2016-08-02 15:38:04 -0700 | [diff] [blame^] | 67 | for (int i = 0; i < argc; ++i) { |
Andreas Huber | 68f2459 | 2016-07-29 14:53:48 -0700 | [diff] [blame] | 68 | FQName fqName(argv[i]); |
69 | CHECK(fqName.isValid() && fqName.isFullyQualified()); | ||||
70 | |||||
71 | AST *ast = coordinator.parse(fqName); | ||||
Andreas Huber | 881227d | 2016-08-02 14:20:21 -0700 | [diff] [blame] | 72 | CHECK(ast != NULL); |
Andreas Huber | c9410c7 | 2016-07-28 12:18:40 -0700 | [diff] [blame] | 73 | |
Andreas Huber | eb1081f | 2016-07-28 13:13:24 -0700 | [diff] [blame] | 74 | Formatter out; |
Andreas Huber | c9410c7 | 2016-07-28 12:18:40 -0700 | [diff] [blame] | 75 | |
Andreas Huber | eb1081f | 2016-07-28 13:13:24 -0700 | [diff] [blame] | 76 | printf("========================================\n"); |
Andreas Huber | c9410c7 | 2016-07-28 12:18:40 -0700 | [diff] [blame] | 77 | |
Andreas Huber | eb1081f | 2016-07-28 13:13:24 -0700 | [diff] [blame] | 78 | ast->dump(out); |
Andreas Huber | c9410c7 | 2016-07-28 12:18:40 -0700 | [diff] [blame] | 79 | |
Andreas Huber | b82318c | 2016-08-02 14:45:54 -0700 | [diff] [blame] | 80 | ast->generateCpp(outputDir); |
Andreas Huber | 881227d | 2016-08-02 14:20:21 -0700 | [diff] [blame] | 81 | |
Andreas Huber | eb1081f | 2016-07-28 13:13:24 -0700 | [diff] [blame] | 82 | delete ast; |
83 | ast = NULL; | ||||
84 | } | ||||
Andreas Huber | c9410c7 | 2016-07-28 12:18:40 -0700 | [diff] [blame] | 85 | |
Andreas Huber | c9410c7 | 2016-07-28 12:18:40 -0700 | [diff] [blame] | 86 | return 0; |
87 | } |