This adds the -image_base, -static, -pagezero_size, and -version_load_command.
-image_base, -static, and -pagezero_size commonly used for kernel development. So I don't know how useful these will be to most people, but I do believe that having lld be a more complete replacement for the Apple linker is a good thing.
-image_base sets the virtual address of the first section, changing the starting address the binary is loaded at. Basically the same thing as /BASE from link and lld-link.
-pagezero_size changes the __PAGEZERO size, removing that segment if it is set to zero. I personally have no idea what __PAGEZERO is for, but it isn't useful with a custom image base.
-static does alot. It changes the entry point command from LC_MAIN to LC_UNIXTHREAD. It also stops the LC_BUILD_VERSION, LC_VERSION_MIN_*, LC_LOAD_DYLINKER, LC_DATA_IN_CODE, and LC_FUNCTION_STARTS commands from being added to the binary. It appears that -function_starts and -version_load_command readds their respective commands to the binary, so -static only changes the default for commands.
-version_load_command adds LC_BUILD_VERSION or LC_VERSION_MIN_* when -static is used. It got added because it was easy to add as I was doing -static. I only learnt about -version_load_command from reading the Makefiles for the XNU kernel used in macOS. Maybe in the future, it can be extended to control which version command gets added, but that is far beyond what I intended to do.
we haven't been super consistent about this, but it would be nice to keep the Configuration struct organized by field type. E.g. addLoadVersion could go here