summaryrefslogblamecommitdiffstats
path: root/efi_memtest/Makefile
blob: 2268c5743a4a3d808a7a3f07e70f2a8ab2d2bea3 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12











                                                                                      
                                                       






                       

        



                                                                                
                                                                         
 

                                                                         
 
                                                                                                   
                                                                           


                                                                                            
 

                                     



                                                            
 
                                   
 
                                                                







                                                                                      
                                   

 
                                  
                                                                                               

 
                                        
                                                                  


                                       
                                                   
                                                      
                                               
                                                         


                                                 
                    
                                                                                  
                                        
 


                                                                 



                                                   
                                                                   

                                               
                                                   

                                                 
                         



                                             
                                                             
            



                                            


                                        

                                                          
 
                                   
                                 
                                                          

                                          
 





                                                          


                                                          

                                  
 



                            
                            
                            



                            

 

                                                   
 

                     















 
# TODO Autogen.obj
# Difference *.o *.obj



MAIN_FILE=MemtestEfi

CC=gcc

CFLAGS= -Werror -Wall -fno-builtin -fshort-wchar -fno-common -fno-strict-aliasing -g \
	-Wno-array-bounds -fno-stack-protector -Wno-address -mno-red-zone \
	-fpie -ffunction-sections -fdata-sections -flto -maccumulate-outgoing-args \
	-fno-asynchronous-unwind-tables -nostdlib -fPIC

LINKER=

M64=-m64 -mcmodel=small

M32=-m32

M=$(M64)

PREPROCESSOR=-DUEFI -DUSING_LTO -Os \
	-D DISABLE_NEW_DEPRECATED_INTERFACES "-DEFIAPI=__attribute__((ms_abi))"

INCLUDE_FILES=main cpuid test smp config screen_buffer lib init controller pci \
	spd dmi reloc patn error vmem memsize random logger memory_tables

#ADDITIONAL_HEADER=$(addprefix memtest86+/, defs.h efi/stdin.h io.h \
#	stdint.h stddef.h serial.h msr.h jedec_id.h elf.h efi/main_asm.h)

OBJS=AutoGen.obj main.o display.o test.o smp.o config.o screen_buffer.o lib.o init.o controller.o \
	pci.o spd.o dmi.o reloc.o patn.o error.o vmem.o cpuid.o memsize.o \
	random.o MemtestEfi.obj logger.o memory_tables.o ApplicationEntryPoint.o UefiLib.o \
	UefiRuntimeServicesTableLib.o UefiBootServicesTableLib.o
	#BaseDebugPrintErrorLevelLib.o BaseMemoryLib.o

LIBS_PATH=memtest86+/efi/Include/libs

LIBRARIES=OUTPUT/MemtestEfi.lib $(addprefix $(LIBS_PATH)/, )
#    BasePcdLibNull.lib BasePrintLib.lib  \
#	UefiDebugLibStdErr.lib UefiDevicePathLib.lib  \
#	UefiMemoryAllocationLib.lib)

SRC_PATH=memtest86+/efi/Include/src

EDK_SRC=$(addprefix $(SRC_PATH)/, BaseDebugPrintErrorLevelLib.c)

# STATIC_LIBRARY_FILES= libs/BaseLib.lib
# 	libs/BaseMemoryLib.lib libs/BasePcdLibNull.lib 
# 	libs/BaseDebugPrintErrorLevelLib.lib libs/BasePrintLib.lib
# 	libs/UefiDebugLibStdErr.lib libs/UefiBootServicesTableLib.lib 
# 	libs/UefiMemoryAllocationLib.lib libs/UefiRuntimeServicesTableLib.lib
# 	libs/UefiDevicePathLib.lib libs/UefiApplicationEntryPoint.lib libs/UefiLib.lib

all: clean MemtestEfi.efi move run 


$(MAIN_FILE).efi: $(MAIN_FILE).dll
	./memtest86+/efi/Include/GenFw -e UEFI_APPLICATION -o $(MAIN_FILE).efi $(MAIN_FILE).dll


$(MAIN_FILE).dll: $(MAIN_FILE).lib	
	$(CC) $(CFLAGS)	$(PREPROCESSOR) $(M) -o $(MAIN_FILE).dll \
	-nostdlib \
	-Wl,-n,-q,--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 \
	$(LIBRARIES)
	objcopy --strip-unneeded -R .eh_frame -v $(MAIN_FILE).dll $(MAIN_FILE).dll
	strip -R .strtab MemtestEfi.dll 


#	-Wl,--start-group,@static_library_files.lst,--end-group \

$(MAIN_FILE).lib: $(OBJS)
	gcc-ar crv OUTPUT/$(MAIN_FILE).lib  $(OBJS)

$(MAIN_FILE).obj: $(MAIN_FILE).c
	$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -o $(MAIN_FILE).obj  \
	-MMD -MF OUTPUT/$(MAIN_FILE).obj.deps \
	-c \
	-include memtest86+/efi/Include/AutoGen.h \
	-DSTRING_ARRAY_NAME=${MAIN_FILE}Strings \
	-I . \
	-I"memtest86+"  \
	-I"memtest86+/efi/Include" \
	$(MAIN_FILE).c

AutoGen.obj: memtest86+/efi/Include/AutoGen.c
	$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -o AutoGen.obj \
	-c \
	-I"./" \
	-I"memtest86+/efi/Include/" \
	-I"memtest86+/efi/Include/Uefi" \
	-I"memtest86+/efi/Include/Library" \
	memtest86+/efi/Include/AutoGen.c

%.o: memtest86+/%.c
	$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -c -o $@ $< \
	-I"memtest86+/efi"

%.o: memtest86+/efi/Include/src/%.c
	echo "CREATE EDK OBJECTS"
	$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -c -o $@ $< \
	-I"memtest86+/efi/Include" \
	-I"memtest86+/efi/Include/Library"

UefiLib.o: memtest86+/efi/Include/src/UefiLib/UefiLib.c
	echo "CREATE UefiLib OBJECT"
	$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -c -o $@ $< \
	-I"memtest86+/efi/Include" \
	-I"memtest86+/efi/Include/Protocol"

%.o: memtest86+/efi/%.c
	$(CC) $(CFLAGS) $(PREPROCESSOR) $(M) -c -o $@ $< \
	-I"memtest86+" \
	-I"memtest86+/efi" \
	-I"memtest86+/efi/Include"

clean:
	rm -f OUTPUT/*
	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 AutoGen.obj


move:
	cp MemtestEfi.efi ../test_code/hda-contents

run:
	sudo ./run.sh