1 /* 2 * Copyright (c) 2019 Andrew Kelley 3 * 4 * This file is part of zig, which is MIT licensed. 5 * See http://opensource.org/licenses/MIT 6 */ 7 8 // This file deals with exposing stage2 Zig code to stage1 C++ code. 9 10 #ifndef ZIG_STAGE2_H 11 #define ZIG_STAGE2_H 12 13 #include <stddef.h> 14 #include <stdint.h> 15 #include <stdio.h> 16 17 #include "stage1.h" 18 19 #ifdef __cplusplus 20 #define ZIG_EXTERN_C extern "C" 21 #else 22 #define ZIG_EXTERN_C 23 #endif 24 25 #if defined(_MSC_VER) 26 #define ZIG_ATTRIBUTE_NORETURN __declspec(noreturn) 27 #else 28 #define ZIG_ATTRIBUTE_NORETURN __attribute__((noreturn)) 29 #endif 30 31 // ABI warning: the types and declarations in this file must match both those in 32 // stage2.cpp and src/stage1.zig. 33 34 // ABI warning 35 enum Error { 36 ErrorNone, 37 ErrorNoMem, 38 ErrorInvalidFormat, 39 ErrorSemanticAnalyzeFail, 40 ErrorAccess, 41 ErrorInterrupted, 42 ErrorSystemResources, 43 ErrorFileNotFound, 44 ErrorFileSystem, 45 ErrorFileTooBig, 46 ErrorDivByZero, 47 ErrorOverflow, 48 ErrorPathAlreadyExists, 49 ErrorUnexpected, 50 ErrorExactDivRemainder, 51 ErrorNegativeDenominator, 52 ErrorShiftedOutOneBits, 53 ErrorCCompileErrors, 54 ErrorEndOfFile, 55 ErrorIsDir, 56 ErrorNotDir, 57 ErrorUnsupportedOperatingSystem, 58 ErrorSharingViolation, 59 ErrorPipeBusy, 60 ErrorPrimitiveTypeNotFound, 61 ErrorCacheUnavailable, 62 ErrorPathTooLong, 63 ErrorCCompilerCannotFindFile, 64 ErrorNoCCompilerInstalled, 65 ErrorReadingDepFile, 66 ErrorInvalidDepFile, 67 ErrorMissingArchitecture, 68 ErrorMissingOperatingSystem, 69 ErrorUnknownArchitecture, 70 ErrorUnknownOperatingSystem, 71 ErrorUnknownABI, 72 ErrorInvalidFilename, 73 ErrorDiskQuota, 74 ErrorDiskSpace, 75 ErrorUnexpectedWriteFailure, 76 ErrorUnexpectedSeekFailure, 77 ErrorUnexpectedFileTruncationFailure, 78 ErrorUnimplemented, 79 ErrorOperationAborted, 80 ErrorBrokenPipe, 81 ErrorNoSpaceLeft, 82 ErrorNotLazy, 83 ErrorIsAsync, 84 ErrorImportOutsidePkgPath, 85 ErrorUnknownCpu, 86 ErrorUnknownCpuFeature, 87 ErrorInvalidCpuFeatures, 88 ErrorInvalidLlvmCpuFeaturesFormat, 89 ErrorUnknownApplicationBinaryInterface, 90 ErrorASTUnitFailure, 91 ErrorBadPathName, 92 ErrorSymLinkLoop, 93 ErrorProcessFdQuotaExceeded, 94 ErrorSystemFdQuotaExceeded, 95 ErrorNoDevice, 96 ErrorDeviceBusy, 97 ErrorUnableToSpawnCCompiler, 98 ErrorCCompilerExitCode, 99 ErrorCCompilerCrashed, 100 ErrorCCompilerCannotFindHeaders, 101 ErrorLibCRuntimeNotFound, 102 ErrorLibCStdLibHeaderNotFound, 103 ErrorLibCKernel32LibNotFound, 104 ErrorUnsupportedArchitecture, 105 ErrorWindowsSdkNotFound, 106 ErrorUnknownDynamicLinkerPath, 107 ErrorTargetHasNoDynamicLinker, 108 ErrorInvalidAbiVersion, 109 ErrorInvalidOperatingSystemVersion, 110 ErrorUnknownClangOption, 111 ErrorNestedResponseFile, 112 ErrorZigIsTheCCompiler, 113 ErrorFileBusy, 114 ErrorLocked, 115 ErrorInvalidCharacter, 116 ErrorUnicodePointTooLarge, 117 }; 118 119 // ABI warning 120 struct Stage2ErrorMsg { 121 const char *filename_ptr; // can be null 122 size_t filename_len; 123 const char *msg_ptr; 124 size_t msg_len; 125 const char *source; // valid until the ASTUnit is freed. can be null 126 unsigned line; // 0 based 127 unsigned column; // 0 based 128 unsigned offset; // byte offset into source 129 }; 130 131 // ABI warning 132 ZIG_EXTERN_C ZIG_ATTRIBUTE_NORETURN void stage2_panic(const char *ptr, size_t len); 133 134 // ABI warning 135 ZIG_EXTERN_C struct Stage2Progress *stage2_progress_create(void); 136 // ABI warning 137 ZIG_EXTERN_C void stage2_progress_disable_tty(struct Stage2Progress *progress); 138 // ABI warning 139 ZIG_EXTERN_C void stage2_progress_destroy(struct Stage2Progress *progress); 140 // ABI warning 141 ZIG_EXTERN_C struct Stage2ProgressNode *stage2_progress_start_root(struct Stage2Progress *progress, 142 const char *name_ptr, size_t name_len, size_t estimated_total_items); 143 // ABI warning 144 ZIG_EXTERN_C struct Stage2ProgressNode *stage2_progress_start(struct Stage2ProgressNode *node, 145 const char *name_ptr, size_t name_len, size_t estimated_total_items); 146 // ABI warning 147 ZIG_EXTERN_C void stage2_progress_end(struct Stage2ProgressNode *node); 148 // ABI warning 149 ZIG_EXTERN_C void stage2_progress_complete_one(struct Stage2ProgressNode *node); 150 // ABI warning 151 ZIG_EXTERN_C void stage2_progress_update_node(struct Stage2ProgressNode *node, 152 size_t completed_count, size_t estimated_total_items); 153 154 // ABI warning 155 struct Stage2SemVer { 156 uint32_t major; 157 uint32_t minor; 158 uint32_t patch; 159 }; 160 161 // ABI warning 162 ZIG_EXTERN_C const char *stage2_version_string(void); 163 164 // ABI warning 165 ZIG_EXTERN_C Stage2SemVer stage2_version(void); 166 167 // ABI warning 168 ZIG_EXTERN_C enum Error stage2_target_parse(struct ZigTarget *target, const char *zig_triple, const char *mcpu, 169 const char *dynamic_linker); 170 171 // ABI warning 172 ZIG_EXTERN_C const char *stage2_fetch_file(struct ZigStage1 *stage1, const char *path_ptr, size_t path_len, 173 size_t *result_len); 174 175 // ABI warning 176 ZIG_EXTERN_C Error stage2_cimport(struct ZigStage1 *stage1, const char *c_src_ptr, size_t c_src_len, 177 const char **out_zig_path_ptr, size_t *out_zig_path_len, 178 struct Stage2ErrorMsg **out_errors_ptr, size_t *out_errors_len); 179 180 // ABI warning 181 ZIG_EXTERN_C const char *stage2_add_link_lib(struct ZigStage1 *stage1, 182 const char *lib_name_ptr, size_t lib_name_len, 183 const char *symbol_name_ptr, size_t symbol_name_len); 184 185 #endif 186