blob: 70c9ed1e44210bbd2b66e43e38050649e10eb291 (
plain) (
tree)
|
|
MAIN_FILE = MemtestEfi
CC = gcc
# Treat all warnings as errors
#CFLAGS = -Werror
CFLAGS += -Wall
# Warnings not covered by Wall
CFLAGS += -Wextra
CFLAGS += -Wshadow
CFLAGS += -Wdouble-promotion
CFLAGS += -Wformat=2 -Wformat-truncation -Wformat-overflow
CFLAGS += -Wundef # for undefined macros
#CFLAGS += -Wno-array-bounds
CFLAGS += -Wconversion -Wno-error=conversion
CFLAGS += -Wpadded -Wno-error=padded
CFLAGS += -Wno-error=unused-parameter
CFLAGS += -fno-builtin
CFLAGS += -ffunction-sections # Each functions gets own section. Unused sections can be culled at a final optimization
# EFI requires -fshort-wchar
CFLAGS += -fshort-wchar
CFLAGS += -fno-common # Disabled the ability for tentative definitions to be merged into a pre-existing definition
CFLAGS += -fno-strict-aliasing
# EFI uses Microsoft ABI so no red zone is defined
CFLAGS += -mno-red-zone
# use %rip-relative addressing wherever possible?? Or not?
CFLAGS += -fpie
#CFLAGS += -fno-pie -no-pie -static
CFLAGS += -fPIC
CFLAGS += -ffunction-sections
CFLAGS += -fdata-sections
CFLAGS += -maccumulate-outgoing-args
CFLAGS += -fno-asynchronous-unwind-tables
# Don't use standard library
CFLAGS += -nostdlib
CFLAGS += -mcmodel=small
#CFLAGS += -fno-stack-protector e
M64=-m64
#-march=x86-64
M32=-m32
M=$(M64)
PREPROCESSOR=-DUEFI -Os \
-D DISABLE_NEW_DEPRECATED_INTERFACES "-DEFIAPI=__attribute__((ms_abi))"
OBJS=Efi_Defs.obj config.o controller.o cpuid.o display.o dmi.o error.o init.o \
lib.o logger.o main.o memory_tables.o memsize.o patn.o pci.o reloc.o \
screen_buffer.o random.o smp.o spd.o test.o vmem.o \
BaseLib.o BaseMemoryLib.o BasePrintLib.o \
UefiDebugLibStdErr.o UefiDevicePathLib2.o UefiLib2.o ApplicationEntryPoint.o \
BaseDebugPrintErrorLevelLib.o UefiMemoryAllocationLib.o BasePcdLibNull.o \
UefiRuntimeServicesTableLib.o UefiBootServicesTableLib.o MemtestEfi.obj
BaseMemoryLib_OBJS=CompareMemWrapper.o CopyMem.o CopyMemWrapper.o IsZeroBufferWrapper.o \
MemLibGeneric.o MemLibGuid.o ScanMem16Wrapper.o ScanMem32Wrapper.o ScanMem64Wrapper.o \
ScanMem8Wrapper.o SetMem.o SetMem16Wrapper.o SetMem32Wrapper.o SetMem64Wrapper.o \
SetMemWrapper.o ZeroMemWrapper.o
UefiDevicePathLib_OBJS=DevicePathFromText.o DevicePathToText.o DevicePathUtilities.o \
DevicePathUtilitiesDxeSmm.o DevicePathUtilitiesStandaloneMm.o UefiDevicePathLib.o \
UefiDevicePathLibOptionalDevicePathProtocol.o
BaseLib_OBJS=ARShiftU64.o BitField.o CheckSum.o CpuDeadLoop.o Cpu.o DivU64x64Remainder.o \
DivU64x32Remainder.o DivU64x32.o DivS64x64Remainder.o FilePaths.o GetPowerOfTwo64.o \
GetPowerOfTwo32.o HighBitSet64.o HighBitSet32.o LongJump.o LRotU64.o LowBitSet64.o \
LowBitSet32.o LRotU32.o LShiftU64.o Math64.o ModU64x32.o MultU64x64.o MultU64x32.o MultS64x64.o \
RRotU32.o RRotU64.o RShiftU64.o SafeString.o String.o SetJump.o SwapBytes64.o SwapBytes32.o \
SwapBytes16.o SwitchStack.o Unaligned.o
LIBRARIES=MemtestEfi.lib
debug: CFLAGS += -g3
debug: CFLAGS += -fstack-usage # emit .su (stack usage) files for each c file you compile
debug: CFLAGS += -Wstack-usage=255
#debug: CFLAGS += -Werror
debug: all
release: #CFLAGS += -flto
release: PREPROCESSOR += -DUSING_LTO
release: all
all: clean MemtestEfi.efi move run clean
$(MAIN_FILE).efi: $(MAIN_FILE).dll
./memtest86+/efi/Include/GenFw -e UEFI_APPLICATION -o $(MAIN_FILE).efi $(MAIN_FILE).dll
#objcopy --add-gnu-debuglink=MemtestEfi.debug MemtestEfi.efi
# gc-sections culls unused sections
$(MAIN_FILE).dll: $(MAIN_FILE).lib
$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) $(LIBRARIES) -o $(MAIN_FILE).dll \
-nostdlib \
-Wl,-n,-q,--gc-sections,--print-gc-sections \
-Wl,--entry,_ModuleEntryPoint \
-Wl,-Map,$(MAIN_FILE).map,--whole-archive \
-Wl,-melf_x86_64,--oformat=elf64-x86-64,-pie \
-Wl,--defsym=PECOFF_HEADER_SIZE=0x228 \
-Wl,--script=memtest86+/efi/Include/GccBase.lds \
-z common-page-size=0x40 \
-u _ModuleEntryPoint \
-DSTRING_ARRAY_NAME=${MAIN_FILE}Strings
objcopy --strip-unneeded -R .eh_frame -v $(MAIN_FILE).dll $(MAIN_FILE).dll
strip -R .strtab MemtestEfi.dll
$(MAIN_FILE).lib: $(OBJS)
gcc-ar crv $(MAIN_FILE).lib $^
#objcopy --only-keep-debug MemtestEfi.lib MemtestEfi.debug
#rm $^
$(MAIN_FILE).obj: $(MAIN_FILE).c
$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -o $(MAIN_FILE).obj \
-MMD -MF $(MAIN_FILE).obj.deps \
-c \
-include memtest86+/efi/Include/Efi_Defs.h \
-DSTRING_ARRAY_NAME=${MAIN_FILE}Strings \
-I . \
-I"memtest86+" \
-I"memtest86+/efi/Include" \
$(MAIN_FILE).c
Efi_Defs.obj: memtest86+/efi/Include/Efi_Defs.c
$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -o $@ $< \
-c \
-I"memtest86+/efi/Include"
%.o: memtest86+/%.c
$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -c -o $@ $< \
-I"memtest86+/efi"
%.o: memtest86+/efi/Include/src/%.c
$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -c -o $@ $< \
-I"memtest86+/efi/Include" \
-I"memtest86+/efi/Include/Library"
%.o: memtest86+/efi/Include/src/UefiLib/%.c
$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -c -o $@ $< \
-I"memtest86+/efi/Include" \
-I"memtest86+/efi/Include/Protocol" \
-I"memtest86+/efi/Include/Guid"
BasePcdLibNull.o: memtest86+/efi/Include/src/PcdLib.c
$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -c -o $@ $< \
-I"memtest86+/efi/Include"
UefiMemoryAllocationLib.o: memtest86+/efi/Include/src/MemoryAllocationLib.c
$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -c -o $@ $< \
-I"memtest86+/efi/Include"
UefiLib2.o: Acpi.o Console.o UefiDriverModel.o UefiLib.o UefiLibPrint.o UefiNotTiano.o
ld -r -o $@ $^
rm $^
%.o: memtest86+/efi/Include/src/UefiDebugLibStdErr/%.c
$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -c -o $@ $< \
-I"memtest86+/efi/Include"
UefiDebugLibStdErr.o: DebugLib.o DebugLibConstructor.o
ld -r -o $@ $^
rm $^
%.o: memtest86+/efi/Include/src/BaseMemoryLib/%.c
$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -c -o $@ $< \
-I"memtest86+/efi/Include"
BaseMemoryLib.o: $(BaseMemoryLib_OBJS)
ld -r -o $@ $^
rm $^
%.o: memtest86+/efi/Include/src/BasePrintLib/%.c
$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -c -o $@ $< \
-I"memtest86+/efi/Include"
BasePrintLib.o: PrintLib.o PrintLibInternal.o
ld -r -o $@ $^
rm $^
%.o: memtest86+/efi/Include/src/UefiDevicePathLib/%.c
$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -c -o $@ $< \
-I"memtest86+/efi/Include"
UefiDevicePathLib2.o: $(UefiDevicePathLib_OBJS)
ld -r -o $@ $^
rm $^
%.o: memtest86+/efi/Include/src/BaseLib/%.c
$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -c -o $@ $< \
-I"memtest86+/efi/Include"
BaseLib.o: $(BaseLib_OBJS)
ld -r -o $@ $^
rm $^
%.o: memtest86+/efi/%.c
$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -c -o $@ $< \
-I"memtest86+" \
-I"memtest86+/efi" \
-I"memtest86+/efi/Include"
clean:
rm -f memtest86+/*.o
rm -f *.o
rm -f MemtestEfi.obj
rm -f MemtestEfi.map
rm -f MemtestEfi.dll
rm -f MemtestEfi.efi
rm -f MemtestEfi.txt
rm -f Efi_Defs.obj
rm -f MemtestEfi.lib
rm -f MemtestEfi.obj.deps
rm -f *.debug
move:
cp MemtestEfi.efi ../test_code/hda-contents
run:
(cd ../test_code; sudo ./run.sh)
|