13e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky/*
23e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky * Copyright (C) 2015 The Android Open Source Project
33e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky *
43e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky * Licensed under the Apache License, Version 2.0 (the "License");
53e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky * you may not use this file except in compliance with the License.
63e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky * You may obtain a copy of the License at
73e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky *
83e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky *      http://www.apache.org/licenses/LICENSE-2.0
93e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky *
103e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky * Unless required by applicable law or agreed to in writing, software
113e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky * distributed under the License is distributed on an "AS IS" BASIS,
123e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky * See the License for the specific language governing permissions and
143e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky * limitations under the License.
153e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky */
163e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky
173e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky#include "common_runtime_test.h"
183e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky
193e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky#include <cstdio>
203e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky
213e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky#include "gtest/gtest.h"
223e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky
233e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbeckynamespace art {
243e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky
253e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky// Run the tests only on host.
26c60e1b755c5632dfeb04c333489ede52ee5c945fAndreas Gampe#ifndef __ANDROID__
273e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky
283e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbeckyclass PrebuiltToolsTest : public CommonRuntimeTest {
293e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky};
303e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky
313e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbeckystatic void CheckToolsExist(const std::string& tools_dir) {
323e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky  const char* tools[] { "as", "objcopy", "objdump" };  // NOLINT
333e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky  for (const char* tool : tools) {
343e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky    struct stat exec_st;
353e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky    std::string exec_path = tools_dir + tool;
363e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky    if (stat(exec_path.c_str(), &exec_st) != 0) {
3791d65e024846717fce3572106cffe9b957b8902cRoland Levillain      ADD_FAILURE() << "Cannot find " << tool << " in " << tools_dir;
383e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky    }
393e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky  }
403e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky}
413e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky
423e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid SrbeckyTEST_F(PrebuiltToolsTest, CheckHostTools) {
433e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky  std::string tools_dir = GetAndroidHostToolsDir();
443e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky  if (tools_dir.empty()) {
4591d65e024846717fce3572106cffe9b957b8902cRoland Levillain    ADD_FAILURE() << "Cannot find Android tools directory for host";
463e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky  } else {
473e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky    CheckToolsExist(tools_dir);
483e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky  }
493e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky}
503e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky
513e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid SrbeckyTEST_F(PrebuiltToolsTest, CheckTargetTools) {
520774307ddf064445c7ad3b1209ee5b6632d941adDavid Srbecky  // Other prebuilts are missing from the build server's repo manifest.
530774307ddf064445c7ad3b1209ee5b6632d941adDavid Srbecky  InstructionSet isas[] = { kThumb2 };  // NOLINT
543e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky  for (InstructionSet isa : isas) {
553e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky    std::string tools_dir = GetAndroidTargetToolsDir(isa);
563e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky    if (tools_dir.empty()) {
5791d65e024846717fce3572106cffe9b957b8902cRoland Levillain      ADD_FAILURE() << "Cannot find Android tools directory for " << isa;
583e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky    } else {
593e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky      CheckToolsExist(tools_dir);
603e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky    }
613e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky  }
623e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky}
633e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky
64c60e1b755c5632dfeb04c333489ede52ee5c945fAndreas Gampe#endif  // __ANDROID__
653e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky
663e52aa4d406fe802dabee2a2e7ba8764cc13aaaaDavid Srbecky}  // namespace art
67