Read-only mirror of https://review.coreboot.org/coreboot.git. Synced every hour. We don't handle Pull Requests.
https://coreboot.org
- C 93.8%
- ASL 2.2%
- Makefile 1.1%
- C++ 0.5%
- Pawn 0.5%
- Other 1.8%
This patch started out as an attempt to run linker scripts through the preprocessor. However, since that required some more infrastructure changes, the build system is so intertwined, and there are so many other small issues that turned up and are easier to fix (and get running, and test thoroughly) in a single go, it turned out a little bigger. In order of appearance, it: - wraps direct linker invocations in a macro to avoid the widespread ifeq($(CONFIG_COMPILER_LLVM_CLANG),y) duplication. - introduces an $(generic-deps) (equivalent to $(<class>-deps)) variable for targets that all files depend on - makes the $(src-to-obj) function usable in multiple places as the authoritative way to get an output file name (even if the respective source file is also under build/), and makes it preserve extensions on everything except %.c and %.S (e.g. %.ld and %.asl) - replaces the old $(<class>-postprocess) with a single $(postprocessors) variable. The old ramstage-postprocess was weird because it contained unescaped $(eval ...)s, meaning it gets executed as soon as the variable is first substituted (and the other $(eval ...) in the toplevel Makefile does essentially nothing). The new mechanism is just $(eval ...)ed directly after the recursive parse with no further magic. Files can freely append their own (escaped) content to it and access variables valid in the calling context (like $(<class>-objs)) directly. - enhances the existing $(<class>-<type>-ccopts) mechanism with $(<class>-generic-ccopts) and $(generic-<type>-ccopts) to reduce duplication. - makes .ld a type that can be added like a normal class file, causing it to be preprocessed with the correct #defines for the current class (needed for a follow-up feature). Migrates all linker scripts to this mechanism, which allows us to get rid of the weird $(ldoptions) mechanism (Kconfigs are replaced by preprocessor and no longer need to be defined as symbols). - removes duplicate $(INCLUDES) from $(CFLAGS) - repairs the crazy state of MIPS Makefiles, which seem to have been copied together from X86 despite having absolutely nothing in common with that architecture. They were using the same code to paste assembly pieces and linker scripts together without really needing it for anything, and even accidentally relied on a Kconfig default set in the arch/x86 subdirectory (I wish I was kidding). Changed them to work equivalent to the arm/arm64 Makefiles which are far closer related (also being SRAM-based platforms). - moves the x86-specifc $(OPTION_TABLES_H) into the x86 Makefile.inc and fixes an rule that would've had an empty target if it wasn't defined - removes the custom ldscript-gathering variables for x86 bootblock and romstage. The Makefile simply combines all .ld files that have been added to the respective class now. - uses the normal class build system to replace some of the custom rules for autogenerated bootblock/crt0 files on x86, and removes some hardcoded flags by using the normal $(...-ccopts) variables. - moves the handling of .asl files from the global Makefile.inc to x86. Changed to reuse the generic template for the preprocessing and C compilation steps. - removed the extra <name>.o linking step before linking an rmodule for modules that don't require special linker flags (most of them). - removes the incorrect assumption that there was a global $(LDFLAGS) from the SMM Makefile.inc (it was named $(LDFLAGFS in one place so it couldn't have been all that important ;) ). - allow -j flag for parallel builds to be properly passed through to vboot child invocation by using special $(MAKE) variable. BUG=None TEST=Built for Falco, Nyan_Blaze, Stout, Rush_Ryu and Urara. Binary diffed old and new coreboot.rom (and some manually uncompressed stages), confirmed that images/stages are byte-for-byte identical except for some embedded timestamps and commit hashes. (Addresses in Falco/Stout ramstages shifting slightly due to different link order for ASL object files within their directory. Some addresses in Urara ramstage .rodata and some relocation entries in rmodules moved around due to linking them in fewer steps.) Change-Id: I50af7dacf616e0f8ff4c43f4acc679089ad7022b Signed-off-by: Julius Werner <jwerner@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/219170 Reviewed-by: Aaron Durbin <adurbin@chromium.org> |
||
|---|---|---|
| configs | ||
| documentation | ||
| payloads | ||
| src | ||
| util | ||
| .gitignore | ||
| COMMIT-QUEUE.ini | ||
| COPYING | ||
| Makefile | ||
| Makefile.inc | ||
| PRESUBMIT.cfg | ||
| README | ||
| toolchain.inc | ||
------------------------------------------------------------------------------- coreboot README ------------------------------------------------------------------------------- coreboot is a Free Software project aimed at replacing the proprietary BIOS (firmware) found in most computers. coreboot performs a little bit of hardware initialization and then executes additional boot logic, called a payload. With the separation of hardware initialization and later boot logic, coreboot can scale from specialized applications that run directly firmware, run operating systems in flash, load custom bootloaders, or implement firmware standards, like PC BIOS services or UEFI. This allows for systems to only include the features necessary in the target application, reducing the amount of code and flash space required. coreboot was formerly known as LinuxBIOS. Payloads -------- After the basic initialization of the hardware has been performed, any desired "payload" can be started by coreboot. See http://www.coreboot.org/Payloads for a list of supported payloads. Supported Hardware ------------------ coreboot supports a wide range of chipsets, devices, and mainboards. For details please consult: * http://www.coreboot.org/Supported_Motherboards * http://www.coreboot.org/Supported_Chipsets_and_Devices Build Requirements ------------------ * gcc / g++ * make Optional: * doxygen (for generating/viewing documentation) * iasl (for targets with ACPI support) * gdb (for better debugging facilities on some targets) * ncurses (for 'make menuconfig') * flex and bison (for regenerating parsers) Building coreboot ----------------- Please consult http://www.coreboot.org/Build_HOWTO for details. Testing coreboot Without Modifying Your Hardware ------------------------------------------------ If you want to test coreboot without any risks before you really decide to use it on your hardware, you can use the QEMU system emulator to run coreboot virtually in QEMU. Please see http://www.coreboot.org/QEMU for details. Website and Mailing List ------------------------ Further details on the project, a FAQ, many HOWTOs, news, development guidelines and more can be found on the coreboot website: http://www.coreboot.org You can contact us directly on the coreboot mailing list: http://www.coreboot.org/Mailinglist Copyright and License --------------------- The copyright on coreboot is owned by quite a large number of individual developers and companies. Please check the individual source files for details. coreboot is licensed under the terms of the GNU General Public License (GPL). Some files are licensed under the "GPL (version 2, or any later version)", and some files are licensed under the "GPL, version 2". For some parts, which were derived from other projects, other (GPL-compatible) licenses may apply. Please check the individual source files for details. This makes the resulting coreboot images licensed under the GPL, version 2.