aboutsummaryrefslogtreecommitdiff
path: root/src-self-hosted/stage2.zig
AgeCommit message (Collapse)Author
2020-03-21zig cc: detect optimization and debug flagsAndrew Kelley
2020-03-21zig cc: better support for the preprocessor option (-E)Andrew Kelley
2020-03-21rename "passthrough" → "driver_punt"Michael Dusan
- punt when `-E` is supplied - punt when `-S` is supplied
2020-03-21zig cc improvementsAndrew Kelley
* The generated options data file is sorted now in a way that makes sure longer prefixes are first. This prevents collisions with some parameters. * Add support for `-fPIC`, `-fno-PIC`, `-nostdlib`, `-shared`, `-rdynamic`, `-Wl,-soname`, `-Wl,-rpath` * Better support for `-o`. * Disable generating h files * Shared library support. * Better positional argument support.
2020-03-21ability to use `zig cc` as a drop-in C compilerAndrew Kelley
The basics are working
2020-03-20glibc: include ld symbols and proper soname for ldAndrew Kelley
2020-03-19fixes in semantic analysis needed to support this featureAndrew Kelley
2020-03-18(breaking) clarify openDir APIAndrew Kelley
* remove deprecated `std.fs.Dir` APIs * `std.fs.Dir.openDir` now takes a options struct with bool fields for `access_sub_paths` and `iterate`. It's now much more clear how opening directories works. * fixed the std lib and various zig code calling the wrong openDir function. * the runtime safety check for dir flags is removed in favor of the cheaper option of putting a comment on the same line as handling EBADF / ACCESS_DENIED, since that will show up in stack traces.
2020-03-13fix all the TODOs from the pull requestAndrew Kelley
* `std.Buffer.print` is removed; use `buffer.outStream().print` * `std.fmt.count` returns a `u64` * `std.Fifo.print` is removed; use `fifo.outStream().print` * `std.fmt.bufPrint` error is renamed from `BufferTooSmall` to `NoSpaceLeft` to match `std.os.write`. * `std.io.FixedBufferStream.getWritten` returns mutable buffer if the buffer is mutable.
2020-03-12Remove unused static_crt_dir field from libc configdaurnimator
2020-03-12fix `zig targets` not reporting native infoAndrew Kelley
2020-03-11fix zig-cache to treat cpu-features as raw-bytesMichael Dusan
- add Stage2Target.cache_hash_len - add cache_mem(ch, ptr, len) - update call sites to use { ptr, len }
2020-03-11parse CPU features when --target is nullMichael Dusan
- fixes case where features are not parsed when `-target` is null - `zig builtin -mcpu native+bogus` should return error/list of valid features
2020-03-10(breaking) rework stream abstractionsAndrew Kelley
The main goal here is to make the function pointers comptime, so that we don't have to do the crazy stuff with async function frames. Since InStream, OutStream, and SeekableStream are already generic across error sets, it's not really worse to make them generic across the vtable as well. See #764 for the open issue acknowledging that using generics for these abstractions is a design flaw. See #130 for the efforts to make these abstractions non-generic. This commit also changes the OutStream API so that `write` returns number of bytes written, and `writeAll` is the one that loops until the whole buffer is written.
2020-03-06cleanup CPU model & feature detectionAndrew Kelley
Add std.Target.Cpu.Model.generic which is even more empty than baseline. CPU model and feature detection uses this rather than baseline. Rename cpu_detected to cpu_detection_unimplemented and flip the logic. It can be relied on by stage2.zig to decide whether the LLVM workaround is needed without also checking the CrossTarget. Move the CPU detection to after the OS detection, and use the detected OS for the CPU detection. This is relevant because operating systems sometimes emulate certain CPU features, so knowing the OS and version is relevant for determining CPU features. Prepare for #4592 by passing the CPU arch to the detection code, instead of having it rely on Target.current. The CPU model & feature detection logic is modified. Before: * Detect actual features * Use as hint when detecting CPU model * Populate dependencies of CPU model features * Merge that into the actual features set After: * Detect actual features * Use as hint when detecting CPU model * Add known CPU model features to actual features * Detect actual features again, overriding known CPU model features * Populate dependencies
2020-03-06Cleaned up CPU detection and fixed incorrect detection bits.alichay
2020-03-06Added self-hosted x86 CPU detection.alichay
2020-02-28CrossTarget.cpu_model: communicate intent preciselyAndrew Kelley
2020-02-28fix handling of CrossTarget.cpu_modelAndrew Kelley
2020-02-28improve std.zig.system.NativeTargetInfo.detectAndrew Kelley
It now takes a std.zig.CrossTarget parameter, and only resolves native things, leaving explicitly overridden things alone.
2020-02-28dynamic_linker becomes a field of std.zig.CrossTargetAndrew Kelley
2020-02-28remove special darwin os version min handlingAndrew Kelley
now it is integrated with zig's target OS range.
2020-02-28std.zig.system.NativeTargetInfo.detect: almost no AllocatorAndrew Kelley
2020-02-28getStandardDynamicLinkerPath renamed and no allocatorAndrew Kelley
* `std.Target.getStandardDynamicLinkerPath` => `std.Target.standardDynamicLinkerPath` * it now takes a pointer to fixed size array rather than an allocator * `std.zig.system.NativeTargetInfo.detect` now supports reading PT_INTERP from /usr/bin/env
2020-02-28don't error out for targets with unknown standard dynamic linker pathAndrew Kelley
2020-02-28fix incorrect builtin import code for windowsAndrew Kelley
2020-02-28fix not setting the dynamic linker path when cross compilingAndrew Kelley
2020-02-28improve the "external executor" detection logicAndrew Kelley
2020-02-28fix target parsingAndrew Kelley
2020-02-28separate std.Target and std.zig.CrossTargetAndrew Kelley
Zig now supports a more fine-grained sense of what is native and what is not. Some examples: This is now allowed: -target native Different OS but native CPU, default Windows C ABI: -target native-windows This could be useful for example when running in Wine. Different CPU but native OS, native C ABI. -target x86_64-native -mcpu=skylake Different C ABI but otherwise native target: -target native-native-musl -target native-native-gnu Lots of breaking changes to related std lib APIs. Calls to getOs() will need to be changed to getOsTag(). Calls to getArch() will need to be changed to getCpuArch(). Usage of Target.Cross and Target.Native need to be updated to use CrossTarget API. `std.build.Builder.standardTargetOptions` is changed to accept its parameters as a struct with default values. It now has the ability to specify a whitelist of targets allowed, as well as the default target. Rather than two different ways of collecting the target, it's now always a string that is validated, and prints helpful diagnostics for invalid targets. This feature should now be actually useful, and contributions welcome to further improve the user experience. `std.build.LibExeObjStep.setTheTarget` is removed. `std.build.LibExeObjStep.setTarget` is updated to take a CrossTarget parameter. `std.build.LibExeObjStep.setTargetGLibC` is removed. glibc versions are handled in the CrossTarget API and can be specified with the `-target` triple. `std.builtin.Version` gains a `format` method.
2020-02-28introduce operating system version ranges as part of the targetAndrew Kelley
* re-introduce `std.build.Target` which is distinct from `std.Target`. `std.build.Target` wraps `std.Target` so that it can be annotated as "the native target" or an explicitly specified target. * `std.Target.Os` is moved to `std.Target.Os.Tag`. The former is now a struct which has the tag as well as version range information. * `std.elf` gains some more ELF header constants. * `std.Target.parse` gains the ability to parse operating system version ranges as well as glibc version. * Added `std.Target.isGnuLibC()`. * self-hosted dynamic linker detection and glibc version detection. This also adds the improved logic using `/usr/bin/env` rather than invoking the system C compiler to find the dynamic linker when zig is statically linked. Related: #2084 Note: this `/usr/bin/env` code is work-in-progress. * `-target-glibc` CLI option is removed in favor of the new `-target` syntax. Example: `-target x86_64-linux-gnu.2.27` closes #1907
2020-02-22std.os.execvpeZ_expandArg0: fix not restoring argv[0]Andrew Kelley
This function expands argv[0] into the absolute path resolved with PATH environment variable before making the execve syscall. However, in case the execve fails, e.g. with ENOENT, it did not restore argv to how it was before it was passed in. This resulted in the caller performing an invalid free. This commit also adds verbose debug info when native system C compiler detection fails. See #4521.
2020-02-21std.Target.parse gives parsing diagnosticsAndrew Kelley
2020-02-21remove sub-arch from stage1Andrew Kelley
2020-02-21fix not initializing some ZigTarget fieldsAndrew Kelley
2020-02-20fix zig build, ABI ABI, and update tests to new Target layoutAndrew Kelley
2020-02-20support -mcpu=baseline, both in stage1 and stage2Andrew Kelley
See e381a42de9c0f0c5439a926b0ac99026a0373f49 for more details. This is set up so that if we wish to make "baseline" depend on the OS in the future, it is possible to do that.
2020-02-19remove the concept of "sub-architecture"Andrew Kelley
in favor of CPU features. Also rearrange the `std.Target` data structure. * note: `@import("builtin")` was already deprecated in favor of `@import("std").builtin`. * `std.builtin.arch` is now deprecated in favor of `std.builtin.cpu.arch`. * `std.Target.CpuFeatures.Cpu` is now `std.Target.Cpu.Model`. * `std.Target.CpuFeatures` is now `std.Target.Cpu`. * `std.Target` no longer has an `arch` field. Instead it has a `cpu` field, which has `arch`, `model`, and `features`. * `std.Target` no longer has a `cpu_features` field. * `std.Target.Arch` is moved to `std.Target.Cpu.Arch` and it is an enum instead of a tagged union. * `std.Target.parseOs` is moved to `std.Target.Os.parse`. * `std.Target.parseAbi` is moved to `std.Target.Abi.parse`. * `std.Target.parseArchSub` is only for arch now and moved to `std.Target.Cpu.Arch.parse`. * `std.Target.parse` is improved to accept CPU name and features. * `std.Target.Arch.getBaselineCpuFeatures` is moved to `std.Target.Cpu.baseline`. * `std.Target.allCpus` is renamed to `std.Target.allCpuModels`. * `std.Target.defaultAbi` is moved to `std.Target.Abi.default`. * Significant cleanup of aarch64 and arm CPU features, resulting in the needed bit count for cpu feature set going from 174 to 138. * Add `std.Target.Cpu.Feature.Set.addFeatureSet` for merging feature sets together. `-target-feature` and `-target-cpu` are removed in favor of `-mcpu`, to conform to established conventions, and it gains additional power to support cpu features. The syntax is: -mcpu=name+on1+on2-off1-off2 closes #4261
2020-02-19make the CLI support depending on system headers and librariesAndrew Kelley
(include and lib search paths) The detection of native system paths is self-hosted. closes #2041
2020-02-17fix ABI mismatch of ZigTarget in stage2 glue codeAndrew Kelley
2020-02-17support the concept of a target not having a dynamic linkerAndrew Kelley
2020-02-17self-host dynamic linker detectionAndrew Kelley
2020-02-16add missing implementations of libc installation to detect msvc pathsAndrew Kelley
2020-02-16rename libuserland to libstage2Andrew Kelley