xref: /llvm-project/libc/src/stdlib/gpu/system.cpp (revision a6ef0debb1d60966b5bcc69f7d58a2b75c9c621d)
116d11e26SJoseph Huber //===-- GPU implementation of system --------------------------------------===//
216d11e26SJoseph Huber //
316d11e26SJoseph Huber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
416d11e26SJoseph Huber // See https://llvm.org/LICENSE.txt for license information.
516d11e26SJoseph Huber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
616d11e26SJoseph Huber //
716d11e26SJoseph Huber //===----------------------------------------------------------------------===//
816d11e26SJoseph Huber 
916d11e26SJoseph Huber #include "src/__support/RPC/rpc_client.h"
1016d11e26SJoseph Huber #include "src/__support/common.h"
1116d11e26SJoseph Huber #include "src/__support/macros/config.h"
1216d11e26SJoseph Huber #include "src/string/string_utils.h"
1316d11e26SJoseph Huber 
1416d11e26SJoseph Huber #include "src/stdlib/system.h"
1516d11e26SJoseph Huber 
1616d11e26SJoseph Huber namespace LIBC_NAMESPACE_DECL {
1716d11e26SJoseph Huber 
1816d11e26SJoseph Huber LLVM_LIBC_FUNCTION(int, system, (const char *command)) {
1916d11e26SJoseph Huber   int ret;
20*a6ef0debSJoseph Huber   rpc::Client::Port port = rpc::client.open<LIBC_SYSTEM>();
2116d11e26SJoseph Huber   port.send_n(command, internal::string_length(command) + 1);
22be0c67c9SJoseph Huber   port.recv([&](rpc::Buffer *buffer, uint32_t) {
23be0c67c9SJoseph Huber     ret = static_cast<int>(buffer->data[0]);
24be0c67c9SJoseph Huber   });
2516d11e26SJoseph Huber   port.close();
2616d11e26SJoseph Huber 
2716d11e26SJoseph Huber   return ret;
2816d11e26SJoseph Huber }
2916d11e26SJoseph Huber 
3016d11e26SJoseph Huber } // namespace LIBC_NAMESPACE_DECL
31