reactos/boot/CMakeLists.txt
Timo Kreuzer 3ebe2aa8f7 [FREELDR]
Add a new file realmode.S for MSVC currently only containing some stubs to resolve references. The 16 bit code needs some work to be compilable with ML.
Delete some amd64 files that only duplicated x86 16 bit code. Remove unused _alloca.S. Improve freeldr rules, add some experimental linking flags for MSVC, it links with a few warnings.

svn path=/branches/cmake-bringup/; revision=49596
2010-11-15 19:44:48 +00:00

262 lines
9.6 KiB
CMake

CreateBootSectorTarget(dosmbr ${CMAKE_CURRENT_SOURCE_DIR}/freeldr/bootsect/dosmbr.asm ${CMAKE_CURRENT_BINARY_DIR}/freeldr/bootsect/dosmbr.bin)
CreateBootSectorTarget(ext2 ${CMAKE_CURRENT_SOURCE_DIR}/freeldr/bootsect/ext2.asm ${CMAKE_CURRENT_BINARY_DIR}/freeldr/bootsect/ext2.bin)
CreateBootSectorTarget(fat32 ${CMAKE_CURRENT_SOURCE_DIR}/freeldr/bootsect/fat32.asm ${CMAKE_CURRENT_BINARY_DIR}/freeldr/bootsect/fat32.bin)
CreateBootSectorTarget(fat ${CMAKE_CURRENT_SOURCE_DIR}/freeldr/bootsect/fat.asm ${CMAKE_CURRENT_BINARY_DIR}/freeldr/bootsect/fat.bin)
CreateBootSectorTarget(isoboot ${CMAKE_CURRENT_SOURCE_DIR}/freeldr/bootsect/isoboot.asm ${CMAKE_CURRENT_BINARY_DIR}/freeldr/bootsect/isoboot.bin)
CreateBootSectorTarget(isobtrt ${CMAKE_CURRENT_SOURCE_DIR}/freeldr/bootsect/isobtrt.asm ${CMAKE_CURRENT_BINARY_DIR}/freeldr/bootsect/isobtrt.bin)
include_directories(BEFORE freeldr/freeldr/include)
include_directories(${REACTOS_SOURCE_DIR}/ntoskrnl/include)
if(ARCH MATCHES i386)
if(MSVC)
list(APPEND FREELDR_BASE64K_SOURCE
freeldr/freeldr/arch/i386/realmode.S)
else()
list(APPEND FREELDR_STARTUP_SOURCE
freeldr/freeldr/arch/i386/fathelp.S
freeldr/freeldr/arch/i386/arch.S)
endif()
elseif(ARCH MATCHES amd64)
list(APPEND FREELDR_STARTUP_SOURCE
freeldr/freeldr/arch/i386/fathelp.S
freeldr/freeldr/arch/amd64/arch.S)
endif(ARCH MATCHES i386)
if(ARCH MATCHES i386)
if(NOT MSVC)
list(APPEND FREELDR_BASE64K_SOURCE
freeldr/freeldr/arch/i386/boot.S
freeldr/freeldr/arch/i386/drvmap.S
freeldr/freeldr/arch/i386/i386cpu.S
freeldr/freeldr/arch/i386/i386idt.S
freeldr/freeldr/arch/i386/i386pnp.S
freeldr/freeldr/arch/i386/i386trap.S
freeldr/freeldr/arch/i386/int386.S
freeldr/freeldr/arch/i386/linux.S
freeldr/freeldr/arch/i386/mb.S
freeldr/freeldr/arch/i386/i386bug.c)
endif()
elseif(ARCH MATCHES amd64)
list(APPEND FREELDR_BASE64K_SOURCE
freeldr/freeldr/arch/i386/drvmap.S
freeldr/freeldr/arch/i386/i386cpu.S
freeldr/freeldr/arch/i386/i386idt.S
freeldr/freeldr/arch/i386/i386trap.S
freeldr/freeldr/arch/amd64/mb.S)
endif(ARCH MATCHES i386)
set_source_files_properties(${FREELDR_BASE64K_SOURCE} PROPERTIES COMPILE_DEFINITIONS "_NTHAL_")
include_directories(${REACTOS_SOURCE_DIR}/lib/cmlib)
list(APPEND FREELDR_BASE_SOURCE
freeldr/freeldr/arcemul/mm.c
freeldr/freeldr/arcemul/time.c
freeldr/freeldr/cache/blocklist.c
freeldr/freeldr/cache/cache.c
freeldr/freeldr/comm/rs232.c
freeldr/freeldr/disk/disk.c
freeldr/freeldr/disk/partition.c
freeldr/freeldr/disk/ramdisk.c
freeldr/freeldr/fs/ext2.c
freeldr/freeldr/fs/fat.c
freeldr/freeldr/fs/fs.c
freeldr/freeldr/fs/iso.c
freeldr/freeldr/fs/ntfs.c
freeldr/freeldr/inifile/ini_init.c
freeldr/freeldr/inifile/inifile.c
freeldr/freeldr/inifile/parse.c
freeldr/freeldr/mm/meminit.c
freeldr/freeldr/mm/mm.c
freeldr/freeldr/reactos/registry.c
freeldr/freeldr/reactos/arcname.c
freeldr/freeldr/reactos/archwsup.c
freeldr/freeldr/reactos/binhive.c
freeldr/freeldr/reactos/reactos.c
freeldr/freeldr/reactos/imageldr.c
freeldr/freeldr/rtl/bget.c
freeldr/freeldr/rtl/libsupp.c
freeldr/freeldr/ui/directui.c
freeldr/freeldr/ui/gui.c
freeldr/freeldr/ui/minitui.c
freeldr/freeldr/ui/noui.c
freeldr/freeldr/ui/tui.c
freeldr/freeldr/ui/tuimenu.c
freeldr/freeldr/ui/ui.c
freeldr/freeldr/video/fade.c
freeldr/freeldr/video/palette.c
freeldr/freeldr/video/video.c
freeldr/freeldr/windows/conversion.c
freeldr/freeldr/windows/headless.c
freeldr/freeldr/windows/peloader.c
freeldr/freeldr/windows/winldr.c
freeldr/freeldr/windows/wlmemory.c
freeldr/freeldr/windows/wlregistry.c
freeldr/freeldr/freeldr.c
freeldr/freeldr/debug.c
freeldr/freeldr/version.c
freeldr/freeldr/cmdline.c
freeldr/freeldr/machine.c
freeldr/freeldr/options.c
freeldr/freeldr/linuxboot.c
freeldr/freeldr/oslist.c)
if(ARCH MATCHES i386)
list(APPEND FREELDR_BASE_SOURCE freeldr/freeldr/disk/scsiport.c)
endif(ARCH MATCHES i386)
set_source_files_properties(${FREELDR_BASE_SOURCE} PROPERTIES COMPILE_DEFINITIONS "_NTHAL_;_BLDR_;_NTSYSTEM_")
include_directories(${REACTOS_SOURCE_DIR}/include/reactos/libs)
include_directories(${REACTOS_SOURCE_DIR}/include/reactos/elf)
if(ARCH MATCHES i386)
list(APPEND FREELDR_ARCH_SOURCE
freeldr/freeldr/arch/i386/archmach.c
freeldr/freeldr/arch/i386/custom.c
freeldr/freeldr/arch/i386/drivemap.c
freeldr/freeldr/arch/i386/halstub.c
freeldr/freeldr/arch/i386/hardware.c
freeldr/freeldr/arch/i386/hwacpi.c
freeldr/freeldr/arch/i386/hwapm.c
freeldr/freeldr/arch/i386/hwpci.c
freeldr/freeldr/arch/i386/i386disk.c
freeldr/freeldr/arch/i386/i386rtl.c
freeldr/freeldr/arch/i386/i386vid.c
freeldr/freeldr/arch/i386/loader.c
freeldr/freeldr/arch/i386/machpc.c
freeldr/freeldr/arch/i386/miscboot.c
freeldr/freeldr/arch/i386/ntoskrnl.c
freeldr/freeldr/arch/i386/pccons.c
freeldr/freeldr/arch/i386/pcdisk.c
freeldr/freeldr/arch/i386/pcmem.c
freeldr/freeldr/arch/i386/pcrtc.c
freeldr/freeldr/arch/i386/pcvideo.c
freeldr/freeldr/arch/i386/machxbox.c
freeldr/freeldr/arch/i386/xboxcons.c
freeldr/freeldr/arch/i386/xboxdisk.c
freeldr/freeldr/arch/i386/xboxfont.c
freeldr/freeldr/arch/i386/xboxhw.c
freeldr/freeldr/arch/i386/xboxi2c.c
freeldr/freeldr/arch/i386/xboxmem.c
freeldr/freeldr/arch/i386/xboxrtc.c
freeldr/freeldr/arch/i386/xboxvideo.c
freeldr/freeldr/windows/i386/ntsetup.c
freeldr/freeldr/windows/i386/wlmemory.c)
else()
#TBD
endif(ARCH MATCHES i386)
set_source_files_properties(${FREELDR_ARCH_SOURCE} PROPERTIES COMPILE_DEFINITIONS "_NTHAL_;_BLDR_;_NTSYSTEM_")
list(APPEND SETUPLDR_MAIN_SOURCE
freeldr/freeldr/bootmgr.c
freeldr/freeldr/inffile/inffile.c
freeldr/freeldr/reactos/setupldr.c)
if(ARCH MATCHES i386)
list(APPEND SETUPLDR_MAIN_SOURCE freeldr/freeldr/windows/setupldr2.c)
elseif(ARCH MATCHES amd64)
list(APPEND SETUPLDR_MAIN_SOURCE freeldr/freeldr/windows/setupldr2.c)
endif(ARCH MATCHES i386)
set_source_files_properties(${SETUPLDR_MAIN_SOURCE} PROPERTIES COMPILE_FLAGS "-ffreestanding -fno-builtin -fno-inline -fno-zero-initialized-in-bss")
list(APPEND FREELDR_SOURCE
freeldr/freeldr/bootmgr.c
${FREELDR_STARTUP_SOURCE}
${FREELDR_BASE64K_SOURCE}
${FREELDR_BASE_SOURCE}
${FREELDR_ARCH_SOURCE})
add_library(freeldr SHARED
${CMAKE_CURRENT_BINARY_DIR}/freeldr_freeldr.h.gch
${FREELDR_SOURCE})
if(NOT MSVC)
set_target_properties(freeldr PROPERTIES LINK_FLAGS "-Wl,--strip-all -Wl,--exclude-all-symbols -Wl,--file-alignment,0x1000 -Wl,-T,${REACTOS_SOURCE_DIR}/global.lds" SUFFIX ".sys")
set_image_base(freeldr 0x8000)
else()
set_target_properties(freeldr PROPERTIES LINK_FLAGS "/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" SUFFIX ".sys")
set_image_base(freeldr 0x10000)
endif()
set_subsystem(freeldr native)
set_entrypoint(freeldr mainCRTStartup)
if(ARCH MATCHES i386)
target_link_libraries(freeldr mini_hal)
endif(ARCH MATCHES i386)
target_link_libraries(freeldr
cportlib
rossym
cmlib
rtl
libcntpr)
add_pch(freeldr ${CMAKE_CURRENT_SOURCE_DIR}/freeldr/freeldr/include/freeldr.h ${FREELDR_SOURCE})
add_dependencies(freeldr ks386)
list(APPEND SETUPLDR_SOURCE
${FREELDR_STARTUP_SOURCE}
${FREELDR_BASE64K_SOURCE}
${FREELDR_BASE_SOURCE}
${FREELDR_ARCH_SOURCE}
${SETUPLDR_MAIN_SOURCE})
add_library(setupldr SHARED ${SETUPLDR_SOURCE})
if(NOT MSVC)
set_target_properties(setupldr PROPERTIES LINK_FLAGS "-Wl,--strip-all -Wl,--exclude-all-symbols -Wl,--file-alignment,0x1000 -Wl,-T,${REACTOS_SOURCE_DIR}/global.lds" SUFFIX ".sys" COMPILE_DEFINITIONS "FREELDR_REACTOS_SETUP")
set_image_base(setupldr 0x8000)
else()
set_target_properties(setupldr PROPERTIES LINK_FLAGS "/SECTION:.text,ERWP,ALIGN=0x1000" SUFFIX ".sys" COMPILE_DEFINITIONS "FREELDR_REACTOS_SETUP")
endif()
set_subsystem(setupldr native)
set_entrypoint(freeldr mainCRTStartup)
if(ARCH MATCHES i386)
target_link_libraries(setupldr mini_hal)
endif(ARCH MATCHES i386)
target_link_libraries(setupldr
cportlib
rossym
cmlib
rtl
libcntpr)
add_dependencies(setupldr ks386)
# Bootcd files
add_minicd_target(setupldr loader setupldr.sys)
add_minicd_target(freeldr loader freeldr.sys)
add_minicd(${CMAKE_CURRENT_SOURCE_DIR}/bootdata/txtsetup.sif reactos txtsetup.sif)
add_minicd(${CMAKE_CURRENT_SOURCE_DIR}/bootdata/bootcd.ini "" freeldr.ini)
add_minicd(${CMAKE_CURRENT_SOURCE_DIR}/bootdata/hivecls_${ARCH}.inf reactos hivecls.inf)
add_minicd(${CMAKE_CURRENT_SOURCE_DIR}/bootdata/hivedef_${ARCH}.inf reactos hivedef.inf)
add_minicd(${CMAKE_CURRENT_SOURCE_DIR}/bootdata/hivesft_${ARCH}.inf reactos hivesft.inf)
add_minicd(${CMAKE_CURRENT_SOURCE_DIR}/bootdata/hivesys_${ARCH}.inf reactos hivesys.inf)
add_minicd(${CMAKE_CURRENT_SOURCE_DIR}/bootdata/autorun.inf "" autorun.inf)
add_minicd(${CMAKE_CURRENT_SOURCE_DIR}/bootdata/icon.ico "" icon.ico)
add_minicd(${CMAKE_CURRENT_SOURCE_DIR}/bootdata/readme.txt "" readme.txt)
# Livecd files
list(APPEND LIVECD_HIVES
${CMAKE_CURRENT_SOURCE_DIR}/bootdata/livecd.inf
${CMAKE_CURRENT_SOURCE_DIR}/bootdata/hiveinst_${ARCH}.inf)
add_custom_command(
OUTPUT ${LIVECD_DIR}/reactos/system32/config/sam
COMMAND native-mkhive ${CMAKE_CURRENT_SOURCE_DIR}/bootdata ${LIVECD_DIR}/reactos/system32/config ${ARCH} ${LIVECD_HIVES}
DEPENDS native-mkhive)
add_custom_target(livecd_hives DEPENDS ${LIVECD_DIR}/reactos/system32/config/sam)
add_livecd_target(setupldr loader)
add_livecd(${REACTOS_SOURCE_DIR}/boot/bootdata/livecd.ini "" freeldr.ini)