57a86a98b7b92ebf534ca3a0ee663ae717ecb955
[reactos.git] / reactos / boot / freeldr / freeldr / CMakeLists.txt
1
2 if(ARCH MATCHES i386)
3 CreateBootSectorTarget2(frldr16
4 ${CMAKE_CURRENT_SOURCE_DIR}/arch/realmode/i386.S
5 ${CMAKE_CURRENT_BINARY_DIR}/frldr16.bin
6 F800)
7 elseif(ARCH MATCHES amd64)
8 CreateBootSectorTarget2(frldr16
9 ${CMAKE_CURRENT_SOURCE_DIR}/arch/realmode/amd64.S
10 ${CMAKE_CURRENT_BINARY_DIR}/frldr16.bin
11 F800)
12 endif()
13
14 include_directories(BEFORE include)
15 include_directories(${REACTOS_SOURCE_DIR}/ntoskrnl/include)
16 include_directories(${REACTOS_SOURCE_DIR}/lib/cmlib)
17 include_directories(${REACTOS_SOURCE_DIR}/include/reactos/libs)
18 include_directories(${REACTOS_SOURCE_DIR}/include/reactos/elf)
19
20 add_definitions(-D_NTHAL_ -D_BLDR_ -D_NTSYSTEM_)
21
22 if(ARCH MATCHES arm)
23 if(SARCH MATCHES omap-zoom2)
24 add_definitions(-D_ZOOM2_)
25 endif()
26 endif()
27
28 list(APPEND FREELDR_COMMON_SOURCE
29 cmdline.c
30 debug.c
31 linuxboot.c
32 machine.c
33 options.c
34 oslist.c
35 version.c
36 arcemul/mm.c
37 arcemul/time.c
38 cache/blocklist.c
39 cache/cache.c
40 comm/rs232.c
41 disk/disk.c
42 disk/partition.c
43 disk/ramdisk.c
44 #disk/scsiport.c
45 fs/ext2.c
46 fs/fat.c
47 fs/fs.c
48 fs/iso.c
49 fs/ntfs.c
50 fs/pxe.c
51 inifile/ini_init.c
52 inifile/inifile.c
53 inifile/parse.c
54 mm/meminit.c
55 mm/mm.c
56 reactos/registry.c
57 reactos/arcname.c
58 reactos/archwsup.c
59 reactos/binhive.c
60
61 ui/directui.c
62 ui/gui.c
63 ui/minitui.c
64 ui/noui.c
65 ui/tui.c
66 ui/tuimenu.c
67 ui/ui.c
68 video/fade.c
69 video/palette.c
70 video/video.c
71 windows/conversion.c
72 windows/peloader.c
73 windows/winldr.c
74 windows/wlmemory.c
75 windows/wlregistry.c
76 )
77
78 if(ARCH MATCHES i386)
79 list(APPEND FREELDR_COMMON_SOURCE
80 arch/i386/archmach.c
81 arch/i386/custom.c
82 arch/i386/drivemap.c
83 arch/i386/entry.S
84 arch/i386/halstub.c
85 arch/i386/hardware.c
86 arch/i386/hwacpi.c
87 arch/i386/hwapm.c
88 arch/i386/hwpci.c
89 arch/i386/i386bug.c
90 arch/i386/i386disk.c
91 arch/i386/i386idt.c
92 arch/i386/i386pnp.cmake.S
93 arch/i386/i386rtl.c
94 arch/i386/i386trap.S
95 arch/i386/i386vid.c
96 arch/i386/linux.cmake.S
97 arch/i386/machpc.c
98 arch/i386/mb.S
99 arch/i386/miscboot.c
100 arch/i386/ntoskrnl.c
101 arch/i386/pccons.c
102 arch/i386/pcdisk.c
103 arch/i386/pcmem.c
104 arch/i386/pcrtc.c
105 arch/i386/pcvideo.c
106 arch/i386/machxbox.c
107 arch/i386/xboxcons.c
108 arch/i386/xboxdisk.c
109 arch/i386/xboxfont.c
110 arch/i386/xboxhw.c
111 arch/i386/xboxi2c.c
112 arch/i386/xboxmem.c
113 arch/i386/xboxrtc.c
114 arch/i386/xboxvideo.c
115 arch/i386/winldr.c
116 windows/headless.c
117 disk/scsiport.c)
118 if(NOT MSVC)
119 list(APPEND FREELDR_COMMON_SOURCE
120 arch/i386/drvmap.S)
121 endif()
122 elseif(ARCH MATCHES amd64)
123 list(APPEND FREELDR_COMMON_SOURCE
124 arch/amd64/entry.S
125 arch/amd64/int386.S
126 arch/amd64/loader.c
127 arch/amd64/pnpbios.S
128 arch/i386/hardware.c
129 arch/i386/hwacpi.c
130 arch/i386/hwapm.c
131 arch/i386/hwpci.c
132 arch/i386/i386rtl.c
133 arch/i386/i386disk.c
134 arch/i386/i386vid.c
135 arch/i386/machpc.c
136 arch/i386/ntoskrnl.c
137 arch/i386/pccons.c
138 arch/i386/pcdisk.c
139 arch/i386/pcmem.c
140 arch/i386/pcrtc.c
141 arch/i386/pcvideo.c
142 arch/amd64/winldr.c)
143 else()
144 #TBD
145 endif()
146
147 add_library(freeldr_common ${FREELDR_COMMON_SOURCE})
148 add_dependencies(freeldr_common bugcodes)
149
150 if(ARCH MATCHES i386 AND NOT MSVC)
151 list(APPEND FREELDR_BASE_SOURCE arch/i386/multiboot.S)
152 endif()
153
154 list(APPEND FREELDR_BASE_SOURCE
155 bootmgr.c # This file is compiled with custom definitions
156 freeldr.c
157 rtl/bget.c
158 rtl/libsupp.c
159 )
160
161 add_executable(freeldr_pe ${FREELDR_BASE_SOURCE})
162
163 if(NOT MSVC)
164 set_target_properties(freeldr_pe PROPERTIES LINK_FLAGS "-Wl,--strip-all,--exclude-all-symbols,--file-alignment,0x1000,-T,${CMAKE_CURRENT_SOURCE_DIR}/freeldr_i386.lnk")
165 else()
166 set_target_properties(freeldr_pe PROPERTIES LINK_FLAGS "/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")
167 endif()
168
169 set_image_base(freeldr_pe 0x10000)
170 set_subsystem(freeldr_pe native)
171 set_entrypoint(freeldr_pe RealEntryPoint)
172
173 if(ARCH MATCHES i386)
174 target_link_libraries(freeldr_pe mini_hal)
175 endif()
176
177 target_link_libraries(freeldr_pe
178 freeldr_common
179 cportlib
180 rossym
181 cmlib
182 rtl
183 libcntpr)
184
185 add_pch(freeldr_pe include/freeldr.h)
186 add_dependencies(freeldr_pe asm)
187
188 concatenate_files(
189 ${CMAKE_CURRENT_BINARY_DIR}/frldr16.bin
190 ${CMAKE_CURRENT_BINARY_DIR}/freeldr_pe.exe
191 ${CMAKE_CURRENT_BINARY_DIR}/freeldr.sys)
192
193 add_custom_target(freeldr ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/freeldr.sys)
194
195 # rename freeldr on livecd to setupldr.sys because isoboot.bin search for setupldr.sys
196 add_cd_file(TARGET freeldr FILE ${CMAKE_CURRENT_BINARY_DIR}/freeldr.sys DESTINATION loader NO_CAB FOR bootcd regtest)
197 add_cd_file(TARGET freeldr FILE ${CMAKE_CURRENT_BINARY_DIR}/freeldr.sys DESTINATION loader NO_CAB FOR livecd NAME_ON_CD setupldr.sys)
198
199 list(APPEND SETUPLDR_SOURCE
200 inffile/inffile.c)
201
202 if(ARCH MATCHES i386 OR ARCH MATCHES amd64)
203 list(APPEND SETUPLDR_SOURCE windows/setupldr.c)
204 endif()
205
206 if(NOT MSVC)
207 set_source_files_properties(${SETUPLDR_SOURCE} PROPERTIES COMPILE_FLAGS "-ffreestanding -fno-builtin -fno-inline -fno-zero-initialized-in-bss")
208 endif()
209
210 add_executable(setupldr_pe ${FREELDR_BASE_SOURCE} ${SETUPLDR_SOURCE})
211
212 if(NOT MSVC)
213 set_target_properties(setupldr_pe PROPERTIES LINK_FLAGS "-Wl,--strip-all,--exclude-all-symbols,--file-alignment,0x1000,-T,${CMAKE_CURRENT_SOURCE_DIR}/freeldr_i386.lnk" COMPILE_DEFINITIONS "FREELDR_REACTOS_SETUP")
214 else()
215 set_target_properties(setupldr_pe PROPERTIES LINK_FLAGS "/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" COMPILE_DEFINITIONS "FREELDR_REACTOS_SETUP")
216 endif()
217
218 set_image_base(setupldr_pe 0x10000)
219 set_subsystem(setupldr_pe native)
220 set_entrypoint(setupldr_pe RealEntryPoint)
221
222 if(ARCH MATCHES i386)
223 target_link_libraries(setupldr_pe mini_hal)
224 endif()
225
226 target_link_libraries(setupldr_pe
227 freeldr_common
228 cportlib
229 rossym
230 cmlib
231 rtl
232 libcntpr)
233
234 add_dependencies(setupldr_pe asm)
235
236 concatenate_files(
237 ${CMAKE_CURRENT_BINARY_DIR}/frldr16.bin
238 ${CMAKE_CURRENT_BINARY_DIR}/setupldr_pe.exe
239 ${CMAKE_CURRENT_BINARY_DIR}/setupldr.sys)
240
241 add_custom_target(setupldr ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/setupldr.sys)
242
243 add_cd_file(TARGET setupldr FILE ${CMAKE_CURRENT_BINARY_DIR}/setupldr.sys DESTINATION loader NO_CAB FOR bootcd regtest)
244