# -*- 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. # # 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 # this is almost always a win. the kernel uses it, too. CFLAGS+= -mpreferred-stack-boundary=2 # use regparm for all functions - C functions called from assembly (or # vice versa) need __cdecl now CFLAGS+= -mregparm=3 # use -mrtd (same __cdecl requirements as above) CFLAGS+= -mrtd # this is the logical complement to -mregparm=3. # it doesn't currently buy us anything, but if anything ever tries # to return small structures, let's be prepared CFLAGS+= -freg-struct-return LDFLAGS+= -N --no-check-sections 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