// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ZIRCON_TOOLS_KAZOO_OUTPUTS_H_
#define ZIRCON_TOOLS_KAZOO_OUTPUTS_H_

#include "tools/kazoo/syscall_library.h"
#include "tools/kazoo/writer.h"

// All of the output functions write only to |writer|, and return true on
// success or false on failure with an error logged.

bool CategoryOutput(const SyscallLibrary& library, Writer* writer);
bool CUlibHeaderOutput(const SyscallLibrary& library, Writer* writer);
bool GoSyscallsAsm(const SyscallLibrary& library, Writer* writer);
bool GoSyscallsStubs(const SyscallLibrary& library, Writer* writer);
bool GoVdsoArm64Calls(const SyscallLibrary& library, Writer* writer);
bool GoVdsoKeys(const SyscallLibrary& library, Writer* writer);
bool GoVdsoX86Calls(const SyscallLibrary& library, Writer* writer);
bool JsonOutput(const SyscallLibrary& library, Writer* writer);
bool KernelDeclarationsOutput(const SyscallLibrary& library, Writer* writer);
bool KernelWrappersOutput(const SyscallLibrary& library, Writer* writer);
bool KtraceOutput(const SyscallLibrary& library, Writer* writer);
bool PrivateDeclarationsOutput(const SyscallLibrary& library, Writer* writer);
bool PublicDeclarationsOutput(const SyscallLibrary& library, Writer* writer);
bool TestonlyPublicDeclarationsOutput(const SyscallLibrary& library, Writer* writer);
bool RustOutput(const SyscallLibrary& library, Writer* writer);
bool SyscallNumbersOutput(const SyscallLibrary& library, Writer* writer);

#endif  // ZIRCON_TOOLS_KAZOO_OUTPUTS_H_
