From 6ffe96d1e3f0289c2070e050cf8e1a30288e6d91 Mon Sep 17 00:00:00 2001 From: Alexey Gavrilov Date: Fri, 27 Mar 2026 14:03:55 +0700 Subject: Cmake build generator support: build stage Multi-target architecture implementation: each root source code directory presents the one *INTERFACE* target to it's subdirectory subtargets that link only as *STATIC* library. For instance, *arch* directory presents *Architecture* target then *Architecture* target has *CPUID*, *IO*, *PORT* and etc. dependencies Exact order of linking targets is: boot.o CRTIBUNDLE CRTNBUNDLE. Sequence destruction cause to UB. Please to pay attention to this. TODO - Debug information - Build type - Toolchain file - Image creation - Build by WinGW compiler on Windows platform (optional) Signed-off-by: Alexey Gavrilov --- include/CMakeLists.txt | 27 +++++++++++++++++++++++++++ include/MemoryOperations.h | 2 +- include/StringOperations.h | 2 +- include/Templates.h | 2 +- include/TypeConverter.h | 2 +- include/Types.h | 29 +++++++++++++++++++++++++++++ include/containers/CMakeLists.txt | 10 ++++++++++ include/types.h | 29 ----------------------------- 8 files changed, 70 insertions(+), 33 deletions(-) create mode 100644 include/CMakeLists.txt create mode 100644 include/Types.h create mode 100644 include/containers/CMakeLists.txt delete mode 100644 include/types.h (limited to 'include') diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt new file mode 100644 index 0000000..1b06451 --- /dev/null +++ b/include/CMakeLists.txt @@ -0,0 +1,27 @@ +add_library(Include STATIC) + +target_sources(Include + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/MemoryOperations.cpp + ${CMAKE_CURRENT_LIST_DIR}/StringOperations.cpp + ${CMAKE_CURRENT_LIST_DIR}/TypeConverter.cpp +) + +target_sources(Include + PUBLIC + FILE_SET HEADERS + FILES + ${CMAKE_CURRENT_LIST_DIR}/ISingleton.h + ${CMAKE_CURRENT_LIST_DIR}/MemoryOperations.h + ${CMAKE_CURRENT_LIST_DIR}/StringOperations.h + ${CMAKE_CURRENT_LIST_DIR}/Templates.h + ${CMAKE_CURRENT_LIST_DIR}/TypeConverter.h + ${CMAKE_CURRENT_LIST_DIR}/Types.h +) + +add_subdirectory(containers) + +# Link include library to all consumers +target_link_libraries(Architecture INTERFACE Include) +target_link_libraries(Kernel INTERFACE Include) +target_link_libraries(Drivers INTERFACE Include) diff --git a/include/MemoryOperations.h b/include/MemoryOperations.h index 046ca1d..ef116dd 100644 --- a/include/MemoryOperations.h +++ b/include/MemoryOperations.h @@ -1,7 +1,7 @@ #ifndef MEMORYOPERATIONS_H #define MEMORYOPERATIONS_H -#include +#include class MemoryOperations diff --git a/include/StringOperations.h b/include/StringOperations.h index 5d2826c..53519fe 100644 --- a/include/StringOperations.h +++ b/include/StringOperations.h @@ -1,7 +1,7 @@ #ifndef STRINGOPERATIONS_H #define STRINGOPERATIONS_H -#include +#include class MemArea diff --git a/include/Templates.h b/include/Templates.h index 8a1bd95..00b97d3 100644 --- a/include/Templates.h +++ b/include/Templates.h @@ -2,7 +2,7 @@ #define TEMPLATES_H -#include +#include template struct constant diff --git a/include/TypeConverter.h b/include/TypeConverter.h index f9db95c..8b426b9 100644 --- a/include/TypeConverter.h +++ b/include/TypeConverter.h @@ -1,7 +1,7 @@ #ifndef TYPECONVERTER_H #define TYPECONVERTER_H -#include +#include class IntConverter { diff --git a/include/Types.h b/include/Types.h new file mode 100644 index 0000000..9f59063 --- /dev/null +++ b/include/Types.h @@ -0,0 +1,29 @@ +#ifndef TYPES_H +#define TYPES_H + +#define __IAPC + +#define NULL 0 + +#if defined(__IAPC) +typedef unsigned char uint8; +typedef unsigned short int uint16; +typedef unsigned long uint32; +typedef unsigned long long uint64; + +#if defined(__x86_64__) + typedef uint64 uword; +#else + typedef uint32 uword; +#endif + +#if defined(__x86_64) || defined(__i686) + typedef uint64 uintptr; +#else + typedef uint32 uintptr; +#endif +#else + #error IA-PC only support +#endif + +#endif diff --git a/include/containers/CMakeLists.txt b/include/containers/CMakeLists.txt new file mode 100644 index 0000000..aab0387 --- /dev/null +++ b/include/containers/CMakeLists.txt @@ -0,0 +1,10 @@ +add_library(ContainersHeaders INTERFACE) + +target_sources(ContainersHeaders + PUBLIC + FILE_SET HEADERS + FILES + ${CMAKE_CURRENT_LIST_DIR}/Tuple.h +) + +target_link_libraries(Include PUBLIC ContainersHeaders) diff --git a/include/types.h b/include/types.h deleted file mode 100644 index 9f59063..0000000 --- a/include/types.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef TYPES_H -#define TYPES_H - -#define __IAPC - -#define NULL 0 - -#if defined(__IAPC) -typedef unsigned char uint8; -typedef unsigned short int uint16; -typedef unsigned long uint32; -typedef unsigned long long uint64; - -#if defined(__x86_64__) - typedef uint64 uword; -#else - typedef uint32 uword; -#endif - -#if defined(__x86_64) || defined(__i686) - typedef uint64 uintptr; -#else - typedef uint32 uintptr; -#endif -#else - #error IA-PC only support -#endif - -#endif -- cgit v1.2.3