Setup cmake project
This commit is contained in:
36
cmake/CMakeLists.txt
Normal file
36
cmake/CMakeLists.txt
Normal file
@ -0,0 +1,36 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
# Set source directory variables
|
||||
set(CHURLOS_ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/..")
|
||||
set(CHURLOS_SRC_DIR "${CHURLOS_ROOT_DIR}/src")
|
||||
set(CHURLOS_TOOL_DIR "${CHURLOS_ROOT_DIR}/tools")
|
||||
|
||||
# Set output directory variables
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/static)
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/shared)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||
|
||||
# Force out of source build
|
||||
message(STATUS "Force out of source build check...")
|
||||
string(COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" insource)
|
||||
if (insource)
|
||||
message(FATAL_ERROR "Please do not build in your source dir. Use a dedicated build folder!")
|
||||
endif ()
|
||||
|
||||
# Set compiler-flags
|
||||
ENABLE_LANGUAGE(ASM_NASM)
|
||||
set(CMAKE_ASM_NASM_OBJECT_FORMAT "elf32")
|
||||
set(CMAKE_ASM_NASM_INCLUDES "${CHURLOS_SRC_DIR}/")
|
||||
set(CMAKE_ASM_NASM_COMPILE_OBJECT "<CMAKE_ASM_NASM_COMPILER> -I${CMAKE_ASM_NASM_INCLUDES} -f ${CMAKE_ASM_NASM_OBJECT_FORMAT} -o <OBJECT> <SOURCE>")
|
||||
set(CMAKE_C_FLAGS "-m32 -march=i386 -mfpmath=387 -mno-mmx -mno-sse -mno-avx -Wall -fno-stack-protector -nostdlib -fno-pic -no-pie -ffreestanding")
|
||||
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 9)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmanual-endbr")
|
||||
endif()
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -Wl,--build-id=none -Wno-non-virtual-dtor -fno-threadsafe-statics -Wplacement-new=0 -fno-use-cxa-atexit -fno-rtti -fno-exceptions -std=c++20 -T ${CHURLOS_SRC_DIR}/link.ld")
|
||||
|
||||
# Add subdirectories
|
||||
add_subdirectory(bootdisk)
|
||||
add_subdirectory(device)
|
||||
add_subdirectory(kernel)
|
||||
add_subdirectory(lib)
|
||||
add_subdirectory(system)
|
30
cmake/bootdisk/CMakeLists.txt
Normal file
30
cmake/bootdisk/CMakeLists.txt
Normal file
@ -0,0 +1,30 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
project(bootdisk)
|
||||
message(STATUS "Project " ${PROJECT_NAME})
|
||||
|
||||
# BIOS-dev.code:total-tracks:-heads:-sectors:start-track:-head:-sector
|
||||
# Default-Werte fuer Boot von Floppy (USB/HD erkennt bootsect.asm selbst):
|
||||
set(BOOTDEVICE "0:80:2:18:0:0:1")
|
||||
|
||||
add_custom_command(OUTPUT "${CHURLOS_ROOT_DIR}/bootdisk.vmi"
|
||||
BYPRODUCTS "${CMAKE_BINARY_DIR}/bootsect" "${CMAKE_BINARY_DIR}/setup" "${CMAKE_BINARY_DIR}/build" "${CMAKE_BINARY_DIR}/system.img" "${CMAKE_BINARY_DIR}/bootdisk.img" "${CMAKE_BINARY_DIR}/bootdisk.vmi"
|
||||
|
||||
# Compile bootsect and setup code
|
||||
COMMAND nasm -f bin -o "${CMAKE_BINARY_DIR}/bootsect" "${CHURLOS_SRC_DIR}/bootdisk/bootsect.asm"
|
||||
COMMAND nasm -f bin -o "${CMAKE_BINARY_DIR}/setup" "${CHURLOS_SRC_DIR}/bootdisk/setup.asm"
|
||||
|
||||
# Compile build code
|
||||
COMMAND gcc -o "${CMAKE_BINARY_DIR}/build" "${CHURLOS_SRC_DIR}/bootdisk/build.c"
|
||||
|
||||
# Build system.img
|
||||
COMMAND objcopy -O binary "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/system" "${CMAKE_BINARY_DIR}/system.img"
|
||||
|
||||
# Build bootdisk
|
||||
COMMAND "${CMAKE_BINARY_DIR}/build" "${CMAKE_BINARY_DIR}/bootsect" "${CMAKE_BINARY_DIR}/setup" "${CMAKE_BINARY_DIR}/system.img" ${BOOTDEVICE} "${CMAKE_BINARY_DIR}/bootdisk.img"
|
||||
COMMAND dd if="${CMAKE_BINARY_DIR}/bootdisk.img" of="${CMAKE_BINARY_DIR}/bootdisk.vmi" bs=1474560 conv=sync
|
||||
COMMAND /run/current-system/sw/bin/cp "${CMAKE_BINARY_DIR}/bootdisk.vmi" "${CHURLOS_ROOT_DIR}/bootdisk.vmi"
|
||||
DEPENDS system
|
||||
)
|
||||
|
||||
add_custom_target(${PROJECT_NAME} DEPENDS ${CHURLOS_ROOT_DIR}/bootdisk.vmi)
|
18
cmake/device/CMakeLists.txt
Normal file
18
cmake/device/CMakeLists.txt
Normal file
@ -0,0 +1,18 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
project(device)
|
||||
message(STATUS "Project " ${PROJECT_NAME})
|
||||
|
||||
include_directories(${CHURLOS_SRC_DIR})
|
||||
|
||||
add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES})
|
||||
|
||||
# Add subdirectories
|
||||
add_subdirectory(bios)
|
||||
add_subdirectory(cpu)
|
||||
add_subdirectory(graphics)
|
||||
add_subdirectory(hid)
|
||||
add_subdirectory(interrupt)
|
||||
add_subdirectory(port)
|
||||
add_subdirectory(sound)
|
||||
add_subdirectory(time)
|
5
cmake/device/bios/CMakeLists.txt
Normal file
5
cmake/device/bios/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(device PUBLIC
|
||||
${CHURLOS_SRC_DIR}/device/bios/BIOS.cc
|
||||
)
|
5
cmake/device/cpu/CMakeLists.txt
Normal file
5
cmake/device/cpu/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
# target_sources(device PUBLIC
|
||||
# ${CHURLOS_SRC_DIR}/
|
||||
# )
|
9
cmake/device/graphics/CMakeLists.txt
Normal file
9
cmake/device/graphics/CMakeLists.txt
Normal file
@ -0,0 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(device PUBLIC
|
||||
${CHURLOS_SRC_DIR}/device/graphics/CGA.cc
|
||||
${CHURLOS_SRC_DIR}/device/graphics/CGA_Stream.cc
|
||||
${CHURLOS_SRC_DIR}/device/graphics/Fonts.cc
|
||||
${CHURLOS_SRC_DIR}/device/graphics/LFBgraphics.cc
|
||||
${CHURLOS_SRC_DIR}/device/graphics/VESA.cc
|
||||
)
|
5
cmake/device/hid/CMakeLists.txt
Normal file
5
cmake/device/hid/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(device PUBLIC
|
||||
${CHURLOS_SRC_DIR}/device/hid/Keyboard.cc
|
||||
)
|
5
cmake/device/interrupt/CMakeLists.txt
Normal file
5
cmake/device/interrupt/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(device PUBLIC
|
||||
${CHURLOS_SRC_DIR}/device/interrupt/PIC.cc
|
||||
)
|
5
cmake/device/port/CMakeLists.txt
Normal file
5
cmake/device/port/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(device PUBLIC
|
||||
${CHURLOS_SRC_DIR}/device/port/SerialOut.cc
|
||||
)
|
5
cmake/device/sound/CMakeLists.txt
Normal file
5
cmake/device/sound/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(device PUBLIC
|
||||
${CHURLOS_SRC_DIR}/device/sound/PCSPK.cc
|
||||
)
|
5
cmake/device/time/CMakeLists.txt
Normal file
5
cmake/device/time/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(device PUBLIC
|
||||
${CHURLOS_SRC_DIR}/device/time/PIT.cc
|
||||
)
|
17
cmake/kernel/CMakeLists.txt
Normal file
17
cmake/kernel/CMakeLists.txt
Normal file
@ -0,0 +1,17 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
project(kernel)
|
||||
message(STATUS "Project " ${PROJECT_NAME})
|
||||
|
||||
include_directories(${CHURLOS_SRC_DIR})
|
||||
|
||||
add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES})
|
||||
|
||||
# Add subdirectories
|
||||
add_subdirectory(demo)
|
||||
add_subdirectory(event)
|
||||
add_subdirectory(interrupt)
|
||||
add_subdirectory(log)
|
||||
add_subdirectory(memory)
|
||||
add_subdirectory(process)
|
||||
add_subdirectory(system)
|
17
cmake/kernel/demo/CMakeLists.txt
Normal file
17
cmake/kernel/demo/CMakeLists.txt
Normal file
@ -0,0 +1,17 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(kernel PUBLIC
|
||||
${CHURLOS_SRC_DIR}/kernel/demo/ArrayDemo.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/demo/bmp_hhu.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/demo/HeapDemo.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/demo/KeyboardDemo.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/demo/MainMenu.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/demo/PagingDemo.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/demo/PCSPKdemo.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/demo/PreemptiveThreadDemo.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/demo/SmartPointerDemo.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/demo/StringDemo.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/demo/TextDemo.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/demo/VBEdemo.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/demo/VectorDemo.cc
|
||||
)
|
6
cmake/kernel/event/CMakeLists.txt
Normal file
6
cmake/kernel/event/CMakeLists.txt
Normal file
@ -0,0 +1,6 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(kernel PUBLIC
|
||||
${CHURLOS_SRC_DIR}/kernel/event/KeyEventListener.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/event/KeyEventManager.cc
|
||||
)
|
6
cmake/kernel/interrupt/CMakeLists.txt
Normal file
6
cmake/kernel/interrupt/CMakeLists.txt
Normal file
@ -0,0 +1,6 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(kernel PUBLIC
|
||||
${CHURLOS_SRC_DIR}/kernel/interrupt/Bluescreen.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/interrupt/IntDispatcher.cc
|
||||
)
|
5
cmake/kernel/log/CMakeLists.txt
Normal file
5
cmake/kernel/log/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(kernel PUBLIC
|
||||
${CHURLOS_SRC_DIR}/kernel/log/Logger.cc
|
||||
)
|
8
cmake/kernel/memory/CMakeLists.txt
Normal file
8
cmake/kernel/memory/CMakeLists.txt
Normal file
@ -0,0 +1,8 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(kernel PUBLIC
|
||||
${CHURLOS_SRC_DIR}/kernel/memory/Allocator.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/memory/BumpAllocator.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/memory/LinkedListAllocator.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/memory/Paging.cc
|
||||
)
|
7
cmake/kernel/process/CMakeLists.txt
Normal file
7
cmake/kernel/process/CMakeLists.txt
Normal file
@ -0,0 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(kernel PUBLIC
|
||||
${CHURLOS_SRC_DIR}/kernel/process/Scheduler.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/process/Thread.cc
|
||||
${CHURLOS_SRC_DIR}/kernel/process/Thread.asm
|
||||
)
|
5
cmake/kernel/system/CMakeLists.txt
Normal file
5
cmake/kernel/system/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(kernel PUBLIC
|
||||
${CHURLOS_SRC_DIR}/kernel/system/Globals.cc
|
||||
)
|
14
cmake/lib/CMakeLists.txt
Normal file
14
cmake/lib/CMakeLists.txt
Normal file
@ -0,0 +1,14 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
project(lib)
|
||||
message(STATUS "Project " ${PROJECT_NAME})
|
||||
|
||||
include_directories(${CHURLOS_SRC_DIR})
|
||||
|
||||
add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES})
|
||||
|
||||
# Add subdirectories
|
||||
add_subdirectory(async)
|
||||
add_subdirectory(mem)
|
||||
add_subdirectory(stream)
|
||||
add_subdirectory(util)
|
6
cmake/lib/async/CMakeLists.txt
Normal file
6
cmake/lib/async/CMakeLists.txt
Normal file
@ -0,0 +1,6 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(lib PUBLIC
|
||||
${CHURLOS_SRC_DIR}/lib/async/Semaphore.cc
|
||||
${CHURLOS_SRC_DIR}/lib/async/SpinLock.cc
|
||||
)
|
5
cmake/lib/mem/CMakeLists.txt
Normal file
5
cmake/lib/mem/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(lib PUBLIC
|
||||
${CHURLOS_SRC_DIR}/lib/mem/Memory.cc
|
||||
)
|
5
cmake/lib/stream/CMakeLists.txt
Normal file
5
cmake/lib/stream/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(lib PUBLIC
|
||||
${CHURLOS_SRC_DIR}/lib/stream/OutStream.cc
|
||||
)
|
7
cmake/lib/util/CMakeLists.txt
Normal file
7
cmake/lib/util/CMakeLists.txt
Normal file
@ -0,0 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
target_sources(lib PUBLIC
|
||||
${CHURLOS_SRC_DIR}/lib/util/String.cc
|
||||
${CHURLOS_SRC_DIR}/lib/util/StringBuffer.cc
|
||||
${CHURLOS_SRC_DIR}/lib/util/StringView.cc
|
||||
)
|
16
cmake/system/CMakeLists.txt
Normal file
16
cmake/system/CMakeLists.txt
Normal file
@ -0,0 +1,16 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
project(system)
|
||||
message(STATUS "Project " ${PROJECT_NAME})
|
||||
|
||||
include_directories(${CHURLOS_SRC_DIR})
|
||||
|
||||
# Set source files
|
||||
set(SOURCE_FILES
|
||||
${CHURLOS_SRC_DIR}/startup.asm
|
||||
${CHURLOS_SRC_DIR}/main.cc
|
||||
)
|
||||
|
||||
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} device kernel lib)
|
Reference in New Issue
Block a user