1## 2## PROJECT: FreeLoader 3## LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) 4## PURPOSE: Build definitions for UEFI 5## COPYRIGHT: Copyright 2023 Justin Miller <justinmiller100@gmail.com> 6## 7 8include_directories(BEFORE 9 ${REACTOS_SOURCE_DIR}/boot/environ/include/efi 10 ${REACTOS_SOURCE_DIR}/boot/freeldr/freeldr 11 ${REACTOS_SOURCE_DIR}/boot/freeldr/freeldr/include 12 ${REACTOS_SOURCE_DIR}/boot/freeldr/freeldr/include/arch/uefi) 13 14list(APPEND UEFILDR_ARC_SOURCE 15 ${FREELDR_ARC_SOURCE} 16 arch/uefi/stubs.c 17 arch/uefi/ueficon.c 18 arch/uefi/uefidisk.c 19 arch/uefi/uefihw.c 20 arch/uefi/uefimem.c 21 arch/uefi/uefisetup.c 22 arch/uefi/uefiutil.c 23 arch/uefi/uefivid.c 24 arch/vgafont.c) 25 26if(ARCH STREQUAL "i386") 27 list(APPEND UEFILDR_ARC_SOURCE 28 arch/i386/i386idt.c) 29 list(APPEND UEFILDR_COMMON_ASM_SOURCE 30 arch/uefi/i386/uefiasm.S 31 arch/i386/i386trap.S) 32elseif(ARCH STREQUAL "amd64") 33 list(APPEND UEFILDR_COMMON_ASM_SOURCE 34 arch/uefi/amd64/uefiasm.S) 35elseif(ARCH STREQUAL "arm") 36 list(APPEND UEFILDR_ARC_SOURCE 37 arch/arm/macharm.c 38 arch/arm/debug.c) 39 #TBD 40elseif(ARCH STREQUAL "arm64") 41 #TBD 42else() 43 #TBD 44endif() 45 46list(APPEND UEFILDR_BOOTMGR_SOURCE 47 ${FREELDR_BOOTMGR_SOURCE} 48 custom.c 49 options.c 50 oslist.c 51) 52 53add_asm_files(uefifreeldr_common_asm ${FREELDR_COMMON_ASM_SOURCE} ${UEFILDR_COMMON_ASM_SOURCE}) 54 55add_library(uefifreeldr_common 56 ${uefifreeldr_common_asm} 57 ${UEFILDR_ARC_SOURCE} 58 ${FREELDR_BOOTLIB_SOURCE} 59 ${UEFILDR_BOOTMGR_SOURCE} 60 ${FREELDR_NTLDR_SOURCE}) 61 62target_compile_definitions(uefifreeldr_common PRIVATE UEFIBOOT) 63 64if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") 65 # Prevent using SSE (no support in freeldr) 66 target_compile_options(uefifreeldr_common PUBLIC -mno-sse) 67endif() 68 69set(PCH_SOURCE 70 ${UEFILDR_ARC_SOURCE} 71 ${FREELDR_BOOTLIB_SOURCE} 72 ${UEFILDR_BOOTMGR_SOURCE} 73 ${FREELDR_NTLDR_SOURCE}) 74 75add_pch(uefifreeldr_common include/arch/uefi/uefildr.h PCH_SOURCE) 76add_dependencies(uefifreeldr_common bugcodes asm xdk) 77 78## GCC builds need this extra thing for some reason... 79if(ARCH STREQUAL "i386" AND NOT MSVC) 80 target_link_libraries(uefifreeldr_common mini_hal) 81endif() 82 83 84spec2def(uefildr.exe freeldr.spec) 85 86list(APPEND UEFILDR_BASE_SOURCE 87 include/arch/uefi/uefildr.h 88 arch/uefi/uefildr.c 89 bootmgr.c 90 ntldr/setupldr.c 91 ntldr/inffile.c 92 ${FREELDR_BASE_SOURCE}) 93 94if(ARCH STREQUAL "i386") 95 # Must be included together with disk/scsiport.c 96 list(APPEND UEFILDR_BASE_SOURCE 97 ${CMAKE_CURRENT_BINARY_DIR}/uefildr.def) 98endif() 99 100add_executable(uefildr ${UEFILDR_BASE_SOURCE}) 101set_target_properties(uefildr PROPERTIES SUFFIX ".efi") 102 103target_compile_definitions(uefildr PRIVATE UEFIBOOT) 104 105# On AMD64 we only map 1GB with freeloader, tell UEFI to keep us low! 106if(ARCH STREQUAL "amd64") 107 set_image_base(uefildr 0x10000) 108endif() 109 110if(MSVC) 111if(NOT ARCH STREQUAL "arm") 112 target_link_options(uefildr PRIVATE /DYNAMICBASE:NO) 113endif() 114 target_link_options(uefildr PRIVATE /NXCOMPAT:NO /ignore:4078 /ignore:4254 /DRIVER) 115 # We don't need hotpatching 116 remove_target_compile_option(uefildr "/hotpatch") 117else() 118 target_link_options(uefildr PRIVATE -Wl,--exclude-all-symbols,--file-alignment,0x200,--section-alignment,0x200) 119 # Strip everything, including rossym data 120 add_custom_command(TARGET uefildr 121 POST_BUILD 122 COMMAND ${CMAKE_STRIP} --remove-section=.rossym $<TARGET_FILE:uefildr> 123 COMMAND ${CMAKE_STRIP} --strip-all $<TARGET_FILE:uefildr>) 124endif() 125 126if(MSVC) 127 set_subsystem(uefildr EFI_APPLICATION) 128else() 129 set_subsystem(uefildr 10) 130endif() 131 132set_entrypoint(uefildr EfiEntry) 133 134if(ARCH STREQUAL "i386") 135 target_link_libraries(uefildr mini_hal) 136endif() 137 138target_link_libraries(uefildr uefifreeldr_common cportlib blcmlib blrtl libcntpr) 139 140# dynamic analysis switches 141if(STACK_PROTECTOR) 142 target_sources(uefildr PRIVATE $<TARGET_OBJECTS:gcc_ssp_nt>) 143endif() 144 145if(RUNTIME_CHECKS) 146 target_link_libraries(uefildr runtmchk) 147endif() 148 149add_dependencies(uefildr xdk) 150