|  | #  Copyright 2020 The Monogon Project Authors. | 
|  | # | 
|  | #  SPDX-License-Identifier: Apache-2.0 | 
|  | # | 
|  | #  Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | #  you may not use this file except in compliance with the License. | 
|  | #  You may obtain a copy of the License at | 
|  | # | 
|  | #      http://www.apache.org/licenses/LICENSE-2.0 | 
|  | # | 
|  | #  Unless required by applicable law or agreed to in writing, software | 
|  | #  distributed under the License is distributed on an "AS IS" BASIS, | 
|  | #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | #  See the License for the specific language governing permissions and | 
|  | #  limitations under the License. | 
|  |  | 
|  | cc_binary( | 
|  | name = "qboot-elf", | 
|  | srcs = [ | 
|  | "code16.c", | 
|  | "code32seg.c", | 
|  | "cstart.S", | 
|  | "entry.S", | 
|  | "fw_cfg.c", | 
|  | "hwsetup.c", | 
|  | "linuxboot.c", | 
|  | "main.c", | 
|  | "malloc.c", | 
|  | "mptable.c", | 
|  | "pci.c", | 
|  | "printf.c", | 
|  | "string.c", | 
|  | "smbios.c", | 
|  | "tables.c", | 
|  | "benchmark.h", | 
|  | ] + glob(["include/*.h"]), | 
|  | copts = [ | 
|  | "-m32", | 
|  | "-march=i386", | 
|  | "-mregparm=3", | 
|  | "-fno-stack-protector", | 
|  | "-fno-delete-null-pointer-checks", | 
|  | "-ffreestanding", | 
|  | "-mstringop-strategy=rep_byte", | 
|  | "-minline-all-stringops", | 
|  | "-fno-pic", | 
|  | ], | 
|  | features = ["-link_full_libc", "-cpp"], | 
|  | includes = [ | 
|  | "include", | 
|  | ], | 
|  | additional_linker_inputs = [ | 
|  | "flat.lds", | 
|  | ], | 
|  | linkopts = [ | 
|  | "-nostdlib", | 
|  | "-m32", | 
|  | "-Wl,--build-id=none", | 
|  | "-Wl,-T$(location flat.lds)", | 
|  | "-no-pie", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | # TODO(q3k): move to starlark rule for hermeticity, use toolchain objcopy | 
|  | genrule( | 
|  | name = "qboot-bin", | 
|  | srcs = [":qboot-elf"], | 
|  | outs = ["bios.bin"], | 
|  | cmd = "objcopy -O binary $< $@", | 
|  | visibility = ["//visibility:public"], | 
|  | ) |