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