summaryrefslogblamecommitdiffstats
path: root/src/arch/i386/Config
blob: 03836c8b5ab6a6e0ded8056d783609bca494d9bb (plain) (tree)
1
2

                  
















                                                                              




































































































                                                                                                                                      














                                                                               
                           









                                                        




                                                          
# -*- makefile -*-

##############################################################################
##############################################################################
#
# IMPORTANT!
# 
# The use of this file to set options that affect only single object
# files is deprecated, because changing anything in this file results
# in a complete rebuild, which is slow.  All options are gradually
# being migrated to config.h, which does not suffer from this problem.
# 
# Only options that affect the entire build (e.g. overriding the $(CC)
# Makefile variable) should be placed in here.
#
##############################################################################
##############################################################################


# Config for i386 Etherboot
#
# Do not delete the tag OptionDescription and /OptionDescription
# It is used to automatically generate the documentation.
#
# @OptionDescrition@
#
#	BIOS interface options:
#
#	-DPCBIOS
#			Compile in support for the normal pcbios
#	-DLINUXBIOS
#			Compile in support for LinuxBIOS
#	-DBBS_BUT_NOT_PNP_COMPLIANT
#			Some BIOSes claim to be PNP but they don't conform
#			to the BBS spec which specifies that ES:DI must
#			point to the string $PnP on entry. This option
#			works around those. This option must be added to
#			LCONFIG.
#	-DNO_DELAYED_INT
#			Take control as soon as BIOS detects the ROM.
#			Normally hooks onto INT18H or INT19H. Use only if you
#			have a very non-conformant BIOS as it bypasses
#			BIOS initialisation of devices. This only works for
#			legacy ROMs, i.e. PCI_PNP_HEADER not defined.
#			This option was formerly called NOINT19H.
#	-DBOOT_INT18H
#			Etherboot normally hooks onto INT19H for legacy ROMs.
#			You can choose to hook onto INT18H (BASIC interpreter
#			entry point) instead. This entry point is used when
#			all boot devices have been exhausted. This option must
#			be added to LCONFIG.
#	-DCONFIG_PCI_DIRECT
#			Define this for PCI BIOSes that do not implement
#			BIOS32 or not correctly. Normally not needed.
#			Only works for BIOSes of a certain era.
#	-DCONFIG_TSC_CURRTICKS
#			Uses the processor time stamp counter instead of reading
#			the BIOS time counter.  This allows Etherboot to work
#			even without a BIOS.  This only works on late model
#			486s and above.
#	-DCONFIG_NO_TIMER2
#			Some systems do not have timer2 implemented.
#			If you have a RTC this will allow you to roughly calibrate
#			it using outb instructions.
#	-DIBM_L40
#			This option uses the 0x92 method of controlling
#			A20 instead of the traditional method of using the
#			keyboard controller. An explanation of A20 is here:
#			http://www.win.tue.nl/~aeb/linux/kbd/A20.html
#			This occurs on MCA, EISA and some embedded boards,
#			and sometimes with the Fast Gate A20 option on some
#			BIOSes.
#			Enable this only if you are sure of what you are doing.
#
#	Extended cpu options

#	-DCONFIG_X86_64	
#			Compile in support for booting x86_64 64bit binaries.
#
#	PXE loader options:
#
#	-DPXELOADER_KEEP_ALL
#			Prevent PXE loader (prefix) from unloading the
#			PXE stack.  You will want to use this if, for
#			example, you are booting via PXE-on-floppy.
#			You may want to use it under certain
#			circumstances when using the Etherboot UNDI
#			driver; these are complex and best practice is
#			not yet established.
#			
#	Obscure options you probably don't need to touch:
#
#	-DIGNORE_E820_MAP
#			Ignore the memory map returned by the E820 BIOS
#			call.  May be necessary on some buggy BIOSes.
#	-DT503_AUI
#			Use AUI by default on 3c503 cards.
#	-DFLATTEN_REAL_MODE
# 			Use 4GB segment limits when calling out to or
#			returning to real-mode code.  This is necessary to
#			work around some buggy code (e.g. OpenBSD's pxeboot)
#			that uses flat real-mode without being sufficiently
#			paranoid about the volatility of its segment limits.

#
# @/OptionDescription@

# BIOS select don't change unless you know what you are doing
CFLAGS+=	-DPCBIOS

# Compile in k8/hammer support
# CFLAGS+=	-DCONFIG_X86_64

# Options to make a version of Etherboot that will work under linuxBIOS.
# CFLAGS+=	-DLINUXBIOS -DCONFIG_TSC_CURRTICKS  -DCONSOLE_SERIAL -DCOMCONSOLE=0x3f8 -DCOMPRESERVE -DCONFIG_PCI_DIRECT -DELF_IMAGE 

# These options affect the loader that is prepended to the Etherboot image
# LCONFIG+=	-DBBS_BUT_NOT_PNP_COMPLIANT
# LCONFIG+=	-DBOOT_INT18H

# Produce code that will work with OpenBSD's pxeboot
# CFLAGS+=	-DFLATTEN_REAL_MODE

CFLAGS+= -fstrength-reduce -fomit-frame-pointer -march=i386
# Squeeze the code in as little space as possible.
# gcc3 needs a different syntax to gcc2 if you want to avoid spurious warnings.
GCC_VERSION	 = $(subst ., ,$(shell $(CC) -dumpversion))
GCC_MAJORVERSION = $(firstword $(GCC_VERSION))
ifeq ($(GCC_MAJORVERSION),2)
CFLAGS+=	-malign-jumps=1 -malign-loops=1 -malign-functions=1
else
CFLAGS+=	-falign-jumps=1 -falign-loops=1 -falign-functions=1
endif
GCC_MINORVERSION = $(word 2, $(GCC_VERSION))
ifneq ($(GCC_MINORVERSION),4)
CFLAGS+=	-march=i386
endif

LDFLAGS+=	-N

ifeq "$(shell uname -s)" "FreeBSD"
CFLAGS+=	-DIMAGE_FREEBSD -DELF_IMAGE -DAOUT_IMAGE
endif

# An alternate location for isolinux.bin can be set here
# ISOLINUX_BIN=/path/to/isolinux.bin

# These seem to have some relevance to compiling on x86_64
# EXTRA_CFLAGS=-m32
# EXTRA_ASFLAGS=--32
# EXTRA_LDFLAGS=-m elf_i386