-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
97 lines (71 loc) · 4.21 KB
/
CMakeLists.txt
File metadata and controls
97 lines (71 loc) · 4.21 KB
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
# LimeOS CMakeLists.txt
# Copyright(R) Ryzerth 2019
cmake_minimum_required(VERSION 3.9)
project(LimeOS)
enable_language(ASM)
# ================= CONFIG =================
set(ARCH "i686")
# ================= CONFIG =================
# Kernel source
file(GLOB KERN_SRC "src/*.cpp" "src/*.asm")
include_directories(LimeOS "src/common")
include_directories(LimeOS "src/kstd")
file(GLOB LIB_COMMON "src/common/*.cpp" "src/common/*.asm")
file(GLOB LIB_MISC "src/common/misc/*.cpp" "src/common/misc/*.asm")
file(GLOB LIB_KSTD "src/kstd/*.cpp" "src/kstd/*.asm")
file(GLOB LIB_VFS "src/common/vfs/*.cpp" "src/common/vfs/*.asm")
file(GLOB LIB_RAMFS "src/common/ramfs/*.cpp" "src/common/ramfs/*.asm")
file(GLOB LIB_KIO "src/common/kernio/*.cpp" "src/common/kernio/*.asm")
file(GLOB LIB_ELF "src/common/elf/*.cpp" "src/common/elf/*.asm")
file(GLOB LIB_KSC "src/common/kscript/*.cpp" "src/common/kscript/*.asm")
file(GLOB LIB_KMOD "src/common/kmod/*.cpp" "src/common/kmod/*.asm")
file(GLOB LIB_MBT "src/common/multiboot/*.cpp" "src/common/multiboot/*.asm")
if(${ARCH} STREQUAL "i686")
# Toolchain config
set(CMAKE_ASM_COMPILER "i686-elf-as")
set(CMAKE_C_COMPILER "i686-elf-gcc")
set(CMAKE_CXX_COMPILER "i686-elf-g++")
set(CMAKE_CXX_FLAGS "-DKERNEL_CODE -ffreestanding -O2 -fno-rtti -Wno-write-strings -Wno-multichar -Wno-unused-parameter -Wno-overflow -Wno-narrowing -fno-exceptions -Wno-trigraphs -Wno-pointer-arith -Wno-varargs ${CMAKE_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "-T ../src/arch/i686/linker.ld -ffreestanding -O2 -nostdlib -lgcc -Wwrite-strings ${CMAKE_EXE_LINKER_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS "-ffreestanding -O2 -lgcc -nostdlib -Wwrite-strings -Wl,-shared${CMAKE_SHARED_LINKER_FLAGS}")
# Library source
file(GLOB LIB_INIT "src/arch/i686/init/*.cpp" "src/arch/i686/init/*.asm")
file(GLOB LIB_GDT "src/arch/i686/gdt/*.cpp" "src/arch/i686/gdt/*.asm")
file(GLOB LIB_IDT "src/arch/i686/interrupts/*.cpp" "src/arch/i686/interrupts/*.asm")
file(GLOB LIB_PAGING "src/arch/i686/paging/*.cpp" "src/arch/i686/paging/*.asm")
file(GLOB LIB_VGA "src/arch/i686/temp_vga/*.cpp" "src/arch/i686/temp_vga/*.asm")
file(GLOB LIB_KAPI "src/arch/i686/kapi/*.cpp" "src/arch/i686/kapi/*.asm")
file(GLOB LIB_SCHD "src/arch/i686/scheduler/*.cpp" "src/arch/i686/scheduler/*.asm")
file(GLOB LIB_PIT "src/arch/i686/pit/*.cpp" "src/arch/i686/pit/*.asm")
include_directories(LimeOS "src/arch/i686")
set(SRCS ${KERN_SRC} ${LIB_COMMON} ${LIB_MISC} ${LIB_INIT} ${LIB_GDT} ${LIB_IDT} ${LIB_PAGING} ${LIB_VGA} ${LIB_KSTD} ${LIB_VFS} ${LIB_RAMFS} ${LIB_KIO} ${LIB_ELF} ${LIB_KSC} ${LIB_KMOD} ${LIB_KAPI} ${LIB_SCHD} ${LIB_PIT} ${LIB_MBT})
# GRUB target
add_custom_target(iso COMMAND sh ../tools/build_iso.sh)
add_custom_target(ramfs COMMAND sh ../tools/build_ramfs.sh)
# Configuring dependencies
add_dependencies(iso LimeOS)
add_dependencies(iso ramfs)
# Output
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../bin/i686/")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "../bin/i686/")
elseif(${ARCH} STREQUAL "arm")
# Toolchain config
set(CMAKE_ASM_COMPILER "arm-none-eabi-as")
set(CMAKE_C_COMPILER "arm-none-eabi-gcc")
set(CMAKE_CXX_COMPILER "arm-none-eabi-g++")
set(CMAKE_CXX_FLAGS "-ffreestanding -O2 ${CMAKE_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "-ffreestanding -O2 -nostdlib -lgcc ${CMAKE_EXE_LINKER_FLAGS}")
include_directories(LimeOS "src/arch/arm")
include_directories(LimeOS "src/common")
set(SRCS ${LIB_COMMON} ${KERN_SRC} ${LIB_MISC} ${LIB_KSTD} ${LIB_VFS} ${LIB_RAMFS})
# Output
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../bin/arm/")
endif()
# Fix this retard CMake bug...
add_custom_target(_shared_lib_patch COMMAND echo ASM_FLAGS = >> CMakeFiles/LimeOS_lib.dir/flags.make && echo ASM_DEFINES = >> CMakeFiles/LimeOS_lib.dir/flags.make)
add_library(myObjects OBJECT ${SRCS})
add_executable(LimeOS $<TARGET_OBJECTS:myObjects>)
add_library(LimeOS_lib SHARED $<TARGET_OBJECTS:myObjects>)
add_dependencies(LimeOS_lib _shared_lib_patch)
set_target_properties(LimeOS PROPERTIES OUTPUT_NAME "LimeOS.bin")
set_target_properties(LimeOS_lib PROPERTIES OUTPUT_NAME "kernel")