X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=boot%2Ffreeldr%2Ffreeldr%2FCMakeLists.txt;h=88c1c2a528c5970188c9ce0823f300b52c778c39;hp=8f48a344b0eb25e2145ba9b8e60b478f1f2eaf08;hb=ed8355222976c1834ba15446782c3f6dfd5ec0a8;hpb=f77f05cd9df0b7d4844d5879e5b1193c6b9e647c diff --git a/boot/freeldr/freeldr/CMakeLists.txt b/boot/freeldr/freeldr/CMakeLists.txt index 8f48a344b0e..88c1c2a528c 100644 --- a/boot/freeldr/freeldr/CMakeLists.txt +++ b/boot/freeldr/freeldr/CMakeLists.txt @@ -1,11 +1,87 @@ if(SEPARATE_DBG) # FIXME: http://sourceware.org/bugzilla/show_bug.cgi?id=11822 - set(CMAKE_LDR_PE_HELPER_CREATE_SHARED_LIBRARY " -o ") + set(CMAKE_LDR_PE_HELPER_LINK_EXECUTABLE " -o ") set(CMAKE_LDR_PE_HELPER_STANDARD_LIBRARIES "-lgcc" CACHE STRING "Standard C Libraries") endif() -spec2def(freeldr.sys freeldr.spec) +if(NOT MSVC) +### +### For GCC +### +function(add_linker_script _target _linker_script_file) + get_filename_component(_file_full_path ${_linker_script_file} ABSOLUTE) + add_target_link_flags(${_target} "-Wl,-T,${_file_full_path}") + + # Unfortunately LINK_DEPENDS is ignored in non-Makefile generators (for now...) + # See also http://www.cmake.org/pipermail/cmake/2010-May/037206.html + add_target_property(${_target} LINK_DEPENDS ${_file_full_path}) +endfunction() + +else() +### +### For MSVC +### +function(add_linker_script _target _linker_script_file) + get_filename_component(_file_full_path ${_linker_script_file} ABSOLUTE) + get_filename_component(_file_name ${_linker_script_file} NAME) + set(_generated_file_path_prefix "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_target}.dir/${_file_name}") + + # Generate the ASM module containing sections specifications and layout. + set(_generated_file "${_generated_file_path_prefix}.S") + add_custom_command( + OUTPUT ${_generated_file} + COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${_file_full_path}" "${_generated_file}" + DEPENDS ${_file_full_path}) + set_source_files_properties(${_generated_file} PROPERTIES LANGUAGE "ASM" GENERATED TRUE) + add_asm_files(freeldr_linker_file ${_generated_file}) + + # Generate the C module containing extra sections specifications and layout, + # as well as comment-type linker #pragma directives. + set(_generated_file "${_generated_file_path_prefix}.c") + add_custom_command( + OUTPUT ${_generated_file} + COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${_file_full_path}" "${_generated_file}" + DEPENDS ${_file_full_path}) + set_source_files_properties(${_generated_file} PROPERTIES LANGUAGE "C" GENERATED TRUE) + list(APPEND freeldr_linker_file ${_generated_file}) + + # Add both files to the sources of the target. + target_sources(${_target} PRIVATE ${freeldr_linker_file}) + + # Create the additional linker response file. + set(_generated_file "${_generated_file_path_prefix}.rsp") + if(USE_CLANG_CL) + set(_no_std_includes_flag "-nostdinc") + else() + set(_no_std_includes_flag "/X") + endif() + add_custom_command( + #OUTPUT ${_generated_file} + TARGET ${_target} PRE_LINK + COMMAND ${CMAKE_C_COMPILER} /nologo ${_no_std_includes_flag} /D__LINKER__ /EP /c "${_file_full_path}" > "${_generated_file}" + DEPENDS ${_file_full_path} + VERBATIM) + set_source_files_properties(${_generated_file} PROPERTIES GENERATED TRUE) + add_target_link_flags(${_target} "@${_generated_file}") + + # Unfortunately LINK_DEPENDS is ignored in non-Makefile generators (for now...) + # See also http://www.cmake.org/pipermail/cmake/2010-May/037206.html + add_target_property(${_target} LINK_DEPENDS ${_generated_file}) +endfunction() + +endif() + + +if(MSVC) + # We don't need hotpatching + replace_compile_flags("/hotpatch" " ") + + # Explicitly use string pooling + add_compile_flags("/GF") +endif() + +spec2def(freeldr_pe.exe freeldr.spec) if(ARCH STREQUAL "i386") CreateBootSectorTarget(frldr16 @@ -21,48 +97,57 @@ endif() include_directories(BEFORE include) include_directories(${REACTOS_SOURCE_DIR}/ntoskrnl/include) -include_directories(${REACTOS_SOURCE_DIR}/lib/cmlib) -include_directories(${REACTOS_SOURCE_DIR}/include/reactos/libs) -include_directories(${REACTOS_SOURCE_DIR}/include/reactos/elf) +include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/cmlib) +include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/libs) +include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/elf) add_definitions(-D_NTHAL_ -D_BLDR_ -D_NTSYSTEM_) -if((ARCH STREQUAL "arm") AND (SARCH STREQUAL "omap-zoom2")) - add_definitions(-D_ZOOM2_) -endif() - -list(APPEND FREELDR_COMMON_SOURCE - cmdline.c - debug.c - linuxboot.c +list(APPEND FREELDR_BOOTLIB_SOURCE + lib/debug.c + lib/peloader.c + lib/comm/rs232.c + ## add KD support + lib/fs/btrfs.c + lib/fs/ext2.c + lib/fs/fat.c + lib/fs/fs.c + lib/fs/iso.c + lib/fs/ntfs.c + lib/inifile/ini_init.c + lib/inifile/inifile.c + lib/inifile/parse.c + lib/mm/meminit.c + lib/mm/mm.c + lib/mm/heap.c) + +list(APPEND FREELDR_NTLDR_SOURCE + ntldr/conversion.c + ntldr/registry.c + ntldr/winldr.c + ntldr/wlmemory.c + ntldr/wlregistry.c) + +list(APPEND FREELDR_ARC_SOURCE + arcname.c machine.c - options.c - oslist.c - version.c - arcemul/time.c + arch/archwsup.c cache/blocklist.c cache/cache.c - comm/rs232.c disk/disk.c disk/partition.c - disk/ramdisk.c + disk/ramdisk.c) #disk/scsiport.c - fs/ext2.c - fs/fat.c - fs/fs.c - fs/iso.c - fs/ntfs.c - fs/pxe.c - inifile/ini_init.c - inifile/inifile.c - inifile/parse.c - mm/meminit.c - mm/mm.c - mm/heap.c - reactos/registry.c - reactos/arcname.c - reactos/archwsup.c - reactos/binhive.c + +list(APPEND FREELDR_BOOTMGR_SOURCE + include/freeldr.h + cmdline.c + custom.c + linuxboot.c + miscboot.c + options.c + oslist.c + version.c ui/directui.c ui/gui.c ui/minitui.c @@ -72,37 +157,37 @@ list(APPEND FREELDR_COMMON_SOURCE ui/ui.c video/fade.c video/palette.c - video/video.c - windows/conversion.c - windows/peloader.c - windows/winldr.c - windows/wlmemory.c - windows/wlregistry.c) + video/video.c) if(ARCH STREQUAL "i386") - list(APPEND FREELDR_COMMON_SOURCE - arch/i386/archmach.c - arch/i386/custom.c - arch/i386/drivemap.c + list(APPEND FREELDR_COMMON_ASM_SOURCE arch/i386/entry.S + arch/i386/int386.S + arch/i386/pnpbios.S + arch/i386/i386trap.S + arch/i386/linux.S + arch/i386/mb.S) + + list(APPEND FREELDR_NTLDR_SOURCE + ntldr/arch/i386/winldr.c + ntldr/headless.c) + + list(APPEND FREELDR_ARC_SOURCE + lib/fs/pxe.c arch/i386/halstub.c + arch/i386/ntoskrnl.c + arch/i386/archmach.c + arch/i386/drivemap.c arch/i386/hardware.c arch/i386/hwacpi.c arch/i386/hwapm.c arch/i386/hwdisk.c arch/i386/hwpci.c arch/i386/i386bug.c - arch/i386/i386disk.c arch/i386/i386idt.c - arch/i386/i386pnp.S arch/i386/i386rtl.c - arch/i386/i386trap.S arch/i386/i386vid.c - arch/i386/linux.S arch/i386/machpc.c - arch/i386/mb.S - arch/i386/miscboot.c - arch/i386/ntoskrnl.c arch/i386/pccons.c arch/i386/pcdisk.c arch/i386/pcmem.c @@ -112,81 +197,125 @@ if(ARCH STREQUAL "i386") arch/i386/xboxcons.c arch/i386/xboxdisk.c arch/i386/xboxfont.c - arch/i386/xboxhw.c arch/i386/xboxi2c.c arch/i386/xboxmem.c arch/i386/xboxrtc.c arch/i386/xboxvideo.c - arch/i386/winldr.c - windows/headless.c disk/scsiport.c) if(NOT MSVC) - list(APPEND FREELDR_COMMON_SOURCE - arch/i386/drvmap.S) + list(APPEND FREELDR_COMMON_ASM_SOURCE arch/i386/drvmap.S) endif() + elseif(ARCH STREQUAL "amd64") - list(APPEND FREELDR_COMMON_SOURCE + list(APPEND FREELDR_COMMON_ASM_SOURCE arch/amd64/entry.S arch/amd64/int386.S - arch/amd64/pnpbios.S + arch/amd64/pnpbios.S) + + list(APPEND FREELDR_NTLDR_SOURCE + ntldr/arch/amd64/winldr.c) + + list(APPEND FREELDR_ARC_SOURCE + lib/fs/pxe.c + arch/i386/ntoskrnl.c + arch/i386/drivemap.c arch/i386/hardware.c arch/i386/hwacpi.c arch/i386/hwapm.c arch/i386/hwdisk.c arch/i386/hwpci.c + arch/i386/i386bug.c arch/i386/i386rtl.c - arch/i386/i386disk.c arch/i386/i386vid.c arch/i386/machpc.c - arch/i386/ntoskrnl.c arch/i386/pccons.c arch/i386/pcdisk.c arch/i386/pcmem.c arch/i386/pcrtc.c - arch/i386/pcvideo.c - arch/amd64/winldr.c) + arch/i386/pcvideo.c) + +elseif(ARCH STREQUAL "arm") + list(APPEND FREELDR_COMMON_ASM_SOURCE + arch/arm/boot.S) + + list(APPEND FREELDR_NTLDR_SOURCE + ntldr/arch/arm/winldr.c) + + list(APPEND FREELDR_ARC_SOURCE + arch/arm/entry.c + arch/arm/macharm.c) else() #TBD endif() -if((NOT MSVC) AND (CMAKE_VERSION VERSION_GREATER 2.8.7)) - add_library(freeldr_common OBJECT ${FREELDR_COMMON_SOURCE}) -else() - add_library(freeldr_common ${FREELDR_COMMON_SOURCE}) +add_asm_files(freeldr_common_asm ${FREELDR_COMMON_ASM_SOURCE}) + +add_library(freeldr_common + ${freeldr_common_asm} + ${FREELDR_BOOTLIB_SOURCE} + ${FREELDR_ARC_SOURCE} + ${FREELDR_NTLDR_SOURCE} + ${FREELDR_BOOTMGR_SOURCE}) + +if(USE_CLANG_CL) + # We need to reduce the binary size + add_target_compile_flags(freeldr_common "/Os") endif() -add_dependencies(freeldr_common bugcodes) + +set(PCH_SOURCE + ${FREELDR_BOOTLIB_SOURCE} + ${FREELDR_ARC_SOURCE} + ${FREELDR_NTLDR_SOURCE} + ${FREELDR_BOOTMGR_SOURCE}) + +add_pch(freeldr_common include/freeldr.h PCH_SOURCE) +add_dependencies(freeldr_common bugcodes asm xdk) if(ARCH STREQUAL "i386" AND NOT MSVC) list(APPEND FREELDR_BASE_SOURCE arch/i386/multiboot.S) +## GCC builds need this extra thing for some reason... + target_link_libraries(freeldr_common mini_hal) endif() list(APPEND FREELDR_BASE_SOURCE bootmgr.c # This file is compiled with custom definitions freeldr.c - rtl/libsupp.c) + ntldr/setupldr.c ## Strangely enough this file is needed in GCC builds + ## even if ${FREELDR_NTLDR_SOURCE} is not added, + ## otherwise we get linking errors with Rtl**Bitmap** APIs. + ## Do not happen on MSVC builds however... + lib/inffile/inffile.c + lib/rtl/libsupp.c) -if(NOT MSVC) - list(APPEND FREELDR_BASE_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/freeldr.def) +if(ARCH STREQUAL "i386") + # Must be included together with disk/scsiport.c + list(APPEND FREELDR_BASE_SOURCE + ${CMAKE_CURRENT_BINARY_DIR}/freeldr_pe.def) endif() -if((NOT MSVC) AND (CMAKE_VERSION VERSION_GREATER 2.8.7)) - add_library(freeldr_pe SHARED $ ${FREELDR_BASE_SOURCE}) - add_library(freeldr_pe_dbg SHARED EXCLUDE_FROM_ALL $ ${FREELDR_BASE_SOURCE}) - if(SEPARATE_DBG) - set_target_properties(freeldr_pe PROPERTIES LINKER_LANGUAGE LDR_PE_HELPER) - set_target_properties(freeldr_pe_dbg PROPERTIES LINKER_LANGUAGE LDR_PE_HELPER) - endif() -else() - add_library(freeldr_pe SHARED ${FREELDR_BASE_SOURCE}) - add_library(freeldr_pe_dbg SHARED EXCLUDE_FROM_ALL ${FREELDR_BASE_SOURCE}) +add_executable(freeldr_pe ${FREELDR_BASE_SOURCE}) +add_executable(freeldr_pe_dbg EXCLUDE_FROM_ALL ${FREELDR_BASE_SOURCE}) + +if(NOT MSVC AND SEPARATE_DBG) + set_target_properties(freeldr_pe PROPERTIES LINKER_LANGUAGE LDR_PE_HELPER) + set_target_properties(freeldr_pe_dbg PROPERTIES LINKER_LANGUAGE LDR_PE_HELPER) endif() -if(NOT MSVC) - add_target_link_flags(freeldr_pe "-Wl,--strip-all,--exclude-all-symbols,--file-alignment,0x1000,-T,${CMAKE_CURRENT_SOURCE_DIR}/freeldr_i386.lds") - add_target_link_flags(freeldr_pe_dbg "-Wl,--exclude-all-symbols,--file-alignment,0x1000,-T,${CMAKE_CURRENT_SOURCE_DIR}/freeldr_i386.lds") +if(MSVC) + if(ARCH STREQUAL "arm") + add_target_link_flags(freeldr_pe "/ignore:4078 /ignore:4254 /DRIVER") + add_target_link_flags(freeldr_pe_dbg "/ignore:4078 /ignore:4254 /DRIVER") + else() + add_target_link_flags(freeldr_pe "/ignore:4078 /ignore:4254 /DRIVER /FIXED /FILEALIGN:0x200 /ALIGN:0x200") + add_linker_script(freeldr_pe freeldr_i386.msvc.lds) + add_target_link_flags(freeldr_pe_dbg "/ignore:4078 /ignore:4254 /DRIVER /FIXED /FILEALIGN:0x200 /ALIGN:0x200") + add_linker_script(freeldr_pe_dbg freeldr_i386.msvc.lds) + endif() else() - add_target_link_flags(freeldr_pe "/ignore:4078 /ignore:4254 /DRIVER /FIXED /ALIGN:0x400 /SECTION:.text,ERW /SECTION:.data,RW /MERGE:.text16=.text /MERGE:.data=.text /MERGE:.rdata=.text /MERGE:.bss=.text /SUBSYSTEM:BOOT_APPLICATION") - add_target_link_flags(freeldr_pe_dbg "/ignore:4078 /ignore:4254 /DRIVER /FIXED /ALIGN:0x400 /SECTION:.text,ERW /SECTION:.data,RW /MERGE:.text16=.text /MERGE:.data=.text /MERGE:.rdata=.text /MERGE:.bss=.text /SUBSYSTEM:BOOT_APPLICATION") + add_target_link_flags(freeldr_pe "-Wl,--strip-all,--exclude-all-symbols,--file-alignment,0x200,--section-alignment,0x200") + add_linker_script(freeldr_pe freeldr_i386.lds) + add_target_link_flags(freeldr_pe_dbg "-Wl,--exclude-all-symbols,--file-alignment,0x200,--section-alignment,0x200") + add_linker_script(freeldr_pe_dbg freeldr_i386.lds) endif() set_image_base(freeldr_pe 0x10000) @@ -202,88 +331,43 @@ if(ARCH STREQUAL "i386") target_link_libraries(freeldr_pe_dbg mini_hal) endif() -if(MSVC OR NOT CMAKE_VERSION VERSION_GREATER 2.8.7) - target_link_libraries(freeldr_pe freeldr_common) - target_link_libraries(freeldr_pe_dbg freeldr_common) -endif() +target_link_libraries(freeldr_pe freeldr_common cportlib cmlib rtl libcntpr) +target_link_libraries(freeldr_pe_dbg freeldr_common cportlib cmlib rtl libcntpr) -target_link_libraries(freeldr_pe cportlib rossym cmlib rtl libcntpr) -target_link_libraries(freeldr_pe_dbg cportlib rossym cmlib rtl libcntpr) - -# add_pch(freeldr_pe include/freeldr.h) +if(STACK_PROTECTOR) + target_link_libraries(freeldr_pe gcc_ssp) + target_link_libraries(freeldr_pe_dbg gcc_ssp) +elseif(RUNTIME_CHECKS) + target_link_libraries(freeldr_pe runtmchk) + target_link_libraries(freeldr_pe_dbg runtmchk) + add_target_link_flags(freeldr_pe "/MERGE:.rtc=.text") +endif() add_dependencies(freeldr_pe asm) add_dependencies(freeldr_pe_dbg asm) -concatenate_files( - ${CMAKE_CURRENT_BINARY_DIR}/frldr16.bin - freeldr_pe - ${CMAKE_CURRENT_BINARY_DIR}/freeldr.sys) - -add_custom_target(freeldr ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/freeldr.sys) - -# rename freeldr on livecd to setupldr.sys because isoboot.bin looks for setupldr.sys -add_cd_file(TARGET freeldr FILE ${CMAKE_CURRENT_BINARY_DIR}/freeldr.sys DESTINATION loader NO_CAB FOR bootcd regtest) -add_cd_file(TARGET freeldr FILE ${CMAKE_CURRENT_BINARY_DIR}/freeldr.sys DESTINATION loader NO_CAB FOR livecd NAME_ON_CD setupldr.sys) - -list(APPEND SETUPLDR_SOURCE - inffile/inffile.c) - -if(ARCH STREQUAL "i386" OR ARCH STREQUAL "amd64") - list(APPEND SETUPLDR_SOURCE windows/setupldr.c) -endif() - -if((NOT MSVC) AND (CMAKE_VERSION VERSION_GREATER 2.8.7)) - add_library(setupldr_pe SHARED $ ${FREELDR_BASE_SOURCE} ${SETUPLDR_SOURCE}) - add_library(setupldr_pe_dbg SHARED EXCLUDE_FROM_ALL $ ${FREELDR_BASE_SOURCE} ${SETUPLDR_SOURCE}) - if(SEPARATE_DBG) - set_target_properties(setupldr_pe PROPERTIES LINKER_LANGUAGE LDR_PE_HELPER) - set_target_properties(setupldr_pe_dbg PROPERTIES LINKER_LANGUAGE LDR_PE_HELPER) - endif() -else() - add_library(setupldr_pe SHARED ${FREELDR_BASE_SOURCE} ${SETUPLDR_SOURCE}) - add_library(setupldr_pe_dbg SHARED EXCLUDE_FROM_ALL ${FREELDR_BASE_SOURCE} ${SETUPLDR_SOURCE}) -endif() - -if(NOT MSVC) - add_target_link_flags(setupldr_pe "-Wl,--strip-all,--exclude-all-symbols,--file-alignment,0x1000,-T,${CMAKE_CURRENT_SOURCE_DIR}/freeldr_i386.lds") - add_target_link_flags(setupldr_pe_dbg "-Wl,--exclude-all-symbols,--file-alignment,0x1000,-T,${CMAKE_CURRENT_SOURCE_DIR}/freeldr_i386.lds") +if(NOT ARCH STREQUAL "arm") + concatenate_files( + ${CMAKE_CURRENT_BINARY_DIR}/freeldr.sys + ${CMAKE_CURRENT_BINARY_DIR}/frldr16.bin + ${CMAKE_CURRENT_BINARY_DIR}/$) + add_custom_target(freeldr ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/freeldr.sys) else() - add_target_link_flags(setupldr_pe "/ignore:4078 /ignore:4254 /DRIVER /FIXED /ALIGN:0x400 /SECTION:.text,ERW /SECTION:.data,RW /MERGE:.text16=.text /MERGE:.data=.text /MERGE:.rdata=.text /MERGE:.bss=.text /SUBSYSTEM:BOOT_APPLICATION") - add_target_link_flags(setupldr_pe_dbg "/ignore:4078 /ignore:4254 /DRIVER /FIXED /ALIGN:0x400 /SECTION:.text,ERW /SECTION:.data,RW /MERGE:.text16=.text /MERGE:.data=.text /MERGE:.rdata=.text /MERGE:.bss=.text /SUBSYSTEM:BOOT_APPLICATION") + add_custom_target(freeldr ALL DEPENDS freeldr_pe) endif() -add_target_compile_definitions(setupldr_pe FREELDR_REACTOS_SETUP) -add_target_compile_definitions(setupldr_pe_dbg FREELDR_REACTOS_SETUP) - -set_image_base(setupldr_pe 0x10000) -set_subsystem(setupldr_pe native) -set_entrypoint(setupldr_pe RealEntryPoint) - -set_image_base(setupldr_pe_dbg 0x10000) -set_subsystem(setupldr_pe_dbg native) -set_entrypoint(setupldr_pe_dbg RealEntryPoint) - -if(ARCH STREQUAL "i386") - target_link_libraries(setupldr_pe mini_hal) - target_link_libraries(setupldr_pe_dbg mini_hal) -endif() +# Rename freeldr on livecd to setupldr.sys because isoboot.bin looks for setupldr.sys +add_cd_file(TARGET freeldr FILE ${CMAKE_CURRENT_BINARY_DIR}/freeldr.sys DESTINATION loader NO_CAB FOR bootcd regtest) +add_cd_file(TARGET freeldr FILE ${CMAKE_CURRENT_BINARY_DIR}/freeldr.sys DESTINATION loader NO_CAB NOT_IN_HYBRIDCD FOR livecd hybridcd NAME_ON_CD setupldr.sys) -if(MSVC OR (NOT CMAKE_VERSION VERSION_GREATER 2.8.7)) - target_link_libraries(setupldr_pe freeldr_common) - target_link_libraries(setupldr_pe_dbg freeldr_common) +if(NOT ARCH STREQUAL "arm") + concatenate_files( + ${CMAKE_CURRENT_BINARY_DIR}/setupldr.sys + ${CMAKE_CURRENT_BINARY_DIR}/frldr16.bin + ${CMAKE_CURRENT_BINARY_DIR}/$) + add_custom_target(setupldr ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/setupldr.sys) +else() + add_custom_target(setupldr ALL DEPENDS freeldr_pe) endif() -target_link_libraries(setupldr_pe cportlib rossym cmlib rtl libcntpr) -target_link_libraries(setupldr_pe_dbg cportlib rossym cmlib rtl libcntpr) - -add_dependencies(setupldr_pe asm) -add_dependencies(setupldr_pe_dbg asm) - -concatenate_files( - ${CMAKE_CURRENT_BINARY_DIR}/frldr16.bin - setupldr_pe - ${CMAKE_CURRENT_BINARY_DIR}/setupldr.sys) - -add_custom_target(setupldr ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/setupldr.sys) add_cd_file(TARGET setupldr FILE ${CMAKE_CURRENT_BINARY_DIR}/setupldr.sys DESTINATION loader NO_CAB FOR bootcd regtest)