From 92751d5e2426f5f8151b910156d33709bf5df11b Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sat, 21 Oct 2017 17:31:06 -0400 Subject: [PATCH] self hosted zig: print usage --- build.zig | 10 ++++ src-self-hosted/main.zig | 112 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 src-self-hosted/main.zig diff --git a/build.zig b/build.zig index 0768b4b43334361fe65fdef0179ce99f4b586976..f529a765a5f6d9b2ad264dd21fb82c7bc8c35939 100644 --- a/build.zig +++ b/build.zig @@ -2,6 +2,16 @@ const Builder = @import("std").build.Builder; const tests = @import("test/tests.zig"); pub fn build(b: &Builder) { + const mode = b.standardReleaseOptions(); + + var exe = b.addExecutable("zig", "src-self-hosted/main.zig"); + exe.setBuildMode(mode); + exe.linkSystemLibrary("c"); + b.default_step.dependOn(&exe.step); + + b.installArtifact(exe); + + const test_filter = b.option([]const u8, "test-filter", "Skip tests that do not match filter"); const with_lldb = b.option(bool, "with-lldb", "Run tests in LLDB to get a backtrace if one fails") ?? false; const test_step = b.step("test", "Run all the tests"); diff --git a/src-self-hosted/main.zig b/src-self-hosted/main.zig new file mode 100644 index 0000000000000000000000000000000000000000..404c6064fd7ebb365cf2c9125451ce5f3667e76e --- /dev/null +++ b/src-self-hosted/main.zig @@ -0,0 +1,112 @@ +const io = @import("std").io; +const os = @import("std").os; +const heap = @import("std").mem; + +// TODO: OutSteam and InStream interface +// TODO: move allocator to heap namespace + +error InvalidArgument; +error MissingArg0; + +pub fn main() -> %void { + if (internal_main()) |_| { + return; + } else |err| { + if (err == error.InvalidArgument) { + io.stderr.printf("\n") %% return err; + printUsage(&io.stderr) %% return err; + } else { + io.stderr.printf("{}\n", err) %% return err; + } + return err; + } +} + +pub fn internal_main() -> %void { + var args_it = os.args(); + + var incrementing_allocator = heap.IncrementingAllocator.init(10 * 1024 * 1024) %% |err| { + io.stderr.printf("Unable to allocate memory") %% {}; + return err; + }; + defer incrementing_allocator.deinit(); + + const allocator = &incrementing_allocator.allocator; + + const arg0 = %return (args_it.next(allocator) ?? error.MissingArg0); + defer allocator.free(arg0); + + %return printUsage(&io.stdout); +} + +fn printUsage(outstream: &io.OutStream) -> %void { + %return outstream.write( + \\Usage: zig [command] [options] + \\Commands: + \\ build build project from build.zig + \\ build-exe [source] create executable from source or object files + \\ build-lib [source] create library from source or object files + \\ build-obj [source] create object from source or assembly + \\ parsec [source] convert c code to zig code + \\ targets list available compilation targets + \\ test [source] create and run a test build + \\ version print version number and exit + \\ zen print zen of zig and exit + \\Compile Options: + \\ --assembly [source] add assembly file to build + \\ --cache-dir [path] override the cache directory + \\ --color [auto|off|on] enable or disable colored error messages + \\ --enable-timing-info print timing diagnostics + \\ --libc-include-dir [path] directory where libc stdlib.h resides + \\ --name [name] override output name + \\ --output [file] override destination path + \\ --output-h [file] override generated header file path + \\ --pkg-begin [name] [path] make package available to import and push current pkg + \\ --pkg-end pop current pkg + \\ --release-fast build with optimizations on and safety off + \\ --release-safe build with optimizations on and safety on + \\ --static output will be statically linked + \\ --strip exclude debug symbols + \\ --target-arch [name] specify target architecture + \\ --target-environ [name] specify target environment + \\ --target-os [name] specify target operating system + \\ --verbose turn on compiler debug output + \\ --verbose-link turn on compiler debug output for linking only + \\ --verbose-ir turn on compiler debug output for IR only + \\ --zig-install-prefix [path] override directory where zig thinks it is installed + \\ -dirafter [dir] same as -isystem but do it last + \\ -isystem [dir] add additional search path for other .h files + \\ -mllvm [arg] additional arguments to forward to LLVM's option processing + \\Link Options: + \\ --ar-path [path] set the path to ar + \\ --dynamic-linker [path] set the path to ld.so + \\ --each-lib-rpath add rpath for each used dynamic library + \\ --libc-lib-dir [path] directory where libc crt1.o resides + \\ --libc-static-lib-dir [path] directory where libc crtbegin.o resides + \\ --msvc-lib-dir [path] (windows) directory where vcruntime.lib resides + \\ --kernel32-lib-dir [path] (windows) directory where kernel32.lib resides + \\ --library [lib] link against lib + \\ --library-path [dir] add a directory to the library search path + \\ --linker-script [path] use a custom linker script + \\ --object [obj] add object file to build + \\ -L[dir] alias for --library-path + \\ -rdynamic add all symbols to the dynamic symbol table + \\ -rpath [path] add directory to the runtime library search path + \\ -mconsole (windows) --subsystem console to the linker + \\ -mwindows (windows) --subsystem windows to the linker + \\ -municode (windows) link with unicode + \\ -framework [name] (darwin) link against framework + \\ -mios-version-min [ver] (darwin) set iOS deployment target + \\ -mmacosx-version-min [ver] (darwin) set Mac OS X deployment target + \\ --ver-major [ver] dynamic library semver major version + \\ --ver-minor [ver] dynamic library semver minor version + \\ --ver-patch [ver] dynamic library semver patch version + \\Test Options: + \\ --test-filter [text] skip tests that do not match filter + \\ --test-name-prefix [text] add prefix to all tests + \\ --test-cmd [arg] specify test execution command one arg at a time + \\ --test-cmd-bin appends test binary path to test cmd args + \\ + ); + %return outstream.flush(); +} -- 2.54.0