0d8fa6c9cd
Add compatibility for ubuntu lsb versions that haven't sdl support
112 lines
4.1 KiB
CMake
112 lines
4.1 KiB
CMake
# ------------------------------------------------------------------------------
|
|
# Initialize the project.
|
|
project(MentOs)
|
|
cmake_minimum_required(VERSION 2.8.4)
|
|
|
|
message(STATUS "Crosscompiling: ${CMAKE_CROSSCOMPILING}")
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Add operating system specific option.
|
|
message(STATUS "System name: ${CMAKE_HOST_SYSTEM_NAME}")
|
|
message(STATUS "Kernel version: ${CMAKE_SYSTEM_VERSION}")
|
|
if ((${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin") OR APPLE)
|
|
# Apple MacOSx
|
|
elseif ((${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows") OR WIN32)
|
|
# Windows
|
|
set(EMULATOR_FLAGS ${EMULATOR_FLAGS} -sdl)
|
|
else()
|
|
# Generic Unix System
|
|
find_program(LSB_RELEASE_EXEC lsb_release)
|
|
execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --release
|
|
OUTPUT_VARIABLE LSB_RELEASE_VERSION_SHORT
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
message(STATUS "LSB version: ${LSB_RELEASE_VERSION_SHORT}")
|
|
if (${LSB_RELEASE_VERSION_SHORT} MATCHES "^18")
|
|
# Ubuntu 18
|
|
set(EMULATOR_FLAGS ${EMULATOR_FLAGS} -sdl)
|
|
elseif (${LSB_RELEASE_VERSION_SHORT} MATCHES "^19")
|
|
# Ubuntu 19
|
|
set(EMULATOR_FLAGS ${EMULATOR_FLAGS} -display gtk)
|
|
elseif (${LSB_RELEASE_VERSION_SHORT} MATCHES "^20")
|
|
# Ubuntu 20
|
|
set(EMULATOR_FLAGS ${EMULATOR_FLAGS} -display gtk)
|
|
else()
|
|
set(EMULATOR_FLAGS ${EMULATOR_FLAGS} -sdl)
|
|
endif()
|
|
endif()
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Add the debugging option.
|
|
set(DEBUGGING_TYPE "DEBUG_STDIO" CACHE STRING
|
|
"Chose the type of debugging: DEBUG_STDIO DEBUG_LOG")
|
|
set_property(
|
|
CACHE DEBUGGING_TYPE PROPERTY STRINGS
|
|
DEBUG_STDIO
|
|
DEBUG_LOG)
|
|
if ("${DEBUGGING_TYPE}" STREQUAL "DEBUG_STDIO" OR
|
|
"${DEBUGGING_TYPE}" STREQUAL "DEBUG_LOG")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D${DEBUGGING_TYPE}")
|
|
message(STATUS "Setting debugging type to ${DEBUGGING_TYPE}.")
|
|
else ()
|
|
message(FATAL_ERROR "Debugging type ${DEBUGGING_TYPE} is not valid.")
|
|
endif ()
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Add the sub-directories.
|
|
add_subdirectory(mentos)
|
|
add_subdirectory(initscp)
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Generate the initrd filesystem.
|
|
add_custom_target(
|
|
initfs
|
|
COMMAND echo "---------------------------------------------"
|
|
COMMAND echo "Initializing 'initfs'..."
|
|
COMMAND echo "---------------------------------------------"
|
|
COMMAND ./initscp/initfscp -s ${CMAKE_SOURCE_DIR}/files -t ${CMAKE_BINARY_DIR}/initfs -m /dev
|
|
COMMAND echo "---------------------------------------------"
|
|
COMMAND echo "Done!"
|
|
COMMAND echo "---------------------------------------------"
|
|
DEPENDS initfscp
|
|
)
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Set memory size.
|
|
SET(MEMORY_SIZE 1096M)
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Builds the code and runs qemu with the built Os.
|
|
SET(EMULATOR qemu-system-i386)
|
|
if (${DEBUGGING_TYPE} STREQUAL DEBUG_LOG)
|
|
SET(EMULATOR_FLAGS ${EMULATOR_FLAGS} -serial file:serial.log)
|
|
elseif (${DEBUGGING_TYPE} STREQUAL DEBUG_STDIO)
|
|
SET(EMULATOR_FLAGS ${EMULATOR_FLAGS} -serial stdio)
|
|
endif ()
|
|
SET(EMULATOR_FLAGS ${EMULATOR_FLAGS} -vga std)
|
|
SET(EMULATOR_FLAGS ${EMULATOR_FLAGS} -k it)
|
|
SET(EMULATOR_FLAGS ${EMULATOR_FLAGS} -m ${MEMORY_SIZE})
|
|
SET(EMULATOR_KERNEL -kernel mentos/kernel.bin)
|
|
SET(EMULATOR_FS -initrd initfs)
|
|
|
|
add_custom_target(
|
|
qemu
|
|
COMMAND ${EMULATOR} ${EMULATOR_FLAGS} ${EMULATOR_KERNEL} ${EMULATOR_FS}
|
|
DEPENDS MentOs
|
|
DEPENDS initfs
|
|
)
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Builds the code and runs qemu with the built Os.
|
|
SET(EMULATOR_FLAGS_GDB ${EMULATOR_FLAGS} -s -S)
|
|
SET(GDB_PROG cgdb)
|
|
SET(GDB_ARGS -x ${CMAKE_SOURCE_DIR}/.gdb.debug)
|
|
|
|
add_custom_target(
|
|
qemu-gdb
|
|
COMMAND xterm -geometry 160x30-0-0 -e ${EMULATOR} ${EMULATOR_FLAGS_GDB} ${EMULATOR_KERNEL} ${EMULATOR_FS} &
|
|
COMMAND xterm -geometry 160x30-0+0 -e ${GDB_PROG} ${GDB_ARGS} &
|
|
DEPENDS MentOs
|
|
DEPENDS initfs
|
|
)
|
|
|