Also skip exporting non-function symbols when we're building a WASI command using the stage2 llvm backend.
189 lines
5.3 KiB
C
189 lines
5.3 KiB
C
/*
|
|
* Copyright (c) 2019 Andrew Kelley
|
|
*
|
|
* This file is part of zig, which is MIT licensed.
|
|
* See http://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
// This file deals with exposing stage2 Zig code to stage1 C++ code.
|
|
|
|
#ifndef ZIG_STAGE2_H
|
|
#define ZIG_STAGE2_H
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
|
|
#include "stage1.h"
|
|
|
|
#ifdef __cplusplus
|
|
#define ZIG_EXTERN_C extern "C"
|
|
#else
|
|
#define ZIG_EXTERN_C
|
|
#endif
|
|
|
|
#if defined(_MSC_VER)
|
|
#define ZIG_ATTRIBUTE_NORETURN __declspec(noreturn)
|
|
#else
|
|
#define ZIG_ATTRIBUTE_NORETURN __attribute__((noreturn))
|
|
#endif
|
|
|
|
// ABI warning: the types and declarations in this file must match both those in
|
|
// stage2.cpp and src/stage1.zig.
|
|
|
|
// ABI warning
|
|
enum Error {
|
|
ErrorNone,
|
|
ErrorNoMem,
|
|
ErrorInvalidFormat,
|
|
ErrorSemanticAnalyzeFail,
|
|
ErrorAccess,
|
|
ErrorInterrupted,
|
|
ErrorSystemResources,
|
|
ErrorFileNotFound,
|
|
ErrorFileSystem,
|
|
ErrorFileTooBig,
|
|
ErrorDivByZero,
|
|
ErrorOverflow,
|
|
ErrorPathAlreadyExists,
|
|
ErrorUnexpected,
|
|
ErrorExactDivRemainder,
|
|
ErrorNegativeDenominator,
|
|
ErrorShiftedOutOneBits,
|
|
ErrorCCompileErrors,
|
|
ErrorEndOfFile,
|
|
ErrorIsDir,
|
|
ErrorNotDir,
|
|
ErrorUnsupportedOperatingSystem,
|
|
ErrorSharingViolation,
|
|
ErrorPipeBusy,
|
|
ErrorPrimitiveTypeNotFound,
|
|
ErrorCacheUnavailable,
|
|
ErrorPathTooLong,
|
|
ErrorCCompilerCannotFindFile,
|
|
ErrorNoCCompilerInstalled,
|
|
ErrorReadingDepFile,
|
|
ErrorInvalidDepFile,
|
|
ErrorMissingArchitecture,
|
|
ErrorMissingOperatingSystem,
|
|
ErrorUnknownArchitecture,
|
|
ErrorUnknownOperatingSystem,
|
|
ErrorUnknownABI,
|
|
ErrorInvalidFilename,
|
|
ErrorDiskQuota,
|
|
ErrorDiskSpace,
|
|
ErrorUnexpectedWriteFailure,
|
|
ErrorUnexpectedSeekFailure,
|
|
ErrorUnexpectedFileTruncationFailure,
|
|
ErrorUnimplemented,
|
|
ErrorOperationAborted,
|
|
ErrorBrokenPipe,
|
|
ErrorNoSpaceLeft,
|
|
ErrorNotLazy,
|
|
ErrorIsAsync,
|
|
ErrorImportOutsidePkgPath,
|
|
ErrorUnknownCpu,
|
|
ErrorUnknownCpuFeature,
|
|
ErrorInvalidCpuFeatures,
|
|
ErrorInvalidLlvmCpuFeaturesFormat,
|
|
ErrorUnknownApplicationBinaryInterface,
|
|
ErrorASTUnitFailure,
|
|
ErrorBadPathName,
|
|
ErrorSymLinkLoop,
|
|
ErrorProcessFdQuotaExceeded,
|
|
ErrorSystemFdQuotaExceeded,
|
|
ErrorNoDevice,
|
|
ErrorDeviceBusy,
|
|
ErrorUnableToSpawnCCompiler,
|
|
ErrorCCompilerExitCode,
|
|
ErrorCCompilerCrashed,
|
|
ErrorCCompilerCannotFindHeaders,
|
|
ErrorLibCRuntimeNotFound,
|
|
ErrorLibCStdLibHeaderNotFound,
|
|
ErrorLibCKernel32LibNotFound,
|
|
ErrorUnsupportedArchitecture,
|
|
ErrorWindowsSdkNotFound,
|
|
ErrorUnknownDynamicLinkerPath,
|
|
ErrorTargetHasNoDynamicLinker,
|
|
ErrorInvalidAbiVersion,
|
|
ErrorInvalidOperatingSystemVersion,
|
|
ErrorUnknownClangOption,
|
|
ErrorNestedResponseFile,
|
|
ErrorZigIsTheCCompiler,
|
|
ErrorFileBusy,
|
|
ErrorLocked,
|
|
ErrorInvalidCharacter,
|
|
ErrorUnicodePointTooLarge,
|
|
};
|
|
|
|
// ABI warning
|
|
struct Stage2ErrorMsg {
|
|
const char *filename_ptr; // can be null
|
|
size_t filename_len;
|
|
const char *msg_ptr;
|
|
size_t msg_len;
|
|
const char *source; // valid until the ASTUnit is freed. can be null
|
|
unsigned line; // 0 based
|
|
unsigned column; // 0 based
|
|
unsigned offset; // byte offset into source
|
|
};
|
|
|
|
// ABI warning
|
|
ZIG_EXTERN_C ZIG_ATTRIBUTE_NORETURN void stage2_panic(const char *ptr, size_t len);
|
|
|
|
// ABI warning
|
|
ZIG_EXTERN_C struct Stage2Progress *stage2_progress_create(void);
|
|
// ABI warning
|
|
ZIG_EXTERN_C void stage2_progress_disable_tty(struct Stage2Progress *progress);
|
|
// ABI warning
|
|
ZIG_EXTERN_C void stage2_progress_destroy(struct Stage2Progress *progress);
|
|
// ABI warning
|
|
ZIG_EXTERN_C struct Stage2ProgressNode *stage2_progress_start_root(struct Stage2Progress *progress,
|
|
const char *name_ptr, size_t name_len, size_t estimated_total_items);
|
|
// ABI warning
|
|
ZIG_EXTERN_C struct Stage2ProgressNode *stage2_progress_start(struct Stage2ProgressNode *node,
|
|
const char *name_ptr, size_t name_len, size_t estimated_total_items);
|
|
// ABI warning
|
|
ZIG_EXTERN_C void stage2_progress_end(struct Stage2ProgressNode *node);
|
|
// ABI warning
|
|
ZIG_EXTERN_C void stage2_progress_complete_one(struct Stage2ProgressNode *node);
|
|
// ABI warning
|
|
ZIG_EXTERN_C void stage2_progress_update_node(struct Stage2ProgressNode *node,
|
|
size_t completed_count, size_t estimated_total_items);
|
|
|
|
// ABI warning
|
|
struct Stage2SemVer {
|
|
uint32_t major;
|
|
uint32_t minor;
|
|
uint32_t patch;
|
|
};
|
|
|
|
// ABI warning
|
|
ZIG_EXTERN_C const char *stage2_version_string(void);
|
|
|
|
// ABI warning
|
|
ZIG_EXTERN_C Stage2SemVer stage2_version(void);
|
|
|
|
// ABI warning
|
|
ZIG_EXTERN_C enum Error stage2_target_parse(struct ZigTarget *target, const char *zig_triple, const char *mcpu,
|
|
const char *dynamic_linker);
|
|
|
|
// ABI warning
|
|
ZIG_EXTERN_C const char *stage2_fetch_file(struct ZigStage1 *stage1, const char *path_ptr, size_t path_len,
|
|
size_t *result_len);
|
|
|
|
// ABI warning
|
|
ZIG_EXTERN_C Error stage2_cimport(struct ZigStage1 *stage1, const char *c_src_ptr, size_t c_src_len,
|
|
const char **out_zig_path_ptr, size_t *out_zig_path_len,
|
|
struct Stage2ErrorMsg **out_errors_ptr, size_t *out_errors_len);
|
|
|
|
// ABI warning
|
|
ZIG_EXTERN_C const char *stage2_add_link_lib(struct ZigStage1 *stage1,
|
|
const char *lib_name_ptr, size_t lib_name_len,
|
|
const char *symbol_name_ptr, size_t symbol_name_len);
|
|
|
|
// ABI warning
|
|
ZIG_EXTERN_C enum Error stage2_append_symbol(struct ZigStage1 *stage1, const char *name_ptr, size_t name_len);
|
|
|
|
#endif
|