from conan import ConanFile from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout from conan.tools.env import VirtualBuildEnv class KernelConan(ConanFile): name = "kernel" description = "The kernel of TeachOS" version = "0.0.1" package_type = "application" homepage = "https://gitlab.ost.ch/teachos/kernel" settings = [ "arch", "build_type", "compiler", ] tool_requires = [ "cmake/[~3.27]", "gcc/13.2.0@teachos/stable", ] def build(self): cmake = CMake(self) cmake.configure() cmake.build() def generate(self): build_environment = VirtualBuildEnv(self) build_environment.generate() dependencies = CMakeDeps(self) dependencies.generate() toolchain = CMakeToolchain(self) toolchain.cache_variables["CMAKE_TRY_COMPILE_TARGET_TYPE"] = "STATIC_LIBRARY" toolchain.variables["TEACHOS_DESCRIPTION"] = self.description toolchain.variables["TEACHOS_HOMEPAGE_URL"] = self.homepage toolchain.variables["TEACHOS_VERSION"] = self.version toolchain.blocks["teachos_cmake_modules"] = CMakeModulesPathBlock toolchain.blocks["teachos_cmake_modules"].values["root"] = self.source_folder toolchain.blocks["teachos_platform"] = PlatformIncludeBlock toolchain.blocks["teachos_platform"].values["platform"] = self.settings.arch toolchain.blocks.remove("cmake_flags_init") toolchain.blocks.remove("arch_flags") toolchain.generate() def layout(self): cmake_layout(self, src_folder="source") class PlatformIncludeBlock: template = 'include("{{platform}}")' class CMakeModulesPathBlock: template = 'list(APPEND CMAKE_MODULE_PATH "{{root}}/cmake/Modules" "{{root}}/cmake/Platforms")'