# Detect XTChain toolchain cmake_minimum_required(VERSION 3.19.0) if(NOT CMAKE_VERSION MATCHES "XTC") message(FATAL_ERROR "XTChain not detected or corrupted!") endif() # Lowercase target architecture string(TOLOWER ${ARCH} ARCH) # Validate and set architectures specific definitions if(ARCH STREQUAL "i686") add_definitions(-D__i386__ -D__i686__) elseif(ARCH STREQUAL "amd64") add_definitions(-D__amd64__ -D__x86_64__) else() message(FATAL_ERROR "Unknown target architecture (${ARCH}) set!") endif() # Print target architecture message("-- Target architecture: ${ARCH}") # Set the build type if(NOT BUILD_TYPE) set(BUILD_TYPE DEBUG) endif() string(TOUPPER ${BUILD_TYPE} BUILD_TYPE) # Set build type specific definitions if(BUILD_TYPE STREQUAL "DEBUG") add_definitions(-DDBG=1) set(CMAKE_BUILD_TYPE DEBUG) else() set(BUILD_TYPE RELEASE) set(CMAKE_BUILD_TYPE NONE) endif() # Print build type message("-- Target build type: ${BUILD_TYPE}") # Set toolchain file set(CMAKE_TOOLCHAIN_FILE "sdk/cmake/toolchain.cmake") # Set project name project(EXECTOS) # Load all the CMake SDK include(sdk/cmake/baseaddress/${ARCH}.cmake) include(sdk/cmake/emulation.cmake) include(sdk/cmake/functions.cmake) include(sdk/cmake/version.cmake) include(sdk/cmake/xtchain.cmake) # Enable compilers enable_language(ASM C CXX) # Add project specific definitions add_definitions(-D__XTOS__) add_definitions(-DXTOS_SOURCE_DIR="${EXECTOS_SOURCE_DIR}") add_definitions(-DXTOS_BINARY_DIR="${EXECTOS_BINARY_DIR}") # Set libraries target directory set(LIBRARY_OUTPUT_PATH ${EXECTOS_BINARY_DIR}/output/library CACHE PATH "Build directory" FORCE) # Compute __FILE__ definition file(RELATIVE_PATH _PATH_PREFIX ${EXECTOS_BINARY_DIR} ${EXECTOS_SOURCE_DIR}) add_compiler_flags(-D__RELFILE__="&__FILE__[__FILE__[0] == '.' ? sizeof \\\"${_PATH_PREFIX}\\\" - 1 : sizeof XTOS_SOURCE_DIR]") # Set the virtual disk image size (in MiB) set_disk_image_size(32) # Build all subprojects add_subdirectory(bootdata) add_subdirectory(drivers) add_subdirectory(xtldr) add_subdirectory(xtoskrnl)