diff --git a/Kernel/Prekernel/Arch/aarch64/Aarch64_asm_utils.S b/Kernel/Arch/aarch64/Aarch64_asm_utils.S similarity index 100% rename from Kernel/Prekernel/Arch/aarch64/Aarch64_asm_utils.S rename to Kernel/Arch/aarch64/Aarch64_asm_utils.S diff --git a/Kernel/Prekernel/Arch/aarch64/Aarch64_asm_utils.h b/Kernel/Arch/aarch64/Aarch64_asm_utils.h similarity index 100% rename from Kernel/Prekernel/Arch/aarch64/Aarch64_asm_utils.h rename to Kernel/Arch/aarch64/Aarch64_asm_utils.h diff --git a/Kernel/Prekernel/Arch/aarch64/BootPPMParser.cpp b/Kernel/Arch/aarch64/BootPPMParser.cpp similarity index 100% rename from Kernel/Prekernel/Arch/aarch64/BootPPMParser.cpp rename to Kernel/Arch/aarch64/BootPPMParser.cpp diff --git a/Kernel/Prekernel/Arch/aarch64/BootPPMParser.h b/Kernel/Arch/aarch64/BootPPMParser.h similarity index 100% rename from Kernel/Prekernel/Arch/aarch64/BootPPMParser.h rename to Kernel/Arch/aarch64/BootPPMParser.h diff --git a/Kernel/Prekernel/Arch/aarch64/Framebuffer.cpp b/Kernel/Arch/aarch64/Framebuffer.cpp similarity index 95% rename from Kernel/Prekernel/Arch/aarch64/Framebuffer.cpp rename to Kernel/Arch/aarch64/Framebuffer.cpp index acc74a35ec..fb99de9adf 100644 --- a/Kernel/Prekernel/Arch/aarch64/Framebuffer.cpp +++ b/Kernel/Arch/aarch64/Framebuffer.cpp @@ -4,9 +4,9 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include -#include -#include +#include +#include +#include namespace Prekernel { diff --git a/Kernel/Prekernel/Arch/aarch64/Framebuffer.h b/Kernel/Arch/aarch64/Framebuffer.h similarity index 100% rename from Kernel/Prekernel/Arch/aarch64/Framebuffer.h rename to Kernel/Arch/aarch64/Framebuffer.h diff --git a/Kernel/Prekernel/Arch/aarch64/FramebufferMailboxMessages.h b/Kernel/Arch/aarch64/FramebufferMailboxMessages.h similarity index 97% rename from Kernel/Prekernel/Arch/aarch64/FramebufferMailboxMessages.h rename to Kernel/Arch/aarch64/FramebufferMailboxMessages.h index 672857ac31..7dab801b73 100644 --- a/Kernel/Prekernel/Arch/aarch64/FramebufferMailboxMessages.h +++ b/Kernel/Arch/aarch64/FramebufferMailboxMessages.h @@ -6,7 +6,7 @@ #pragma once -#include +#include namespace Prekernel { diff --git a/Kernel/Prekernel/Arch/aarch64/GPIO.cpp b/Kernel/Arch/aarch64/GPIO.cpp similarity index 97% rename from Kernel/Prekernel/Arch/aarch64/GPIO.cpp rename to Kernel/Arch/aarch64/GPIO.cpp index 3a0b8b40c7..bffba6bade 100644 --- a/Kernel/Prekernel/Arch/aarch64/GPIO.cpp +++ b/Kernel/Arch/aarch64/GPIO.cpp @@ -4,8 +4,8 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include -#include +#include +#include extern "C" void wait_cycles(int n); diff --git a/Kernel/Prekernel/Arch/aarch64/GPIO.h b/Kernel/Arch/aarch64/GPIO.h similarity index 100% rename from Kernel/Prekernel/Arch/aarch64/GPIO.h rename to Kernel/Arch/aarch64/GPIO.h diff --git a/Kernel/Prekernel/Arch/aarch64/MMIO.cpp b/Kernel/Arch/aarch64/MMIO.cpp similarity index 77% rename from Kernel/Prekernel/Arch/aarch64/MMIO.cpp rename to Kernel/Arch/aarch64/MMIO.cpp index 2cfdec17fc..a6b270a17d 100644 --- a/Kernel/Prekernel/Arch/aarch64/MMIO.cpp +++ b/Kernel/Arch/aarch64/MMIO.cpp @@ -4,8 +4,8 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include -#include +#include +#include namespace Prekernel { diff --git a/Kernel/Prekernel/Arch/aarch64/MMIO.h b/Kernel/Arch/aarch64/MMIO.h similarity index 100% rename from Kernel/Prekernel/Arch/aarch64/MMIO.h rename to Kernel/Arch/aarch64/MMIO.h diff --git a/Kernel/Prekernel/Arch/aarch64/Mailbox.cpp b/Kernel/Arch/aarch64/Mailbox.cpp similarity index 97% rename from Kernel/Prekernel/Arch/aarch64/Mailbox.cpp rename to Kernel/Arch/aarch64/Mailbox.cpp index 3f52002adc..d36a5305b4 100644 --- a/Kernel/Prekernel/Arch/aarch64/Mailbox.cpp +++ b/Kernel/Arch/aarch64/Mailbox.cpp @@ -4,8 +4,8 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include -#include +#include +#include namespace Prekernel { diff --git a/Kernel/Prekernel/Arch/aarch64/Mailbox.h b/Kernel/Arch/aarch64/Mailbox.h similarity index 100% rename from Kernel/Prekernel/Arch/aarch64/Mailbox.h rename to Kernel/Arch/aarch64/Mailbox.h diff --git a/Kernel/Prekernel/Arch/aarch64/MainIdRegister.cpp b/Kernel/Arch/aarch64/MainIdRegister.cpp similarity index 82% rename from Kernel/Prekernel/Arch/aarch64/MainIdRegister.cpp rename to Kernel/Arch/aarch64/MainIdRegister.cpp index 377d5c8e27..9b363a72b9 100644 --- a/Kernel/Prekernel/Arch/aarch64/MainIdRegister.cpp +++ b/Kernel/Arch/aarch64/MainIdRegister.cpp @@ -4,7 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include +#include namespace Prekernel { diff --git a/Kernel/Prekernel/Arch/aarch64/MainIdRegister.h b/Kernel/Arch/aarch64/MainIdRegister.h similarity index 100% rename from Kernel/Prekernel/Arch/aarch64/MainIdRegister.h rename to Kernel/Arch/aarch64/MainIdRegister.h diff --git a/Kernel/Prekernel/Arch/aarch64/Prekernel.h b/Kernel/Arch/aarch64/Prekernel.h similarity index 100% rename from Kernel/Prekernel/Arch/aarch64/Prekernel.h rename to Kernel/Arch/aarch64/Prekernel.h diff --git a/Kernel/Prekernel/Arch/aarch64/PrekernelCommon.cpp b/Kernel/Arch/aarch64/PrekernelCommon.cpp similarity index 80% rename from Kernel/Prekernel/Arch/aarch64/PrekernelCommon.cpp rename to Kernel/Arch/aarch64/PrekernelCommon.cpp index 6a24efda4f..5035ae5ab8 100644 --- a/Kernel/Prekernel/Arch/aarch64/PrekernelCommon.cpp +++ b/Kernel/Arch/aarch64/PrekernelCommon.cpp @@ -4,10 +4,10 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include +#include #include -#include +#include namespace Prekernel { diff --git a/Kernel/Prekernel/Arch/aarch64/PrekernelExceptions.cpp b/Kernel/Arch/aarch64/PrekernelExceptions.cpp similarity index 96% rename from Kernel/Prekernel/Arch/aarch64/PrekernelExceptions.cpp rename to Kernel/Arch/aarch64/PrekernelExceptions.cpp index 03f1a43591..9feb7fb821 100644 --- a/Kernel/Prekernel/Arch/aarch64/PrekernelExceptions.cpp +++ b/Kernel/Arch/aarch64/PrekernelExceptions.cpp @@ -5,9 +5,9 @@ */ #include +#include +#include #include -#include -#include extern "C" void enter_el2_from_el3(); extern "C" void enter_el1_from_el2(); diff --git a/Kernel/Prekernel/Arch/aarch64/PrekernelMMU.cpp b/Kernel/Arch/aarch64/PrekernelMMU.cpp similarity index 97% rename from Kernel/Prekernel/Arch/aarch64/PrekernelMMU.cpp rename to Kernel/Arch/aarch64/PrekernelMMU.cpp index 7aa1c6593a..38c953b600 100644 --- a/Kernel/Prekernel/Arch/aarch64/PrekernelMMU.cpp +++ b/Kernel/Arch/aarch64/PrekernelMMU.cpp @@ -6,12 +6,12 @@ #include -#include +#include #include +#include #include -#include -#include +#include // Documentation here for Aarch64 Address Translations // https://documentation-service.arm.com/static/5efa1d23dbdee951c1ccdec5?token= diff --git a/Kernel/Prekernel/Arch/aarch64/SerenityLogoRGB.ppm b/Kernel/Arch/aarch64/SerenityLogoRGB.ppm similarity index 100% rename from Kernel/Prekernel/Arch/aarch64/SerenityLogoRGB.ppm rename to Kernel/Arch/aarch64/SerenityLogoRGB.ppm diff --git a/Kernel/Prekernel/Arch/aarch64/Timer.cpp b/Kernel/Arch/aarch64/Timer.cpp similarity index 91% rename from Kernel/Prekernel/Arch/aarch64/Timer.cpp rename to Kernel/Arch/aarch64/Timer.cpp index b40fe8cf7c..0a703c180b 100644 --- a/Kernel/Prekernel/Arch/aarch64/Timer.cpp +++ b/Kernel/Arch/aarch64/Timer.cpp @@ -4,10 +4,10 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include -#include -#include -#include +#include +#include +#include +#include namespace Prekernel { diff --git a/Kernel/Prekernel/Arch/aarch64/Timer.h b/Kernel/Arch/aarch64/Timer.h similarity index 100% rename from Kernel/Prekernel/Arch/aarch64/Timer.h rename to Kernel/Arch/aarch64/Timer.h diff --git a/Kernel/Prekernel/Arch/aarch64/UART.cpp b/Kernel/Arch/aarch64/UART.cpp similarity index 95% rename from Kernel/Prekernel/Arch/aarch64/UART.cpp rename to Kernel/Arch/aarch64/UART.cpp index 4c4bbce121..36852b6fce 100644 --- a/Kernel/Prekernel/Arch/aarch64/UART.cpp +++ b/Kernel/Arch/aarch64/UART.cpp @@ -4,10 +4,10 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include -#include -#include -#include +#include +#include +#include +#include namespace Prekernel { diff --git a/Kernel/Prekernel/Arch/aarch64/UART.h b/Kernel/Arch/aarch64/UART.h similarity index 100% rename from Kernel/Prekernel/Arch/aarch64/UART.h rename to Kernel/Arch/aarch64/UART.h diff --git a/Kernel/Prekernel/Arch/aarch64/Utils.cpp b/Kernel/Arch/aarch64/Utils.cpp similarity index 76% rename from Kernel/Prekernel/Arch/aarch64/Utils.cpp rename to Kernel/Arch/aarch64/Utils.cpp index a8728dca5e..92d2f3a7d8 100644 --- a/Kernel/Prekernel/Arch/aarch64/Utils.cpp +++ b/Kernel/Arch/aarch64/Utils.cpp @@ -4,8 +4,8 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include -#include +#include +#include void Prekernel::dbgln(const char* text) { diff --git a/Kernel/Prekernel/Arch/aarch64/Utils.h b/Kernel/Arch/aarch64/Utils.h similarity index 100% rename from Kernel/Prekernel/Arch/aarch64/Utils.h rename to Kernel/Arch/aarch64/Utils.h diff --git a/Kernel/Prekernel/Arch/aarch64/boot.S b/Kernel/Arch/aarch64/boot.S similarity index 100% rename from Kernel/Prekernel/Arch/aarch64/boot.S rename to Kernel/Arch/aarch64/boot.S diff --git a/Kernel/Prekernel/Arch/aarch64/init.cpp b/Kernel/Arch/aarch64/init.cpp similarity index 93% rename from Kernel/Prekernel/Arch/aarch64/init.cpp rename to Kernel/Arch/aarch64/init.cpp index 04d2fb4115..bce753da49 100644 --- a/Kernel/Prekernel/Arch/aarch64/init.cpp +++ b/Kernel/Arch/aarch64/init.cpp @@ -10,14 +10,14 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include static void draw_logo(); static u32 query_firmware_version(); diff --git a/Kernel/Prekernel/Arch/aarch64/linker.ld b/Kernel/Arch/aarch64/linker.ld similarity index 100% rename from Kernel/Prekernel/Arch/aarch64/linker.ld rename to Kernel/Arch/aarch64/linker.ld diff --git a/Kernel/Prekernel/Arch/aarch64/vector_table.S b/Kernel/Arch/aarch64/vector_table.S similarity index 100% rename from Kernel/Prekernel/Arch/aarch64/vector_table.S rename to Kernel/Arch/aarch64/vector_table.S diff --git a/Kernel/linker.ld b/Kernel/Arch/x86/linker.ld similarity index 100% rename from Kernel/linker.ld rename to Kernel/Arch/x86/linker.ld diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index 893ac4cbc5..8686e6719c 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -386,15 +386,31 @@ if (NOT "${SERENITY_ARCH}" STREQUAL "aarch64") ) else() set(SOURCES - ${SOURCES} - ${AK_SOURCES} + Arch/aarch64/BootPPMParser.cpp + Arch/aarch64/GPIO.cpp + Arch/aarch64/Framebuffer.cpp + Arch/aarch64/Mailbox.cpp + Arch/aarch64/MainIdRegister.cpp + Arch/aarch64/MMIO.cpp + Arch/aarch64/Timer.cpp + Arch/aarch64/UART.cpp + Arch/aarch64/Utils.cpp + + # Preload specific + Arch/aarch64/init.cpp + Arch/aarch64/PrekernelMMU.cpp + Arch/aarch64/PrekernelExceptions.cpp + Arch/aarch64/PrekernelCommon.cpp + + # Assembly + Arch/aarch64/boot.S + Arch/aarch64/Aarch64_asm_utils.S + Arch/aarch64/vector_table.S - Arch/aarch64/dummy.cpp Arch/aarch64/SmapDisabler.cpp Arch/aarch64/ScopedCritical.cpp - StdLib.cpp MiniStdLib.cpp - UBSanitizer.cpp + Prekernel/UBSanitizer.cpp ) # Otherwise linker errors e.g undefined reference to `__aarch64_cas8_acq_rel' @@ -492,6 +508,10 @@ if (ENABLE_KERNEL_ADDRESS_SANITIZER) add_link_options(-fsanitize=kernel-address) endif() +if ("${SERENITY_ARCH}" STREQUAL "aarch64") + add_compile_options(-fno-threadsafe-statics) +endif() + add_compile_definitions(KERNEL) add_link_options(LINKER:-z,notext) @@ -501,17 +521,22 @@ endif() add_executable(Kernel ${SOURCES}) add_dependencies(Kernel generate_EscapeSequenceStateMachine.h) -add_custom_command( - OUTPUT linker.ld - COMMAND "${CMAKE_CXX_COMPILER}" ${TARGET_STRING} -E -P -x c -I${CMAKE_CURRENT_SOURCE_DIR}/.. "${CMAKE_CURRENT_SOURCE_DIR}/linker.ld" -o "${CMAKE_CURRENT_BINARY_DIR}/linker.ld" - MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/linker.ld" - COMMENT "Preprocessing linker.ld" - VERBATIM -) +if (NOT "${SERENITY_ARCH}" STREQUAL "aarch64") + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/linker.ld + COMMAND "${CMAKE_CXX_COMPILER}" ${TARGET_STRING} -E -P -x c -I${CMAKE_CURRENT_SOURCE_DIR}/.. "${CMAKE_CURRENT_SOURCE_DIR}/Arch/x86/linker.ld" -o "${CMAKE_CURRENT_BINARY_DIR}/linker.ld" + MAIN_DEPENDENCY "Arch/x86/linker.ld" + COMMENT "Preprocessing linker.ld" + VERBATIM + ) -add_custom_target(generate_kernel_linker_script DEPENDS linker.ld) -target_link_options(Kernel PRIVATE LINKER:-T ${CMAKE_CURRENT_BINARY_DIR}/linker.ld -nostdlib -nodefaultlibs) -set_target_properties(Kernel PROPERTIES LINK_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/linker.ld") + add_custom_target(generate_kernel_linker_script DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/linker.ld) + target_link_options(Kernel PRIVATE LINKER:-T ${CMAKE_CURRENT_BINARY_DIR}/linker.ld -nostdlib -nodefaultlibs) + set_target_properties(Kernel PROPERTIES LINK_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/linker.ld") +else() + target_link_options(Kernel PRIVATE LINKER:-T ${CMAKE_CURRENT_SOURCE_DIR}/Arch/aarch64/linker.ld -nostdlib LINKER:--no-pie) + set_target_properties(Kernel PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/Arch/aarch64/linker.ld) +endif() if (ENABLE_KERNEL_LTO) include(CheckIPOSupported) @@ -532,20 +557,32 @@ if (NOT "${SERENITY_ARCH}" STREQUAL "aarch64") endif() add_custom_command( - TARGET Kernel POST_BUILD - COMMAND ${CMAKE_COMMAND} -E env NM=${CMAKE_NM} sh ${CMAKE_CURRENT_SOURCE_DIR}/mkmap.sh - COMMAND ${CMAKE_COMMAND} -E env OBJCOPY=${CMAKE_OBJCOPY} sh ${CMAKE_CURRENT_SOURCE_DIR}/embedmap.sh - COMMAND ${CMAKE_OBJCOPY} --only-keep-debug Kernel Kernel.debug - COMMAND ${CMAKE_OBJCOPY} --strip-debug Kernel - COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink=Kernel.debug Kernel - BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/kernel.map + TARGET Kernel POST_BUILD + COMMAND ${CMAKE_COMMAND} -E env NM=${CMAKE_NM} sh ${CMAKE_CURRENT_SOURCE_DIR}/mkmap.sh + COMMAND ${CMAKE_COMMAND} -E env OBJCOPY=${CMAKE_OBJCOPY} sh ${CMAKE_CURRENT_SOURCE_DIR}/embedmap.sh + COMMAND ${CMAKE_OBJCOPY} --only-keep-debug Kernel Kernel.debug + COMMAND ${CMAKE_OBJCOPY} --strip-debug Kernel + COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink=Kernel.debug Kernel + BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/kernel.map ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/Kernel" DESTINATION boot) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/Kernel.debug" DESTINATION boot) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/kernel.map" DESTINATION res) +if ("${SERENITY_ARCH}" STREQUAL "aarch64") + embed_resource(Kernel serenity_boot_logo "Arch/aarch64/SerenityLogoRGB.ppm") + add_custom_command( + TARGET Kernel POST_BUILD + COMMAND ${CMAKE_OBJCOPY} -O binary Kernel kernel8.img + BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/kernel8.img + ) +endif() + serenity_install_headers(Kernel) serenity_install_sources(Kernel) -add_subdirectory(Prekernel) +# aarch64 does not need a Prekernel +if (NOT "${SERENITY_ARCH}" STREQUAL "aarch64") + add_subdirectory(Prekernel) +endif() diff --git a/Kernel/Prekernel/CMakeLists.txt b/Kernel/Prekernel/CMakeLists.txt index 5b3e1d3528..259e9831df 100644 --- a/Kernel/Prekernel/CMakeLists.txt +++ b/Kernel/Prekernel/CMakeLists.txt @@ -1,49 +1,19 @@ set(SOURCES UBSanitizer.cpp ../MiniStdLib.cpp -) -if ("${SERENITY_ARCH}" STREQUAL "aarch64") - set(SOURCES - ${SOURCES} - Arch/aarch64/BootPPMParser.cpp - Arch/aarch64/GPIO.cpp - Arch/aarch64/Framebuffer.cpp - Arch/aarch64/Mailbox.cpp - Arch/aarch64/MainIdRegister.cpp - Arch/aarch64/MMIO.cpp - Arch/aarch64/Timer.cpp - Arch/aarch64/UART.cpp - Arch/aarch64/Utils.cpp - - # Preload specific - Arch/aarch64/init.cpp - Arch/aarch64/PrekernelMMU.cpp - Arch/aarch64/PrekernelExceptions.cpp - Arch/aarch64/PrekernelCommon.cpp - - # Assembly - Arch/aarch64/boot.S - Arch/aarch64/Aarch64_asm_utils.S - Arch/aarch64/vector_table.S + boot.S + multiboot.S + init.cpp + ../../Userland/Libraries/LibELF/Relocation.cpp ) -else() - set(SOURCES - ${SOURCES} - Arch/x86/boot.S - Arch/x86/multiboot.S - # FIXME: Eventually, some of these should build on aarch64 too. - init.cpp - ../../Userland/Libraries/LibELF/Relocation.cpp - ) -endif() if ("${SERENITY_ARCH}" STREQUAL "i686") set(PREKERNEL_TARGET Prekernel32) elseif ("${SERENITY_ARCH}" STREQUAL "x86_64") set(PREKERNEL_TARGET Prekernel64) -else() - set(PREKERNEL_TARGET Prekernel) +elseif("${SERENITY_ARCH}" STREQUAL "aarch64") + message(SEND_ERROR "Prekernel is not needed on aarch64 and should not be compiled!") endif() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static") @@ -51,13 +21,8 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static") add_executable(${PREKERNEL_TARGET} ${SOURCES}) target_compile_options(${PREKERNEL_TARGET} PRIVATE -no-pie -fno-pic -fno-threadsafe-statics) -if ("${SERENITY_ARCH}" STREQUAL "aarch64") - set(PREKERNEL_LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/Arch/aarch64/linker.ld") -else() - set(PREKERNEL_LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/Arch/x86/linker.ld") -endif() -target_link_options(${PREKERNEL_TARGET} PRIVATE LINKER:-T ${PREKERNEL_LINKER_SCRIPT} -nostdlib LINKER:--no-pie) -set_target_properties(${PREKERNEL_TARGET} PROPERTIES LINK_DEPENDS ${PREKERNEL_LINKER_SCRIPT}) +target_link_options(${PREKERNEL_TARGET} PRIVATE LINKER:-T ${CMAKE_CURRENT_SOURCE_DIR}/linker.ld -nostdlib LINKER:--no-pie) +set_target_properties(${PREKERNEL_TARGET} PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/linker.ld) if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") target_link_libraries(${PREKERNEL_TARGET} PRIVATE gcc) @@ -65,23 +30,11 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang$") target_link_libraries(${PREKERNEL_TARGET} PRIVATE clang_rt.builtins) endif() -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() - -if ("${SERENITY_ARCH}" STREQUAL "aarch64") - embed_resource(Prekernel serenity_boot_logo "Arch/aarch64/SerenityLogoRGB.ppm") - - add_custom_command( - TARGET Prekernel POST_BUILD - COMMAND ${CMAKE_OBJCOPY} -O binary Prekernel kernel8.img - BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/kernel8.img - ) -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 +) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/Prekernel" DESTINATION boot) diff --git a/Kernel/Prekernel/Arch/x86/boot.S b/Kernel/Prekernel/boot.S similarity index 100% rename from Kernel/Prekernel/Arch/x86/boot.S rename to Kernel/Prekernel/boot.S diff --git a/Kernel/Prekernel/Arch/x86/linker.ld b/Kernel/Prekernel/linker.ld similarity index 100% rename from Kernel/Prekernel/Arch/x86/linker.ld rename to Kernel/Prekernel/linker.ld diff --git a/Kernel/Prekernel/Arch/x86/multiboot.S b/Kernel/Prekernel/multiboot.S similarity index 100% rename from Kernel/Prekernel/Arch/x86/multiboot.S rename to Kernel/Prekernel/multiboot.S diff --git a/Meta/run.sh b/Meta/run.sh index fc9e6152bf..b1ea1c2897 100755 --- a/Meta/run.sh +++ b/Meta/run.sh @@ -259,6 +259,16 @@ if [ "$NATIVE_WINDOWS_QEMU" -ne "1" ]; then -qmp unix:qmp-sock,server,nowait" fi +if [ "$SERENITY_ARCH" = "aarch64" ]; then + SERENITY_KERNEL_AND_INITRD=" + -kernel Kernel/Kernel + " +else + SERENITY_KERNEL_AND_INITRD=" + -kernel Kernel/Prekernel/Prekernel + -initrd Kernel/Kernel + " +fi [ -z "$SERENITY_COMMON_QEMU_ARGS" ] && SERENITY_COMMON_QEMU_ARGS=" @@ -370,8 +380,7 @@ elif [ "$SERENITY_RUN" = "qn" ]; then "$SERENITY_QEMU_BIN" \ $SERENITY_COMMON_QEMU_ARGS \ -device $SERENITY_ETHERNET_DEVICE_TYPE \ - -kernel Kernel/Prekernel/Prekernel \ - -initrd Kernel/Kernel \ + $SERENITY_KERNEL_AND_INITRD \ -append "${SERENITY_KERNEL_CMDLINE}" elif [ "$SERENITY_RUN" = "qtap" ]; then # Meta/run.sh qtap: qemu with tap @@ -383,8 +392,7 @@ elif [ "$SERENITY_RUN" = "qtap" ]; then $SERENITY_PACKET_LOGGING_ARG \ -netdev tap,ifname=tap0,id=br0 \ -device $SERENITY_ETHERNET_DEVICE_TYPE,netdev=br0 \ - -kernel Kernel/Prekernel/Prekernel \ - -initrd Kernel/Kernel \ + $SERENITY_KERNEL_AND_INITRD \ -append "${SERENITY_KERNEL_CMDLINE}" sudo ip tuntap del dev tap0 mode tap elif [ "$SERENITY_RUN" = "qgrub" ] || [ "$SERENITY_RUN" = "qextlinux" ]; then @@ -403,8 +411,7 @@ elif [ "$SERENITY_RUN" = "q35" ]; then $SERENITY_VIRT_TECH_ARG \ -netdev user,id=breh,hostfwd=tcp:127.0.0.1:8888-10.0.2.15:8888,hostfwd=tcp:127.0.0.1:8823-10.0.2.15:23 \ -device $SERENITY_ETHERNET_DEVICE_TYPE,netdev=breh \ - -kernel Kernel/Prekernel/Prekernel \ - -initrd Kernel/Kernel \ + $SERENITY_KERNEL_AND_INITRD \ -append "${SERENITY_KERNEL_CMDLINE}" elif [ "$SERENITY_RUN" = "isapc" ]; then # Meta/run.sh q35: qemu (q35 chipset) with SerenityOS @@ -414,8 +421,7 @@ elif [ "$SERENITY_RUN" = "isapc" ]; then $SERENITY_VIRT_TECH_ARG \ -netdev user,id=breh,hostfwd=tcp:127.0.0.1:8888-10.0.2.15:8888,hostfwd=tcp:127.0.0.1:8823-10.0.2.15:23 \ -device ne2k_isa,netdev=breh \ - -kernel Kernel/Prekernel/Prekernel \ - -initrd Kernel/Kernel \ + $SERENITY_KERNEL_AND_INITRD \ -append "${SERENITY_KERNEL_CMDLINE}" elif [ "$SERENITY_RUN" = "microvm" ]; then # Meta/run.sh q35: qemu (q35 chipset) with SerenityOS @@ -425,8 +431,7 @@ elif [ "$SERENITY_RUN" = "microvm" ]; then $SERENITY_VIRT_TECH_ARG \ -netdev user,id=breh,hostfwd=tcp:127.0.0.1:8888-10.0.2.15:8888,hostfwd=tcp:127.0.0.1:8823-10.0.2.15:23 \ -device ne2k_isa,netdev=breh \ - -kernel Kernel/Prekernel/Prekernel \ - -initrd Kernel/Kernel \ + $SERENITY_KERNEL_AND_INITRD \ -append "${SERENITY_KERNEL_CMDLINE}" elif [ "$SERENITY_RUN" = "q35grub" ]; then # Meta/run.sh q35grub: qemu (q35 chipset) with SerenityOS, using a grub disk image @@ -455,8 +460,7 @@ elif [ "$SERENITY_RUN" = "ci" ]; then -nographic \ -display none \ -debugcon file:debug.log \ - -kernel Kernel/Prekernel/Prekernel \ - -initrd Kernel/Kernel \ + $SERENITY_KERNEL_AND_INITRD \ -append "${SERENITY_KERNEL_CMDLINE}" else # Meta/run.sh: qemu with user networking @@ -473,7 +477,6 @@ else $SERENITY_VIRT_TECH_ARG \ $SERENITY_PACKET_LOGGING_ARG \ $SERENITY_NETFLAGS \ - -kernel Kernel/Prekernel/Prekernel \ - -initrd Kernel/Kernel \ + $SERENITY_KERNEL_AND_INITRD \ -append "${SERENITY_KERNEL_CMDLINE}" fi