commit 20f3b0efff76cb3c611b72c1c1862490aef79b80 (tree)
parent c25742010d69e0e56f1fda99f1b986be52165e3b
Author: Andrew Kelley <andrew@ziglang.org>
Date: Sun, 16 Feb 2020 19:16:08 -0500
rename libuserland to libstage2
Diffstat:
14 files changed, 453 insertions(+), 453 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
@@ -434,8 +434,8 @@ find_package(Threads)
# CMake doesn't let us create an empty executable, so we hang on to this one separately.
set(ZIG_MAIN_SRC "${CMAKE_SOURCE_DIR}/src/main.cpp")
-# This is our shim which will be replaced by libuserland written in Zig.
-set(ZIG0_SHIM_SRC "${CMAKE_SOURCE_DIR}/src/userland.cpp")
+# This is our shim which will be replaced by libstage2 written in Zig.
+set(ZIG0_SHIM_SRC "${CMAKE_SOURCE_DIR}/src/stage2.cpp")
if(ZIG_ENABLE_MEM_PROFILE)
set(ZIG_SOURCES_MEM_PROFILE "${CMAKE_SOURCE_DIR}/src/mem_profile.cpp")
@@ -599,38 +599,38 @@ set_target_properties(zig0 PROPERTIES
target_link_libraries(zig0 compiler)
if(MSVC)
- set(LIBUSERLAND "${CMAKE_BINARY_DIR}/userland.lib")
+ set(LIBSTAGE2 "${CMAKE_BINARY_DIR}/stage2.lib")
else()
- set(LIBUSERLAND "${CMAKE_BINARY_DIR}/libuserland.a")
+ set(LIBSTAGE2 "${CMAKE_BINARY_DIR}/libstage2.a")
endif()
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
- set(LIBUSERLAND_RELEASE_ARG "")
+ set(LIBSTAGE2_RELEASE_ARG "")
else()
- set(LIBUSERLAND_RELEASE_ARG --release-fast --strip)
+ set(LIBSTAGE2_RELEASE_ARG --release-fast --strip)
endif()
if(WIN32)
- set(LIBUSERLAND_WINDOWS_ARGS "-lntdll")
+ set(LIBSTAGE2_WINDOWS_ARGS "-lntdll")
else()
- set(LIBUSERLAND_WINDOWS_ARGS "")
+ set(LIBSTAGE2_WINDOWS_ARGS "")
endif()
-set(BUILD_LIBUSERLAND_ARGS "build-lib"
+set(BUILD_LIBSTAGE2_ARGS "build-lib"
--override-lib-dir "${CMAKE_SOURCE_DIR}/lib"
--cache on
--output-dir "${CMAKE_BINARY_DIR}"
- ${LIBUSERLAND_RELEASE_ARG}
- "src-self-hosted/stage1.zig"
+ ${LIBSTAGE2_RELEASE_ARG}
+ "src-self-hosted/stage2.zig"
--disable-gen-h
--bundle-compiler-rt
-fPIC
-lc
- ${LIBUSERLAND_WINDOWS_ARGS}
+ ${LIBSTAGE2_WINDOWS_ARGS}
)
-add_custom_target(zig_build_libuserland ALL
- COMMAND zig0 ${BUILD_LIBUSERLAND_ARGS}
+add_custom_target(zig_build_libstage2 ALL
+ COMMAND zig0 ${BUILD_LIBSTAGE2_ARGS}
DEPENDS zig0
- BYPRODUCTS "${LIBUSERLAND}"
+ BYPRODUCTS "${LIBSTAGE2}"
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
)
add_executable(zig "${ZIG_MAIN_SRC}")
@@ -639,13 +639,13 @@ set_target_properties(zig PROPERTIES
COMPILE_FLAGS ${EXE_CFLAGS}
LINK_FLAGS ${EXE_LDFLAGS}
)
-target_link_libraries(zig compiler "${LIBUSERLAND}")
+target_link_libraries(zig compiler "${LIBSTAGE2}")
if(MSVC)
target_link_libraries(zig ntdll.lib)
elseif(MINGW)
target_link_libraries(zig ntdll)
endif()
-add_dependencies(zig zig_build_libuserland)
+add_dependencies(zig zig_build_libstage2)
install(TARGETS zig DESTINATION bin)
diff --git a/cmake/install.cmake b/cmake/install.cmake
@@ -19,9 +19,9 @@ if(_result)
message(":: ERROR: ${_result}")
message(":: (execute_process)")
- string(REPLACE ";" " " s_INSTALL_LIBUSERLAND_ARGS "${ZIG_INSTALL_ARGS}")
+ string(REPLACE ";" " " s_INSTALL_LIBSTAGE2_ARGS "${ZIG_INSTALL_ARGS}")
message("::")
- message(":: argv: ${zig_EXE} ${s_INSTALL_LIBUSERLAND_ARGS}")
+ message(":: argv: ${zig_EXE} ${s_INSTALL_LIBSTAGE2_ARGS}")
set(_args ${zig_EXE} ${ZIG_INSTALL_ARGS})
list(LENGTH _args _len)
diff --git a/src-self-hosted/stage1.zig b/src-self-hosted/stage2.zig
diff --git a/src/cache_hash.cpp b/src/cache_hash.cpp
@@ -5,7 +5,7 @@
* See http://opensource.org/licenses/MIT
*/
-#include "userland.h"
+#include "stage2.h"
#include "cache_hash.hpp"
#include "all_types.hpp"
#include "buffer.hpp"
diff --git a/src/codegen.cpp b/src/codegen.cpp
@@ -18,7 +18,7 @@
#include "target.hpp"
#include "util.hpp"
#include "zig_llvm.h"
-#include "userland.h"
+#include "stage2.h"
#include "dump_analysis.hpp"
#include "softfloat.hpp"
#include "mem_profile.hpp"
diff --git a/src/codegen.hpp b/src/codegen.hpp
@@ -11,7 +11,7 @@
#include "parser.hpp"
#include "errmsg.hpp"
#include "target.hpp"
-#include "userland.h"
+#include "stage2.h"
#include <stdio.h>
diff --git a/src/error.hpp b/src/error.hpp
@@ -8,7 +8,7 @@
#ifndef ERROR_HPP
#define ERROR_HPP
-#include "userland.h"
+#include "stage2.h"
const char *err_str(Error err);
diff --git a/src/main.cpp b/src/main.cpp
@@ -14,7 +14,7 @@
#include "heap.hpp"
#include "os.hpp"
#include "target.hpp"
-#include "userland.h"
+#include "stage2.h"
#include "glibc.hpp"
#include "dump_analysis.hpp"
#include "mem_profile.hpp"
diff --git a/src/stage2.cpp b/src/stage2.cpp
@@ -0,0 +1,179 @@
+// This file is a shim for zig1. The real implementations of these are in
+// src-self-hosted/stage1.zig
+
+#include "stage2.h"
+#include "util.hpp"
+#include "zig_llvm.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+Error stage2_translate_c(struct Stage2Ast **out_ast,
+ struct Stage2ErrorMsg **out_errors_ptr, size_t *out_errors_len,
+ const char **args_begin, const char **args_end, const char *resources_path)
+{
+ const char *msg = "stage0 called stage2_translate_c";
+ stage2_panic(msg, strlen(msg));
+}
+
+void stage2_free_clang_errors(struct Stage2ErrorMsg *ptr, size_t len) {
+ const char *msg = "stage0 called stage2_free_clang_errors";
+ stage2_panic(msg, strlen(msg));
+}
+
+void stage2_zen(const char **ptr, size_t *len) {
+ const char *msg = "stage0 called stage2_zen";
+ stage2_panic(msg, strlen(msg));
+}
+
+void stage2_attach_segfault_handler(void) { }
+
+void stage2_panic(const char *ptr, size_t len) {
+ fwrite(ptr, 1, len, stderr);
+ fprintf(stderr, "\n");
+ fflush(stderr);
+ abort();
+}
+
+void stage2_render_ast(struct Stage2Ast *ast, FILE *output_file) {
+ const char *msg = "stage0 called stage2_render_ast";
+ stage2_panic(msg, strlen(msg));
+}
+
+int stage2_fmt(int argc, char **argv) {
+ const char *msg = "stage0 called stage2_fmt";
+ stage2_panic(msg, strlen(msg));
+}
+
+stage2_DepTokenizer stage2_DepTokenizer_init(const char *input, size_t len) {
+ const char *msg = "stage0 called stage2_DepTokenizer_init";
+ stage2_panic(msg, strlen(msg));
+}
+
+void stage2_DepTokenizer_deinit(stage2_DepTokenizer *self) {
+ const char *msg = "stage0 called stage2_DepTokenizer_deinit";
+ stage2_panic(msg, strlen(msg));
+}
+
+stage2_DepNextResult stage2_DepTokenizer_next(stage2_DepTokenizer *self) {
+ const char *msg = "stage0 called stage2_DepTokenizer_next";
+ stage2_panic(msg, strlen(msg));
+}
+
+
+struct Stage2Progress {
+ int trash;
+};
+
+struct Stage2ProgressNode {
+ int trash;
+};
+
+Stage2Progress *stage2_progress_create(void) {
+ return nullptr;
+}
+
+void stage2_progress_destroy(Stage2Progress *progress) {}
+
+Stage2ProgressNode *stage2_progress_start_root(Stage2Progress *progress,
+ const char *name_ptr, size_t name_len, size_t estimated_total_items)
+{
+ return nullptr;
+}
+Stage2ProgressNode *stage2_progress_start(Stage2ProgressNode *node,
+ const char *name_ptr, size_t name_len, size_t estimated_total_items)
+{
+ return nullptr;
+}
+void stage2_progress_end(Stage2ProgressNode *node) {}
+void stage2_progress_complete_one(Stage2ProgressNode *node) {}
+void stage2_progress_disable_tty(Stage2Progress *progress) {}
+void stage2_progress_update_node(Stage2ProgressNode *node, size_t completed_count, size_t estimated_total_items){}
+
+struct Stage2CpuFeatures {
+ const char *llvm_cpu_name;
+ const char *llvm_cpu_features;
+ const char *builtin_str;
+ const char *cache_hash;
+};
+
+Error stage2_cpu_features_parse(struct Stage2CpuFeatures **out, const char *zig_triple,
+ const char *cpu_name, const char *cpu_features)
+{
+ if (zig_triple == nullptr) {
+ Stage2CpuFeatures *result = heap::c_allocator.create<Stage2CpuFeatures>();
+ result->llvm_cpu_name = ZigLLVMGetHostCPUName();
+ result->llvm_cpu_features = ZigLLVMGetNativeFeatures();
+ result->builtin_str = "arch.getBaselineCpuFeatures();\n";
+ result->cache_hash = "native\n\n";
+ *out = result;
+ return ErrorNone;
+ }
+ if (cpu_name == nullptr && cpu_features == nullptr) {
+ Stage2CpuFeatures *result = heap::c_allocator.create<Stage2CpuFeatures>();
+ result->builtin_str = "arch.getBaselineCpuFeatures();\n";
+ result->cache_hash = "\n\n";
+ *out = result;
+ return ErrorNone;
+ }
+
+ const char *msg = "stage0 called stage2_cpu_features_parse with non-null cpu name or features";
+ stage2_panic(msg, strlen(msg));
+}
+
+void stage2_cpu_features_get_cache_hash(const Stage2CpuFeatures *cpu_features,
+ const char **ptr, size_t *len)
+{
+ *ptr = cpu_features->cache_hash;
+ *len = strlen(cpu_features->cache_hash);
+}
+const char *stage2_cpu_features_get_llvm_cpu(const Stage2CpuFeatures *cpu_features) {
+ return cpu_features->llvm_cpu_name;
+}
+const char *stage2_cpu_features_get_llvm_features(const Stage2CpuFeatures *cpu_features) {
+ return cpu_features->llvm_cpu_features;
+}
+void stage2_cpu_features_get_builtin_str(const Stage2CpuFeatures *cpu_features,
+ const char **ptr, size_t *len)
+{
+ *ptr = cpu_features->builtin_str;
+ *len = strlen(cpu_features->builtin_str);
+}
+
+int stage2_cmd_targets(const char *zig_triple) {
+ const char *msg = "stage0 called stage2_cmd_targets";
+ stage2_panic(msg, strlen(msg));
+}
+
+enum Error stage2_libc_parse(struct Stage2LibCInstallation *libc, const char *libc_file) {
+ libc->include_dir = "/dummy/include";
+ libc->include_dir_len = strlen(libc->include_dir);
+ libc->sys_include_dir = "/dummy/sys/include";
+ libc->sys_include_dir_len = strlen(libc->sys_include_dir);
+ libc->crt_dir = "";
+ libc->crt_dir_len = strlen(libc->crt_dir);
+ libc->static_crt_dir = "";
+ libc->static_crt_dir_len = strlen(libc->static_crt_dir);
+ libc->msvc_lib_dir = "";
+ libc->msvc_lib_dir_len = strlen(libc->msvc_lib_dir);
+ libc->kernel32_lib_dir = "";
+ libc->kernel32_lib_dir_len = strlen(libc->kernel32_lib_dir);
+ return ErrorNone;
+}
+
+enum Error stage2_libc_render(struct Stage2LibCInstallation *self, FILE *file) {
+ const char *msg = "stage0 called stage2_libc_render";
+ stage2_panic(msg, strlen(msg));
+}
+
+enum Error stage2_libc_find_native(struct Stage2LibCInstallation *libc) {
+ const char *msg = "stage0 called stage2_libc_find_native";
+ stage2_panic(msg, strlen(msg));
+}
+
+enum Error stage2_libc_cc_print_file_name(char **out_ptr, size_t *out_len,
+ const char *o_file, bool want_dirname)
+{
+ const char *msg = "stage0 called stage2_libc_cc_print_file_name";
+ stage2_panic(msg, strlen(msg));
+}
diff --git a/src/stage2.h b/src/stage2.h
@@ -0,0 +1,248 @@
+/*
+ * Copyright (c) 2019 Andrew Kelley
+ *
+ * This file is part of zig, which is MIT licensed.
+ * See http://opensource.org/licenses/MIT
+ */
+
+#ifndef ZIG_STAGE2_H
+#define ZIG_STAGE2_H
+
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.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-self-hosted/stage2.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,
+ ErrorUnknownSubArchitecture,
+ ErrorUnknownCpuFeature,
+ ErrorInvalidCpuFeatures,
+ ErrorInvalidLlvmCpuFeaturesFormat,
+ ErrorUnknownApplicationBinaryInterface,
+ ErrorASTUnitFailure,
+ ErrorBadPathName,
+ ErrorSymLinkLoop,
+ ErrorProcessFdQuotaExceeded,
+ ErrorSystemFdQuotaExceeded,
+ ErrorNoDevice,
+ ErrorDeviceBusy,
+ ErrorUnableToSpawnCCompiler,
+ ErrorCCompilerExitCode,
+ ErrorCCompilerCrashed,
+ ErrorCCompilerCannotFindHeaders,
+ ErrorLibCRuntimeNotFound,
+ ErrorLibCStdLibHeaderNotFound,
+ ErrorLibCKernel32LibNotFound,
+ ErrorUnsupportedArchitecture,
+};
+
+// 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
+struct Stage2Ast;
+
+// ABI warning
+ZIG_EXTERN_C enum Error stage2_translate_c(struct Stage2Ast **out_ast,
+ struct Stage2ErrorMsg **out_errors_ptr, size_t *out_errors_len,
+ const char **args_begin, const char **args_end, const char *resources_path);
+
+// ABI warning
+ZIG_EXTERN_C void stage2_free_clang_errors(struct Stage2ErrorMsg *ptr, size_t len);
+
+// ABI warning
+ZIG_EXTERN_C void stage2_render_ast(struct Stage2Ast *ast, FILE *output_file);
+
+// ABI warning
+ZIG_EXTERN_C void stage2_zen(const char **ptr, size_t *len);
+
+// ABI warning
+ZIG_EXTERN_C void stage2_attach_segfault_handler(void);
+
+// ABI warning
+ZIG_EXTERN_C ZIG_ATTRIBUTE_NORETURN void stage2_panic(const char *ptr, size_t len);
+
+// ABI warning
+ZIG_EXTERN_C int stage2_fmt(int argc, char **argv);
+
+// ABI warning
+struct stage2_DepTokenizer {
+ void *handle;
+};
+
+// ABI warning
+struct stage2_DepNextResult {
+ enum TypeId {
+ error,
+ null,
+ target,
+ prereq,
+ };
+
+ TypeId type_id;
+
+ // when ent == error --> error text
+ // when ent == null --> undefined
+ // when ent == target --> target pathname
+ // when ent == prereq --> prereq pathname
+ const char *textz;
+};
+
+// ABI warning
+ZIG_EXTERN_C stage2_DepTokenizer stage2_DepTokenizer_init(const char *input, size_t len);
+
+// ABI warning
+ZIG_EXTERN_C void stage2_DepTokenizer_deinit(stage2_DepTokenizer *self);
+
+// ABI warning
+ZIG_EXTERN_C stage2_DepNextResult stage2_DepTokenizer_next(stage2_DepTokenizer *self);
+
+// ABI warning
+struct Stage2Progress;
+// ABI warning
+struct Stage2ProgressNode;
+// ABI warning
+ZIG_EXTERN_C Stage2Progress *stage2_progress_create(void);
+// ABI warning
+ZIG_EXTERN_C void stage2_progress_disable_tty(Stage2Progress *progress);
+// ABI warning
+ZIG_EXTERN_C void stage2_progress_destroy(Stage2Progress *progress);
+// ABI warning
+ZIG_EXTERN_C Stage2ProgressNode *stage2_progress_start_root(Stage2Progress *progress,
+ const char *name_ptr, size_t name_len, size_t estimated_total_items);
+// ABI warning
+ZIG_EXTERN_C Stage2ProgressNode *stage2_progress_start(Stage2ProgressNode *node,
+ const char *name_ptr, size_t name_len, size_t estimated_total_items);
+// ABI warning
+ZIG_EXTERN_C void stage2_progress_end(Stage2ProgressNode *node);
+// ABI warning
+ZIG_EXTERN_C void stage2_progress_complete_one(Stage2ProgressNode *node);
+// ABI warning
+ZIG_EXTERN_C void stage2_progress_update_node(Stage2ProgressNode *node,
+ size_t completed_count, size_t estimated_total_items);
+
+// ABI warning
+struct Stage2CpuFeatures;
+
+// ABI warning
+ZIG_EXTERN_C enum Error stage2_cpu_features_parse(struct Stage2CpuFeatures **result,
+ const char *zig_triple, const char *cpu_name, const char *cpu_features);
+
+// ABI warning
+ZIG_EXTERN_C const char *stage2_cpu_features_get_llvm_cpu(const struct Stage2CpuFeatures *cpu_features);
+
+// ABI warning
+ZIG_EXTERN_C const char *stage2_cpu_features_get_llvm_features(const struct Stage2CpuFeatures *cpu_features);
+
+// ABI warning
+ZIG_EXTERN_C void stage2_cpu_features_get_builtin_str(const struct Stage2CpuFeatures *cpu_features,
+ const char **ptr, size_t *len);
+
+// ABI warning
+ZIG_EXTERN_C void stage2_cpu_features_get_cache_hash(const struct Stage2CpuFeatures *cpu_features,
+ const char **ptr, size_t *len);
+
+// ABI warning
+ZIG_EXTERN_C int stage2_cmd_targets(const char *zig_triple);
+
+// ABI warning
+struct Stage2LibCInstallation {
+ const char *include_dir;
+ size_t include_dir_len;
+ const char *sys_include_dir;
+ size_t sys_include_dir_len;
+ const char *crt_dir;
+ size_t crt_dir_len;
+ const char *static_crt_dir;
+ size_t static_crt_dir_len;
+ const char *msvc_lib_dir;
+ size_t msvc_lib_dir_len;
+ const char *kernel32_lib_dir;
+ size_t kernel32_lib_dir_len;
+};
+
+// ABI warning
+ZIG_EXTERN_C enum Error stage2_libc_parse(struct Stage2LibCInstallation *libc, const char *libc_file);
+// ABI warning
+ZIG_EXTERN_C enum Error stage2_libc_render(struct Stage2LibCInstallation *self, FILE *file);
+// ABI warning
+ZIG_EXTERN_C enum Error stage2_libc_find_native(struct Stage2LibCInstallation *libc);
+// ABI warning
+ZIG_EXTERN_C enum Error stage2_libc_cc_print_file_name(char **out_ptr, size_t *out_len,
+ const char *o_file, bool want_dirname);
+
+#endif
diff --git a/src/userland.cpp b/src/userland.cpp
@@ -1,179 +0,0 @@
-// This file is a shim for zig1. The real implementations of these are in
-// src-self-hosted/stage1.zig
-
-#include "userland.h"
-#include "util.hpp"
-#include "zig_llvm.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-Error stage2_translate_c(struct Stage2Ast **out_ast,
- struct Stage2ErrorMsg **out_errors_ptr, size_t *out_errors_len,
- const char **args_begin, const char **args_end, const char *resources_path)
-{
- const char *msg = "stage0 called stage2_translate_c";
- stage2_panic(msg, strlen(msg));
-}
-
-void stage2_free_clang_errors(struct Stage2ErrorMsg *ptr, size_t len) {
- const char *msg = "stage0 called stage2_free_clang_errors";
- stage2_panic(msg, strlen(msg));
-}
-
-void stage2_zen(const char **ptr, size_t *len) {
- const char *msg = "stage0 called stage2_zen";
- stage2_panic(msg, strlen(msg));
-}
-
-void stage2_attach_segfault_handler(void) { }
-
-void stage2_panic(const char *ptr, size_t len) {
- fwrite(ptr, 1, len, stderr);
- fprintf(stderr, "\n");
- fflush(stderr);
- abort();
-}
-
-void stage2_render_ast(struct Stage2Ast *ast, FILE *output_file) {
- const char *msg = "stage0 called stage2_render_ast";
- stage2_panic(msg, strlen(msg));
-}
-
-int stage2_fmt(int argc, char **argv) {
- const char *msg = "stage0 called stage2_fmt";
- stage2_panic(msg, strlen(msg));
-}
-
-stage2_DepTokenizer stage2_DepTokenizer_init(const char *input, size_t len) {
- const char *msg = "stage0 called stage2_DepTokenizer_init";
- stage2_panic(msg, strlen(msg));
-}
-
-void stage2_DepTokenizer_deinit(stage2_DepTokenizer *self) {
- const char *msg = "stage0 called stage2_DepTokenizer_deinit";
- stage2_panic(msg, strlen(msg));
-}
-
-stage2_DepNextResult stage2_DepTokenizer_next(stage2_DepTokenizer *self) {
- const char *msg = "stage0 called stage2_DepTokenizer_next";
- stage2_panic(msg, strlen(msg));
-}
-
-
-struct Stage2Progress {
- int trash;
-};
-
-struct Stage2ProgressNode {
- int trash;
-};
-
-Stage2Progress *stage2_progress_create(void) {
- return nullptr;
-}
-
-void stage2_progress_destroy(Stage2Progress *progress) {}
-
-Stage2ProgressNode *stage2_progress_start_root(Stage2Progress *progress,
- const char *name_ptr, size_t name_len, size_t estimated_total_items)
-{
- return nullptr;
-}
-Stage2ProgressNode *stage2_progress_start(Stage2ProgressNode *node,
- const char *name_ptr, size_t name_len, size_t estimated_total_items)
-{
- return nullptr;
-}
-void stage2_progress_end(Stage2ProgressNode *node) {}
-void stage2_progress_complete_one(Stage2ProgressNode *node) {}
-void stage2_progress_disable_tty(Stage2Progress *progress) {}
-void stage2_progress_update_node(Stage2ProgressNode *node, size_t completed_count, size_t estimated_total_items){}
-
-struct Stage2CpuFeatures {
- const char *llvm_cpu_name;
- const char *llvm_cpu_features;
- const char *builtin_str;
- const char *cache_hash;
-};
-
-Error stage2_cpu_features_parse(struct Stage2CpuFeatures **out, const char *zig_triple,
- const char *cpu_name, const char *cpu_features)
-{
- if (zig_triple == nullptr) {
- Stage2CpuFeatures *result = heap::c_allocator.create<Stage2CpuFeatures>();
- result->llvm_cpu_name = ZigLLVMGetHostCPUName();
- result->llvm_cpu_features = ZigLLVMGetNativeFeatures();
- result->builtin_str = "arch.getBaselineCpuFeatures();\n";
- result->cache_hash = "native\n\n";
- *out = result;
- return ErrorNone;
- }
- if (cpu_name == nullptr && cpu_features == nullptr) {
- Stage2CpuFeatures *result = heap::c_allocator.create<Stage2CpuFeatures>();
- result->builtin_str = "arch.getBaselineCpuFeatures();\n";
- result->cache_hash = "\n\n";
- *out = result;
- return ErrorNone;
- }
-
- const char *msg = "stage0 called stage2_cpu_features_parse with non-null cpu name or features";
- stage2_panic(msg, strlen(msg));
-}
-
-void stage2_cpu_features_get_cache_hash(const Stage2CpuFeatures *cpu_features,
- const char **ptr, size_t *len)
-{
- *ptr = cpu_features->cache_hash;
- *len = strlen(cpu_features->cache_hash);
-}
-const char *stage2_cpu_features_get_llvm_cpu(const Stage2CpuFeatures *cpu_features) {
- return cpu_features->llvm_cpu_name;
-}
-const char *stage2_cpu_features_get_llvm_features(const Stage2CpuFeatures *cpu_features) {
- return cpu_features->llvm_cpu_features;
-}
-void stage2_cpu_features_get_builtin_str(const Stage2CpuFeatures *cpu_features,
- const char **ptr, size_t *len)
-{
- *ptr = cpu_features->builtin_str;
- *len = strlen(cpu_features->builtin_str);
-}
-
-int stage2_cmd_targets(const char *zig_triple) {
- const char *msg = "stage0 called stage2_cmd_targets";
- stage2_panic(msg, strlen(msg));
-}
-
-enum Error stage2_libc_parse(struct Stage2LibCInstallation *libc, const char *libc_file) {
- libc->include_dir = "/dummy/include";
- libc->include_dir_len = strlen(libc->include_dir);
- libc->sys_include_dir = "/dummy/sys/include";
- libc->sys_include_dir_len = strlen(libc->sys_include_dir);
- libc->crt_dir = "";
- libc->crt_dir_len = strlen(libc->crt_dir);
- libc->static_crt_dir = "";
- libc->static_crt_dir_len = strlen(libc->static_crt_dir);
- libc->msvc_lib_dir = "";
- libc->msvc_lib_dir_len = strlen(libc->msvc_lib_dir);
- libc->kernel32_lib_dir = "";
- libc->kernel32_lib_dir_len = strlen(libc->kernel32_lib_dir);
- return ErrorNone;
-}
-
-enum Error stage2_libc_render(struct Stage2LibCInstallation *self, FILE *file) {
- const char *msg = "stage0 called stage2_libc_render";
- stage2_panic(msg, strlen(msg));
-}
-
-enum Error stage2_libc_find_native(struct Stage2LibCInstallation *libc) {
- const char *msg = "stage0 called stage2_libc_find_native";
- stage2_panic(msg, strlen(msg));
-}
-
-enum Error stage2_libc_cc_print_file_name(char **out_ptr, size_t *out_len,
- const char *o_file, bool want_dirname)
-{
- const char *msg = "stage0 called stage2_libc_cc_print_file_name";
- stage2_panic(msg, strlen(msg));
-}
diff --git a/src/userland.h b/src/userland.h
@@ -1,248 +0,0 @@
-/*
- * Copyright (c) 2019 Andrew Kelley
- *
- * This file is part of zig, which is MIT licensed.
- * See http://opensource.org/licenses/MIT
- */
-
-#ifndef ZIG_USERLAND_H
-#define ZIG_USERLAND_H
-
-#include <stddef.h>
-#include <stdint.h>
-#include <stdio.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
-// userland.cpp and src-self-hosted/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,
- ErrorUnknownSubArchitecture,
- ErrorUnknownCpuFeature,
- ErrorInvalidCpuFeatures,
- ErrorInvalidLlvmCpuFeaturesFormat,
- ErrorUnknownApplicationBinaryInterface,
- ErrorASTUnitFailure,
- ErrorBadPathName,
- ErrorSymLinkLoop,
- ErrorProcessFdQuotaExceeded,
- ErrorSystemFdQuotaExceeded,
- ErrorNoDevice,
- ErrorDeviceBusy,
- ErrorUnableToSpawnCCompiler,
- ErrorCCompilerExitCode,
- ErrorCCompilerCrashed,
- ErrorCCompilerCannotFindHeaders,
- ErrorLibCRuntimeNotFound,
- ErrorLibCStdLibHeaderNotFound,
- ErrorLibCKernel32LibNotFound,
- ErrorUnsupportedArchitecture,
-};
-
-// 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
-struct Stage2Ast;
-
-// ABI warning
-ZIG_EXTERN_C enum Error stage2_translate_c(struct Stage2Ast **out_ast,
- struct Stage2ErrorMsg **out_errors_ptr, size_t *out_errors_len,
- const char **args_begin, const char **args_end, const char *resources_path);
-
-// ABI warning
-ZIG_EXTERN_C void stage2_free_clang_errors(struct Stage2ErrorMsg *ptr, size_t len);
-
-// ABI warning
-ZIG_EXTERN_C void stage2_render_ast(struct Stage2Ast *ast, FILE *output_file);
-
-// ABI warning
-ZIG_EXTERN_C void stage2_zen(const char **ptr, size_t *len);
-
-// ABI warning
-ZIG_EXTERN_C void stage2_attach_segfault_handler(void);
-
-// ABI warning
-ZIG_EXTERN_C ZIG_ATTRIBUTE_NORETURN void stage2_panic(const char *ptr, size_t len);
-
-// ABI warning
-ZIG_EXTERN_C int stage2_fmt(int argc, char **argv);
-
-// ABI warning
-struct stage2_DepTokenizer {
- void *handle;
-};
-
-// ABI warning
-struct stage2_DepNextResult {
- enum TypeId {
- error,
- null,
- target,
- prereq,
- };
-
- TypeId type_id;
-
- // when ent == error --> error text
- // when ent == null --> undefined
- // when ent == target --> target pathname
- // when ent == prereq --> prereq pathname
- const char *textz;
-};
-
-// ABI warning
-ZIG_EXTERN_C stage2_DepTokenizer stage2_DepTokenizer_init(const char *input, size_t len);
-
-// ABI warning
-ZIG_EXTERN_C void stage2_DepTokenizer_deinit(stage2_DepTokenizer *self);
-
-// ABI warning
-ZIG_EXTERN_C stage2_DepNextResult stage2_DepTokenizer_next(stage2_DepTokenizer *self);
-
-// ABI warning
-struct Stage2Progress;
-// ABI warning
-struct Stage2ProgressNode;
-// ABI warning
-ZIG_EXTERN_C Stage2Progress *stage2_progress_create(void);
-// ABI warning
-ZIG_EXTERN_C void stage2_progress_disable_tty(Stage2Progress *progress);
-// ABI warning
-ZIG_EXTERN_C void stage2_progress_destroy(Stage2Progress *progress);
-// ABI warning
-ZIG_EXTERN_C Stage2ProgressNode *stage2_progress_start_root(Stage2Progress *progress,
- const char *name_ptr, size_t name_len, size_t estimated_total_items);
-// ABI warning
-ZIG_EXTERN_C Stage2ProgressNode *stage2_progress_start(Stage2ProgressNode *node,
- const char *name_ptr, size_t name_len, size_t estimated_total_items);
-// ABI warning
-ZIG_EXTERN_C void stage2_progress_end(Stage2ProgressNode *node);
-// ABI warning
-ZIG_EXTERN_C void stage2_progress_complete_one(Stage2ProgressNode *node);
-// ABI warning
-ZIG_EXTERN_C void stage2_progress_update_node(Stage2ProgressNode *node,
- size_t completed_count, size_t estimated_total_items);
-
-// ABI warning
-struct Stage2CpuFeatures;
-
-// ABI warning
-ZIG_EXTERN_C enum Error stage2_cpu_features_parse(struct Stage2CpuFeatures **result,
- const char *zig_triple, const char *cpu_name, const char *cpu_features);
-
-// ABI warning
-ZIG_EXTERN_C const char *stage2_cpu_features_get_llvm_cpu(const struct Stage2CpuFeatures *cpu_features);
-
-// ABI warning
-ZIG_EXTERN_C const char *stage2_cpu_features_get_llvm_features(const struct Stage2CpuFeatures *cpu_features);
-
-// ABI warning
-ZIG_EXTERN_C void stage2_cpu_features_get_builtin_str(const struct Stage2CpuFeatures *cpu_features,
- const char **ptr, size_t *len);
-
-// ABI warning
-ZIG_EXTERN_C void stage2_cpu_features_get_cache_hash(const struct Stage2CpuFeatures *cpu_features,
- const char **ptr, size_t *len);
-
-// ABI warning
-ZIG_EXTERN_C int stage2_cmd_targets(const char *zig_triple);
-
-// ABI warning
-struct Stage2LibCInstallation {
- const char *include_dir;
- size_t include_dir_len;
- const char *sys_include_dir;
- size_t sys_include_dir_len;
- const char *crt_dir;
- size_t crt_dir_len;
- const char *static_crt_dir;
- size_t static_crt_dir_len;
- const char *msvc_lib_dir;
- size_t msvc_lib_dir_len;
- const char *kernel32_lib_dir;
- size_t kernel32_lib_dir_len;
-};
-
-// ABI warning
-ZIG_EXTERN_C enum Error stage2_libc_parse(struct Stage2LibCInstallation *libc, const char *libc_file);
-// ABI warning
-ZIG_EXTERN_C enum Error stage2_libc_render(struct Stage2LibCInstallation *self, FILE *file);
-// ABI warning
-ZIG_EXTERN_C enum Error stage2_libc_find_native(struct Stage2LibCInstallation *libc);
-// ABI warning
-ZIG_EXTERN_C enum Error stage2_libc_cc_print_file_name(char **out_ptr, size_t *out_len,
- const char *o_file, bool want_dirname);
-
-#endif
diff --git a/src/util.cpp b/src/util.cpp
@@ -6,7 +6,7 @@
*/
#include "util.hpp"
-#include "userland.h"
+#include "stage2.h"
#include <stdio.h>
#include <stdarg.h>
diff --git a/src/zig_clang.h b/src/zig_clang.h
@@ -8,7 +8,7 @@
#ifndef ZIG_ZIG_CLANG_H
#define ZIG_ZIG_CLANG_H
-#include "userland.h"
+#include "stage2.h"
#include <inttypes.h>
#include <stdbool.h>