14427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley/*
24427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley * Copyright (C) 2015, The Android Open Source Project
34427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley *
44427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley * Licensed under the Apache License, Version 2.0 (the "License");
54427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley * you may not use this file except in compliance with the License.
64427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley * You may obtain a copy of the License at
74427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley *
84427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley *     http://www.apache.org/licenses/LICENSE-2.0
94427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley *
104427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley * Unless required by applicable law or agreed to in writing, software
114427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley * distributed under the License is distributed on an "AS IS" BASIS,
124427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley * See the License for the specific language governing permissions and
144427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley * limitations under the License.
154427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley */
164427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley
174427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley#include <iostream>
184427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley#include <memory>
194427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley
2089e3586afa180230fa999d4287df90df9d066cefChristopher Wiley#include "aidl.h"
214a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley#include "io_delegate.h"
22b8b59f6b19e791b6e3f381726d84baadeac4f5ceChristopher Wiley#include "logging.h"
2389e3586afa180230fa999d4287df90df9d066cefChristopher Wiley#include "options.h"
2489e3586afa180230fa999d4287df90df9d066cefChristopher Wiley
2589eaab56f3ff913c247397b858fac3c8d3d4a206Christopher Wileyusing android::aidl::JavaOptions;
2689e3586afa180230fa999d4287df90df9d066cefChristopher Wiley
27d7f900170dac3d3df60f6f7cbac14bcd4173b139Andreas Gampe// aidl is leaky. Turn off LeakSanitizer by default. b/37749857
28d7f900170dac3d3df60f6f7cbac14bcd4173b139Andreas Gampeextern "C" const char *__asan_default_options() {
29d7f900170dac3d3df60f6f7cbac14bcd4173b139Andreas Gampe    return "detect_leaks=0";
30d7f900170dac3d3df60f6f7cbac14bcd4173b139Andreas Gampe}
31d7f900170dac3d3df60f6f7cbac14bcd4173b139Andreas Gampe
32b8b59f6b19e791b6e3f381726d84baadeac4f5ceChristopher Wileyint main(int argc, char** argv) {
33b8b59f6b19e791b6e3f381726d84baadeac4f5ceChristopher Wiley  android::base::InitLogging(argv);
34b8b59f6b19e791b6e3f381726d84baadeac4f5ceChristopher Wiley  LOG(DEBUG) << "aidl starting";
3589eaab56f3ff913c247397b858fac3c8d3d4a206Christopher Wiley  std::unique_ptr<JavaOptions> options = JavaOptions::Parse(argc, argv);
364427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley  if (!options) {
3789e3586afa180230fa999d4287df90df9d066cefChristopher Wiley    return 1;
384427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley  }
394427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley
404a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley  android::aidl::IoDelegate io_delegate;
414427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley  switch (options->task) {
4289eaab56f3ff913c247397b858fac3c8d3d4a206Christopher Wiley    case JavaOptions::COMPILE_AIDL_TO_JAVA:
434a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley      return android::aidl::compile_aidl_to_java(*options, io_delegate);
4489eaab56f3ff913c247397b858fac3c8d3d4a206Christopher Wiley    case JavaOptions::PREPROCESS_AIDL:
45c1f39b4ea30e7313eeb7f3d3fd5ec66ba00f2bb5Casey Dahlin      if (android::aidl::preprocess_aidl(*options, io_delegate))
46c1f39b4ea30e7313eeb7f3d3fd5ec66ba00f2bb5Casey Dahlin        return 0;
47c1f39b4ea30e7313eeb7f3d3fd5ec66ba00f2bb5Casey Dahlin      return 1;
484427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley  }
494427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley  std::cerr << "aidl: internal error" << std::endl;
504427d8654985209c1ebf2fb4705bb3e1a4262be2Christopher Wiley  return 1;
5189e3586afa180230fa999d4287df90df9d066cefChristopher Wiley}
52