cmake_minimum_required(VERSION 3.26) if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "banan-os") message(FATAL_ERROR "CMAKE_SYSTEM_NAME is not banan-os") endif () #add_compile_options(-mno-sse -mno-sse2) add_compile_definitions(__enable_sse=1) project(banan-os CXX C ASM) set(BANAN_BASE_SYSROOT ${CMAKE_SOURCE_DIR}/base-sysroot.tar.gz) set(BANAN_INCLUDE ${BANAN_SYSROOT}/usr/include) set(BANAN_LIB ${BANAN_SYSROOT}/usr/lib) set(BANAN_BIN ${BANAN_SYSROOT}/usr/bin) set(BANAN_ETC ${BANAN_SYSROOT}/usr/etc) set(BANAN_SHARE ${BANAN_SYSROOT}/usr/share) set(BANAN_BOOT ${BANAN_SYSROOT}/boot) set(CMAKE_INSTALL_BINDIR ${BANAN_BIN}) set(CMAKE_INSTALL_SBINDIR ${BANAN_BIN}) set(CMAKE_INSTALL_LIBDIR ${BANAN_LIB}) set(CMAKE_INSTALL_INCLUDEDIR ${BANAN_INCLUDE}) set(CMAKE_INSTALL_SYSCONF ${BANAN_ETC}) set(CMAKE_INSTALL_MESSAGE NEVER) set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY True) # include headers of ${library} to ${target} function(banan_include_headers target library) target_include_directories(${target} PRIVATE $/include) endfunction() # include headers and link ${library} to ${target} function(banan_link_library target library) target_link_libraries(${target} PRIVATE ${library}) banan_include_headers(${target} ${library}) endfunction() # add install step for all header files of target function(banan_install_headers target) file(GLOB_RECURSE headers RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/include *.h) foreach(header ${headers}) get_filename_component(subdirectory ${header} DIRECTORY) install(FILES include/${header} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${subdirectory}) endforeach() target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) endfunction() add_subdirectory(kernel) add_subdirectory(bootloader) add_subdirectory(BAN) add_subdirectory(userspace) add_custom_target(sysroot COMMAND ${CMAKE_COMMAND} -E make_directory ${BANAN_SYSROOT} COMMAND cd ${BANAN_SYSROOT} && tar xf ${BANAN_BASE_SYSROOT} )