# Copyright (C) 2001-2023  The Bochs Project
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

# Makefile for the BIOS component of bochs


@SUFFIX_LINE@

srcdir = @srcdir@
VPATH = @srcdir@

SHELL = @SHELL@

@SET_MAKE@

CXX = @CXX@
CXXFLAGS = @CXXFLAGS@
CPPFLAGS = @CPPFLAGS@

LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
RANLIB = @RANLIB@

BCC = bcc
GCC = gcc
GCC32 = gcc -m32 -march=i386 -fno-stack-protector
LD32 = ld
OBJCOPY32 = objcopy
AS86 = as86
IASL = @IASL@

BX_INCDIRS = -I.. -I$(srcdir)/.. -I../iodev -I$(srcdir)/../iodev
LOCAL_CXXFLAGS =

# UPSTREAM_RELEASE_DATE = $(shell grep "Updated:" ../README | sed 's/Updated://')
# BUILDDATE = `date -u -d '$(UPSTREAM_RELEASE_DATE)' '+%m/%d/%y'`
BUILDDATE = `date -u '+%m/%d/%y'`
BIOS_BUILD_DATE = "-DBIOS_BUILD_DATE=\"$(BUILDDATE)\""
#
# -------- end configurable options --------------------------
#


.@CPP_SUFFIX@.o:
	$(CXX) -c $(BX_INCDIRS) $(CPPFLAGS) $(CXXFLAGS) $(LOCAL_CXXFLAGS) @CXXFP@$< @OFP@$@


bios: biossums BIOS-bochs-latest BIOS-bochs-legacy

clean:
	@RMCOMMAND@ *.o *.a *.s _rombios*_.c rombios*.txt rombios*.sym
	@RMCOMMAND@ acpt-dsdt.aml
	@RMCOMMAND@ usage biossums rombios16.bin
	@RMCOMMAND@ rombios32.bin rombios32.out

dist-clean: clean
	@RMCOMMAND@ Makefile

bios-clean:
	@RMCOMMAND@ BIOS-bochs-*

BIOS-bochs-legacy: rombios.c apmbios.S biossums rombios.h
	$(GCC32) $(BIOS_BUILD_DATE) -DLEGACY -E -P $< > _rombiosl_.c
	$(BCC) -o rombiosl.s -C-c -D__i86__ -0 -S _rombiosl_.c
	sed -e 's/^\.text//' -e 's/^\.data//' rombiosl.s > _rombiosl_.s
	$(AS86) _rombiosl_.s -b tmpl.bin -u- -w- -g -0 -j -O -l rombiosl.txt
	-perl ${srcdir}/makesym.perl < rombiosl.txt > rombiosl.sym
	mv tmpl.bin $@
	./biossums $@
	@RMCOMMAND@ _rombiosl_.s


rombios16.bin: rombios.c apmbios.S biossums rombios.h
	$(GCC32) $(BIOS_BUILD_DATE) -E -P $< > _rombios_.c
	$(BCC) -o rombios.s -C-c -D__i86__ -0 -S _rombios_.c
	sed -e 's/^\.text//' -e 's/^\.data//' rombios.s > _rombios_.s
	$(AS86) _rombios_.s -b tmp.bin -u- -w- -g -0 -j -O -l rombios.txt
	-perl ${srcdir}/makesym.perl < rombios.txt > rombios.sym
	mv tmp.bin rombios16.bin
	./biossums rombios16.bin
	@RMCOMMAND@ _rombios_.s

rombios32.bin: rombios32.out rombios.h
	$(OBJCOPY32) -O binary $< $@
	./biossums -pad $@

rombios32.out: rombios32start.o rombios32.o rombios32.ld
	$(LD32) -o $@ -T $(srcdir)/rombios32.ld rombios32start.o rombios32.o

rombios32.o: rombios32.c acpi-dsdt.hex rombios.h
	$(GCC32) -O2 -Wall -c -o $@ $<

ifneq ($(IASL), not_found)
acpi-dsdt.hex: acpi-dsdt.dsl
	cpp -P $< $<.i
	iasl -tc -p $@ $<.i
	rm $<.i
	sed -i -e's/^unsigned/const unsigned/;s/ACPI-DSDT_HEX/ACPI_DSDT_HEX/g;s/acpi-dsdt_aml_code/AmlCode/g' $@
endif

rombios32start.o: rombios32start.S
	$(GCC32) -c -o $@ $<

BIOS-bochs-latest: rombios16.bin rombios32.bin
	cat rombios32.bin rombios16.bin > $@

biossums: biossums.o
