diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index 65d46afd2b..8978869ce3 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -516,7 +516,5 @@ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/kernel.map" DESTINATION res) serenity_install_headers(Kernel) serenity_install_sources(Kernel) -if (NOT "${SERENITY_ARCH}" STREQUAL "aarch64") - add_subdirectory(Prekernel) -endif() +add_subdirectory(Prekernel) add_subdirectory(Modules) diff --git a/Kernel/Prekernel/Arch/aarch64/boot.S b/Kernel/Prekernel/Arch/aarch64/boot.S new file mode 100644 index 0000000000..25c0fcb7ea --- /dev/null +++ b/Kernel/Prekernel/Arch/aarch64/boot.S @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2021, Nico Weber + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +.text + +.global start +.type start, @function +start: + b Lhalt + +Lhalt: + wfi + b Lhalt diff --git a/Kernel/Prekernel/CMakeLists.txt b/Kernel/Prekernel/CMakeLists.txt index 8501985556..9c71f6bd70 100644 --- a/Kernel/Prekernel/CMakeLists.txt +++ b/Kernel/Prekernel/CMakeLists.txt @@ -1,16 +1,30 @@ set(SOURCES - Arch/x86/boot.S - Arch/x86/multiboot.S - init.cpp - UBSanitizer.cpp - ../MiniStdLib.cpp - ../../Userland/Libraries/LibELF/Relocation.cpp ) +if ("${SERENITY_ARCH}" STREQUAL "aarch64") + set(SOURCES + ${SOURCES} + Arch/aarch64/boot.S + ) +else() + set(SOURCES + ${SOURCES} + Arch/x86/boot.S + Arch/x86/multiboot.S + # FIXME: Eventually, some of these should build on aarch64 too. + UBSanitizer.cpp + init.cpp + ../MiniStdLib.cpp + ../../Userland/Libraries/LibELF/Relocation.cpp + ) +endif() + if ("${SERENITY_ARCH}" STREQUAL "i686") set(PREKERNEL_TARGET Prekernel32) -else() +elseif ("${SERENITY_ARCH}" STREQUAL "x86_64") set(PREKERNEL_TARGET Prekernel64) +else() + set(PREKERNEL_TARGET Prekernel) endif() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static") @@ -27,11 +41,13 @@ else() target_link_libraries(${PREKERNEL_TARGET} gcc supc++) endif() -add_custom_command( - TARGET ${PREKERNEL_TARGET} POST_BUILD - COMMAND ${CMAKE_OBJCOPY} -O elf32-i386 ${CMAKE_CURRENT_BINARY_DIR}/${PREKERNEL_TARGET} ${CMAKE_CURRENT_BINARY_DIR}/Prekernel - BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/Prekernel -) +if ("${SERENITY_ARCH}" STREQUAL "i686" OR "${SERENITY_ARCH}" STREQUAL "x86_64") + add_custom_command( + TARGET ${PREKERNEL_TARGET} POST_BUILD + COMMAND ${CMAKE_OBJCOPY} -O elf32-i386 ${CMAKE_CURRENT_BINARY_DIR}/${PREKERNEL_TARGET} ${CMAKE_CURRENT_BINARY_DIR}/Prekernel + BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/Prekernel + ) +endif() install(FILES "${CMAKE_CURRENT_BINARY_DIR}/Prekernel" DESTINATION boot)