1*523fa7a6SAndroid Build Coastguard Worker /* 2*523fa7a6SAndroid Build Coastguard Worker * Copyright (c) Qualcomm Innovation Center, Inc. 3*523fa7a6SAndroid Build Coastguard Worker * All rights reserved. 4*523fa7a6SAndroid Build Coastguard Worker * 5*523fa7a6SAndroid Build Coastguard Worker * This source code is licensed under the BSD-style license found in the 6*523fa7a6SAndroid Build Coastguard Worker * LICENSE file in the root directory of this source tree. 7*523fa7a6SAndroid Build Coastguard Worker */ 8*523fa7a6SAndroid Build Coastguard Worker #include <executorch/backends/qualcomm/runtime/Logging.h> 9*523fa7a6SAndroid Build Coastguard Worker #include <executorch/backends/qualcomm/runtime/Utils.h> 10*523fa7a6SAndroid Build Coastguard Worker #include <sys/stat.h> 11*523fa7a6SAndroid Build Coastguard Worker namespace executorch { 12*523fa7a6SAndroid Build Coastguard Worker namespace backends { 13*523fa7a6SAndroid Build Coastguard Worker namespace qnn { 14*523fa7a6SAndroid Build Coastguard Worker CreateDirectory(const std::string & path)15*523fa7a6SAndroid Build Coastguard Workervoid CreateDirectory(const std::string& path) { 16*523fa7a6SAndroid Build Coastguard Worker // Create any recursive directory 17*523fa7a6SAndroid Build Coastguard Worker if (path.empty()) { 18*523fa7a6SAndroid Build Coastguard Worker QNN_EXECUTORCH_LOG_ERROR("Create folder shouldn't be empty"); 19*523fa7a6SAndroid Build Coastguard Worker return; 20*523fa7a6SAndroid Build Coastguard Worker } 21*523fa7a6SAndroid Build Coastguard Worker std::size_t pos = path.find_last_of('/'); 22*523fa7a6SAndroid Build Coastguard Worker std::string subdir = (std::string::npos == pos) ? "" : path.substr(0, pos); 23*523fa7a6SAndroid Build Coastguard Worker if (subdir.empty() || subdir == "." || subdir == "..") { 24*523fa7a6SAndroid Build Coastguard Worker return; 25*523fa7a6SAndroid Build Coastguard Worker } 26*523fa7a6SAndroid Build Coastguard Worker CreateDirectory(subdir); 27*523fa7a6SAndroid Build Coastguard Worker int mkdir_err = mkdir(subdir.c_str(), S_IRWXU | S_IRWXG | S_IRWXO); 28*523fa7a6SAndroid Build Coastguard Worker if (mkdir_err != 0 && errno != EEXIST) { 29*523fa7a6SAndroid Build Coastguard Worker std::string err_msg = "Failed to create " + subdir + " folder\n"; 30*523fa7a6SAndroid Build Coastguard Worker QNN_EXECUTORCH_LOG_ERROR(err_msg.c_str()); 31*523fa7a6SAndroid Build Coastguard Worker } 32*523fa7a6SAndroid Build Coastguard Worker } 33*523fa7a6SAndroid Build Coastguard Worker 34*523fa7a6SAndroid Build Coastguard Worker } // namespace qnn 35*523fa7a6SAndroid Build Coastguard Worker } // namespace backends 36*523fa7a6SAndroid Build Coastguard Worker } // namespace executorch 37