-
-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathCMakeLists.txt
196 lines (165 loc) · 9.18 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
cmake_minimum_required (VERSION 3.13.4)
# Enable the system image switch
set (VALI_BUILD ON)
set (VALI_BOOTSTRAP ON)
include (cmake/SetupEnvironment.cmake)
project (ValiOS)
# Setup options and defaults
option (VALI_ENABLE_KERNEL_TRACE "Enable debug tracing in the kernel" ON)
option (VALI_ENABLE_SMP "Enable multicore support in the kernel" ON)
option (VALI_ENABLE_DEBUG_CONSOLE "Enable the debug console on boot instead of splash" ON)
option (VALI_ENABLE_DEBUG_MODE "Enter the debug console mode after boot instead of normal system startup" ON)
option (VALI_ENABLE_NESTED_IRQS "Enter the debug console mode after boot instead of normal system startup" OFF)
option (VALI_ENABLE_SIGNALS "Enter the debug console mode after boot instead of normal system startup" ON)
option (VALI_ENABLE_DRIVERS "Enter the debug console mode after boot instead of normal system startup" ON)
option (VALI_ENABLE_EHCI "Enter the debug console mode after boot instead of normal system startup" ON)
option (VALI_ENABLE_EHCI_64BIT "Enter the debug console mode after boot instead of normal system startup" OFF)
option (VALI_RUN_KERNEL_TESTS "Enable kernel-mode testing suites of the operating system" OFF)
set (VALI_INIT_APP "vioarr.run" CACHE STRING "The application to execute for system initialization")
set (VALI_ARCH "amd64" CACHE STRING "Platform architecture to build Vali for")
set_property (CACHE VALI_ARCH PROPERTY STRINGS i386 amd64)
set (ENV{VALI_ARCH} ${VALI_ARCH})
# Set paths and define the structure of the initial system image
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set (VALI_PATH_DEPLOY ${CMAKE_BINARY_DIR}/deploy)
set (VALI_PATH_DEPLOY_HDD ${CMAKE_BINARY_DIR}/deploy/hdd)
set (VALI_PATH_DEPLOY_BOOT ${CMAKE_BINARY_DIR}/deploy/hdd/boot)
set (VALI_PATH_DEPLOY_SYSTEM ${CMAKE_BINARY_DIR}/deploy/hdd/system)
set (VALI_PATH_DEPLOY_SYSTEM_BIN ${CMAKE_BINARY_DIR}/deploy/hdd/system/bin)
set (VALI_PATH_DEPLOY_SYSTEM_SRV ${CMAKE_BINARY_DIR}/deploy/hdd/system/services)
set (VALI_PATH_DEPLOY_SYSTEM_MODS ${CMAKE_BINARY_DIR}/deploy/hdd/system/modules)
set (VALI_PATH_DEPLOY_SHARED ${CMAKE_BINARY_DIR}/deploy/hdd/shared)
set (VALI_PATH_DEPLOY_SHARED_BIN ${CMAKE_BINARY_DIR}/deploy/hdd/shared/bin)
set (VALI_PATH_DEPLOY_SHARED_LIB ${CMAKE_BINARY_DIR}/deploy/hdd/shared/lib)
set (VALI_PATH_DEPLOY_SHARED_INC ${CMAKE_BINARY_DIR}/deploy/hdd/shared/include)
set (VALI_PATH_DEPLOY_SHARED_MAPS ${CMAKE_BINARY_DIR}/deploy/hdd/shared/maps)
set (VALI_PATH_DEPLOY_SHARED_SHARE ${CMAKE_BINARY_DIR}/deploy/hdd/shared/share)
set (VALI_PATH_APPLICATIONS ${CMAKE_BINARY_DIR}/apps)
set (VALI_PATH_APPLICATIONS_SHARE ${CMAKE_BINARY_DIR}/apps/share)
if (DEFINED ENV{VALI_APPLICATION_PATH})
set (VALI_PATH_APPLICATIONS $ENV{VALI_APPLICATION_PATH})
set (VALI_PATH_APPLICATIONS_SHARE $ENV{VALI_APPLICATION_PATH}/share)
endif ()
# Setup utility macros for targets
macro (deploy_target_to_initrd RDTARGET)
add_custom_command (TARGET ${RDTARGET} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${RDTARGET}> ${VALI_PATH_DEPLOY_SYSTEM_BIN}
)
endmacro ()
macro (deploy_file_to_initrd)
if (${ARGC} GREATER_EQUAL 3)
set (FILES_TO_DEPLOY "${ARGN}")
list (POP_FRONT FILES_TO_DEPLOY) # target
list (POP_FRONT FILES_TO_DEPLOY) # path
get_target_property(D2RD_SOURCE_DIR ${ARGV0} SOURCE_DIR)
foreach (RD_FILE ${FILES_TO_DEPLOY})
add_custom_command (TARGET ${ARGV0} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy "${D2RD_SOURCE_DIR}/${RD_FILE}" "${VALI_PATH_DEPLOY_SYSTEM}/${ARGV1}"
)
endforeach ()
else ()
message (STATUS "usage: deploy_file_to_initrd <target> <path> files ...")
message (FATAL_ERROR "Invalid number of arguments (${ARGC}) for deploy_file_to_initrd")
endif ()
endmacro ()
# Setup tools
set (TOOL_RD ${CMAKE_BINARY_DIR}/tools/host/bin/mkvafs)
set (TOOL_DU ${CMAKE_BINARY_DIR}/tools/host/bin/osbuilder)
set (TOOL_LZ ${CMAKE_BINARY_DIR}/tools/host/bin/lzss)
# Create neccessary directories
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_HDD})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_BOOT})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SYSTEM})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SYSTEM_BIN})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SYSTEM_SRV})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SYSTEM_MODS})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SHARED})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SHARED_BIN})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SHARED_LIB})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SHARED_INC})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SHARED_MAPS})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SHARED_SHARE})
file (MAKE_DIRECTORY ${VALI_PATH_APPLICATIONS})
file (MAKE_DIRECTORY ${VALI_PATH_APPLICATIONS_SHARE})
# Read the project version
file(READ "VERSION" VALI_VERSION)
# Configure projects that are specified
if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/${VALI_ARCH}PlatformConfig.cmake")
message (FATAL_ERROR "The specified platform ${VALI_ARCH} has no configuration file")
endif ()
include (cmake/HandleFeatureFlags.cmake)
include (cmake/${VALI_ARCH}PlatformConfig.cmake)
# Configure bootloader
add_subdirectory (boot)
# Generate all the neccessary files for the builds
add_subdirectory (protocols)
include_directories (${CMAKE_BINARY_DIR}/protocols)
# Configure the runtime libraries
add_subdirectory (librt)
# Configure the kernel project
add_subdirectory (kernel)
# Build services
add_subdirectory (services)
# Build modules
add_subdirectory (modules)
# Build tools
add_subdirectory (tools)
# Build userspace applications
# these are not the entire userspace that exists, most of these applications
# are just utility apps and small test programs that exists only to test a single
# feature or implementation. To run these you must have the entire userspace up and
# running as we have no terminal environment builtin.
add_subdirectory (apps)
# Installation and utility targets
add_custom_target (install_applications
COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/tools/utils.py --cp --source ${VALI_PATH_APPLICATIONS}/bin --dest ${VALI_PATH_DEPLOY_SHARED_BIN} --pattern *.app
COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/tools/utils.py --cp --source ${VALI_PATH_APPLICATIONS}/bin --dest ${VALI_PATH_DEPLOY_SHARED_BIN} --pattern *.run
COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/tools/utils.py --cp --source ${VALI_PATH_APPLICATIONS}/bin --dest ${VALI_PATH_DEPLOY_SHARED_BIN} --pattern *.dll
COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/tools/utils.py --cp --source ${VALI_PATH_APPLICATIONS}/maps --dest ${VALI_PATH_DEPLOY_SHARED_MAPS} --pattern *.map
#COMMAND ${CMAKE_COMMAND} -E copy_directory ${VALI_PATH_APPLICATIONS}/include/ ${VALI_PATH_DEPLOY_SHARED_INC}
#COMMAND ${CMAKE_COMMAND} -E copy_directory ${VALI_PATH_APPLICATIONS}/lib/ ${VALI_PATH_DEPLOY_SHARED_LIB}
COMMAND ${CMAKE_COMMAND} -E copy_directory ${VALI_PATH_APPLICATIONS}/share/ ${VALI_PATH_DEPLOY_SHARED_SHARE}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
add_custom_target (install_prepare
COMMAND ${TOOL_RD} --arch ${VALI_ARCH} --compression aplib --out ${VALI_PATH_DEPLOY_BOOT}/initrd.mos ${VALI_PATH_DEPLOY_SYSTEM}
COMMAND ${TOOL_LZ} c ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/kernel.mos ${VALI_PATH_DEPLOY_BOOT}/kernel.mos
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:phoenix> ${VALI_PATH_DEPLOY_BOOT}
COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/tools/utils.py --cp --source ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} --dest ${VALI_PATH_DEPLOY_SHARED_BIN} --pattern *.dll
COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/tools/utils.py --cp --source ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} --dest ${VALI_PATH_DEPLOY_SHARED_LIB} --pattern *.lib
COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/tools/utils.py --cp --source ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} --dest ${VALI_PATH_DEPLOY_SHARED_MAPS} --pattern *.map
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
add_dependencies(install_prepare diskutility rd lzss)
add_custom_target (install_img
COMMAND ${TOOL_DU} --project ${CMAKE_CURRENT_SOURCE_DIR}/cmake/models/vali-gpt.yaml --target img
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
add_dependencies(install_img install_prepare install_applications)
add_custom_target (install_vmdk
COMMAND ${TOOL_DU} --project ${CMAKE_CURRENT_SOURCE_DIR}/cmake/models/vali-gpt.yaml --target vmdk
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
add_dependencies(install_vmdk install_prepare install_applications)
add_custom_command(
OUTPUT always_run.special mollenos_usb.img
COMMAND ${CMAKE_COMMAND} -E copy mollenos.img mollenos_usb.img
)
add_custom_target (run_bochs
COMMAND bochs -q -f ${CMAKE_CURRENT_SOURCE_DIR}/tools/setup.bochsrc
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS mollenos_usb.img
)
add_custom_target (run_qemu
COMMAND qemu-system-x86_64
-D ./log.txt -monitor stdio -smp 1 -m 4096
-bios /usr/share/OVMF/OVMF_CODE.fd
-drive if=virtio,file=mollenos.img,format=raw
-net none -no-reboot
-serial file:./qserial.txt
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
USES_TERMINAL
)