import("//Meta/gn/build/serenity_target.gni") import("//Meta/gn/build/sysroot.gni") import("//Meta/gn/build/write_cmake_config.gni") assert(current_os == "serenity") declare_args() { # Turn off optimizations and up debug symbols for the kernel only enable_extra_kernel_debug_symbols = true # Enable UBSAN for kernel objects. Detects undefined behavior and traps. enable_kernel_undefined_sanitizer = true } group("Kernel") { deps = [ ":install_kernel" ] } write_cmake_config("kernel_debug_gen") { input = "Debug.h.in" output = "$target_gen_dir/Debug.h" deps = [ "//AK:ak_debug_gen" ] values = [ "AC97_DEBUG=", "AHCI_DEBUG=", "ACPI_DEBUG=", "APIC_DEBUG=", "APIC_SMP_DEBUG=", "ARP_DEBUG=", "ATA_DEBUG=", "BBFS_DEBUG=", "BXVGA_DEBUG=", "COMMIT_DEBUG=", "CONTEXT_SWITCH_DEBUG=", "DUMP_REGIONS_ON_CRASH=", "E1000_DEBUG=", "ETHERNET_DEBUG=", "EXEC_DEBUG=", "EXT2_BLOCKLIST_DEBUG=", "EXT2_DEBUG=", "EXT2_VERY_DEBUG=", "FAT_DEBUG=", "FORK_DEBUG=", "FUTEX_DEBUG=", "FUTEXQUEUE_DEBUG=", "HPET_COMPARATOR_DEBUG=", "HPET_DEBUG=", "ICMP_DEBUG=", "INTEL_GRAPHICS_DEBUG=", "INTEL_HDA_DEBUG=", "INTERRUPT_DEBUG=", "IO_DEBUG=", "IOAPIC_DEBUG=", "ISO9660_DEBUG=", "ISO9660_VERY_DEBUG=", "IPV4_DEBUG=", "IPV4_SOCKET_DEBUG=", "IRQ_DEBUG=", "KEYBOARD_DEBUG=", "KMALLOC_DEBUG=", "KMALLOC_VERIFY_NO_SPINLOCK_HELD=", "LOCAL_SOCKET_DEBUG=", "LOCK_DEBUG=", "LOCK_IN_CRITICAL_DEBUG=", "LOCK_RANK_ENFORCEMENT=", "LOCK_RESTORE_DEBUG=", "LOCK_SHARED_UPGRADE_DEBUG=", "LOCK_TRACE_DEBUG=", "LOOPBACK_DEBUG=", "MASTERPTY_DEBUG=", "MOUSE_DEBUG=", "MEMORY_DEVICE_DEBUG=", "MULTIPROCESSOR_DEBUG=", "NETWORK_TASK_DEBUG=", "NVME_DEBUG=", "OFFD_DEBUG=", "PAGE_FAULT_DEBUG=", "PATA_DEBUG=", "PCI_DEBUG=", "POLL_SELECT_DEBUG=", "PROCESS_DEBUG=", "PROCFS_DEBUG=", "PS2MOUSE_DEBUG=", "PTMX_DEBUG=", "ROUTING_DEBUG=", "RTL8168_DEBUG=", "SCHEDULER_DEBUG=", "SCHEDULER_RUNNABLE_DEBUG=", "SIGNAL_DEBUG=", "SLAVEPTY_DEBUG=", "SMP_DEBUG=", "SOCKET_DEBUG=", "STORAGE_DEVICE_DEBUG=", "SYSFS_DEBUG=", "TCP_DEBUG=", "TCP_SOCKET_DEBUG=", "THREAD_DEBUG=", "TTY_DEBUG=", "UDP_DEBUG=", "UHCI_DEBUG=", "UHCI_VERBOSE_DEBUG=", "USB_DEBUG=", "VFS_DEBUG=", "VMWARE_BACKDOOR_DEBUG=", "VIRTIO_DEBUG=", "VIRTUAL_CONSOLE_DEBUG=", "WAITBLOCK_DEBUG=", "WAITQUEUE_DEBUG=", ] } config("Kernel_config") { configs = [ "//AK:ak_headers" ] include_dirs = [ "//Userland/Libraries" ] cflags_cc = [] ldflags = [] defines = [ "KERNEL", "ENABLE_COMPILETIME_FORMAT_CHECK", "SANITIZE_PTRS", ] if (enable_extra_kernel_debug_symbols) { cflags_cc += [ "-Og", "-ggdb3", ] } else { cflags_cc += [ "-O2" ] } if (enable_kernel_undefined_sanitizer) { cflags_cc += [ "-fsanitize=undefined" ] ldflags = [ "-fsanitize=undefined" ] } cflags_cc += [ "-fsigned-char", "-Wno-unknown-warning-option", "-fno-rtti", "-ffreestanding", "-fbuiltin", "-fno-asynchronous-unwind-tables", "-fstack-protector-strong", "-fno-exceptions", "-fno-delete-null-pointer-checks", "-fno-semantic-interposition", "-fsized-deallocation", "-Wvla", "-nostdlib", ] ldflags += [ "-Wl,-z,notext", "-nostdlib", ] # Toolchain-specific flags if (serenity_toolchain == "GNU") { cflags_cc += [ "-fzero-call-used-regs=used-gpr", "-fstack-clash-protection", "-Wno-address-of-packed-member", "-Wno-dangling-reference", ] lib_dirs = [ "$toolchain_root/$serenity_arch-pc-serenity/lib", "$toolchain_root/lib/gcc/$serenity_arch-pc-serenity/$serenity_compiler_version", ] ldflags += [ "-Wl,-z,pack-relative-relocs" ] libs = [ "gcc" ] } else { assert(serenity_toolchain == "Clang", "") cflags_cc += [ "-Wno-address-of-packed-member", "-faligned-allocation", "-Wno-unused-const-variable", ] ldflags += [ "-Wl,--build-id=none", "-Wl,--pack-dyn-relocs=relr", ] # FIXME: Why doesn't the cmake need this path anymore? lib_dirs = [ "$toolchain_root/lib/clang/$serenity_compiler_version/lib/$serenity_arch-pc-serenity/" ] libs = [ "clang_rt.builtins" ] } # Architecture-specific flags if (current_cpu == "aarch64") { cflags_cc += [ "-mno-outline-atomics", "-Wno-nonnull", # FIXME: Remove once MemoryManager.cpp doesn't need it "-mgeneral-regs-only", "-fno-threadsafe-statics", # Unaligned memory access will cause a trap, so to make sure the compiler doesn't generate # those unaligned accesses, these flags are added. "-mstrict-align", "-Wno-cast-align", ] libs = [ "atomic" ] } else if (current_cpu == "x86_64") { cflags_cc += [ "-mno-80387", "-mno-mmx", "-mno-sse", "-mno-sse2", # Auto initialize trivial types on the stack, we use "pattern" as # it's the only option portable across compilers going forward. # # This is designed to help avoid uninitialized variables bugs and # information disclosures coming from the kernel stack. # # FIXME: It appears to conflict with something during the boot of the # aarch64 kernel, we should investigate and remove this special case. "-ftrivial-auto-var-init=pattern", "-mcmodel=large", "-mno-red-zone", ] if (serenity_toolchain == "GNU") { cflags_cc += [ "-faligned-new=8", "-mpreferred-stack-boundary=3", ] } else { assert(serenity_toolchain == "Clang", "") cflags_cc += [ "-fnew-alignment=8", "-mstack-alignment=8", ] } } # FIXME: KCOV flags # FIXME: Source based code coverage flags # FIXME: KASAN/KUBSAN flags # FIXME: IPO flags } source_set("kernel_heap") { configs += [ ":Kernel_config" ] sources = [ "Heap/kmalloc.cpp" ] deps = [ ":kernel_debug_gen", "//Userland/Libraries/LibC:install_libc_headers", ] } source_set("aarch64_no_mmu") { deps = [ ":kernel_debug_gen", "//Userland/Libraries/LibC:install_libc_headers", ] configs += [ ":Kernel_config" ] sources = [ "Arch/aarch64/Exceptions.cpp", "Arch/aarch64/MMU.cpp", "Arch/aarch64/RPi/MMIO.cpp", "Arch/aarch64/pre_init.cpp", ] # NOTE: These files cannot use a stack protector and sanitizers, as these will cause accesses to global variables to be inserted # by the compiler. The CPU cannot access global variables without the MMU as the kernel is linked for a virtual address in high memory. cflags_cc = [ "-fno-stack-protector", "-fno-sanitize=all", ] } source_set("mini_stdlib_sources") { deps = [ ":kernel_debug_gen", "//Userland/Libraries/LibC:install_libc_headers", ] configs += [ ":Kernel_config" ] sources = [ "Library/MiniStdLib.cpp" ] if (serenity_toolchain == "GNU") { # Prevent naively implemented string functions (like strlen) from being "optimized" into a call to themselves. cflags_cc = [ "-fno-tree-loop-distribution", "-fno-tree-loop-distribute-patterns", ] } } source_set("arch_sources") { deps = [ ":kernel_debug_gen", "//Userland/Libraries/LibC:install_libc_headers", "//Userland/Libraries/LibVT:generate_vt_state_machine(//Meta/gn/build/toolchain:serenity)", ] configs += [ ":Kernel_config" ] if (current_cpu == "x86_64") { sources = [ "Arch/Processor.cpp", "Arch/x86_64/ASM_wrapper.cpp", "Arch/x86_64/Boot/ap_setup.S", "Arch/x86_64/CMOS.cpp", "Arch/x86_64/CPU.cpp", "Arch/x86_64/CPUID.cpp", "Arch/x86_64/CurrentTime.cpp", "Arch/x86_64/DebugOutput.cpp", "Arch/x86_64/Delay.cpp", "Arch/x86_64/Firmware/ACPI/StaticParsing.cpp", "Arch/x86_64/Firmware/MultiProcessor/Parser.cpp", "Arch/x86_64/Firmware/PCBIOS/Mapper.cpp", "Arch/x86_64/Firmware/PCBIOS/SysFSComponent.cpp", "Arch/x86_64/Firmware/PCBIOS/SysFSDirectory.cpp", "Arch/x86_64/Hypervisor/BochsDisplayConnector.cpp", "Arch/x86_64/Hypervisor/VMWareBackdoor.cpp", "Arch/x86_64/I8042Reboot.cpp", "Arch/x86_64/ISABus/HID/VMWareMouseDevice.cpp", "Arch/x86_64/ISABus/I8042Controller.cpp", "Arch/x86_64/ISABus/IDEController.cpp", "Arch/x86_64/ISABus/SerialDevice.cpp", "Arch/x86_64/InterruptEntry.cpp", "Arch/x86_64/InterruptManagement.cpp", "Arch/x86_64/Interrupts.cpp", "Arch/x86_64/Interrupts/APIC.cpp", "Arch/x86_64/Interrupts/IOAPIC.cpp", "Arch/x86_64/Interrupts/PIC.cpp", "Arch/x86_64/PCI/Controller/HostBridge.cpp", "Arch/x86_64/PCI/IDELegacyModeController.cpp", "Arch/x86_64/PCI/Initializer.cpp", "Arch/x86_64/PCI/MSI.cpp", "Arch/x86_64/PCSpeaker.cpp", "Arch/x86_64/PageDirectory.cpp", "Arch/x86_64/PowerState.cpp", "Arch/x86_64/Processor.cpp", "Arch/x86_64/ProcessorInfo.cpp", "Arch/x86_64/RTC.cpp", "Arch/x86_64/SafeMem.cpp", "Arch/x86_64/Shutdown.cpp", "Arch/x86_64/SmapDisabler.cpp", "Arch/x86_64/SyscallEntry.cpp", "Arch/x86_64/Time/APICTimer.cpp", "Arch/x86_64/Time/HPET.cpp", "Arch/x86_64/Time/HPETComparator.cpp", "Arch/x86_64/Time/PIT.cpp", "Arch/x86_64/Time/RTC.cpp", "Arch/x86_64/TrapFrame.cpp", "Arch/x86_64/VGA/IOArbiter.cpp", # TODO: Share these with the aarch64 build "Interrupts/SpuriousInterruptHandler.cpp", "kprintf.cpp", ] } else { assert(current_cpu == "aarch64", "") deps = [ ":aarch64_no_mmu" ] sources = [ "Arch/Processor.cpp", "Arch/aarch64/BootPPMParser.cpp", "Arch/aarch64/CPUID.cpp", "Arch/aarch64/CurrentTime.cpp", "Arch/aarch64/Dummy.cpp", "Arch/aarch64/Firmware/ACPI/StaticParsing.cpp", "Arch/aarch64/InterruptManagement.cpp", "Arch/aarch64/Interrupts.cpp", "Arch/aarch64/MainIdRegister.cpp", "Arch/aarch64/PageDirectory.cpp", "Arch/aarch64/Panic.cpp", "Arch/aarch64/PowerState.cpp", "Arch/aarch64/Processor.cpp", "Arch/aarch64/RPi/DebugOutput.cpp", "Arch/aarch64/RPi/Framebuffer.cpp", "Arch/aarch64/RPi/GPIO.cpp", "Arch/aarch64/RPi/InterruptController.cpp", "Arch/aarch64/RPi/Mailbox.cpp", "Arch/aarch64/RPi/MiniUART.cpp", "Arch/aarch64/RPi/SDHostController.cpp", "Arch/aarch64/RPi/Timer.cpp", "Arch/aarch64/RPi/UART.cpp", "Arch/aarch64/RPi/Watchdog.cpp", "Arch/aarch64/SafeMem.cpp", "Arch/aarch64/SmapDisabler.cpp", "Arch/aarch64/TrapFrame.cpp", "Arch/aarch64/boot.S", "Arch/aarch64/kprintf.cpp", "Arch/aarch64/vector_table.S", ] } } source_set("lib_sources") { deps = [ ":kernel_debug_gen", "//Userland/Libraries/LibC:install_libc_headers", "//Userland/Libraries/LibVT:generate_vt_state_machine(//Meta/gn/build/toolchain:serenity)", ] configs += [ ":Kernel_config" ] sources = [ "//AK/DOSPackedTime.cpp", "//AK/Error.cpp", "//AK/Format.cpp", "//AK/GenericLexer.cpp", "//AK/Hex.cpp", "//AK/MemoryStream.cpp", "//AK/Stream.cpp", "//AK/StringBuilder.cpp", "//AK/StringUtils.cpp", "//AK/StringView.cpp", "//AK/Time.cpp", "//AK/UUID.cpp", "//Userland/Libraries/LibCrypto/Cipher/AES.cpp", "//Userland/Libraries/LibCrypto/Hash/SHA2.cpp", "//Userland/Libraries/LibEDID/DMT.cpp", "//Userland/Libraries/LibEDID/EDID.cpp", "//Userland/Libraries/LibEDID/VIC.cpp", "//Userland/Libraries/LibELF/Image.cpp", "//Userland/Libraries/LibELF/Validation.cpp", "//Userland/Libraries/LibPartition/DiskPartitionMetadata.cpp", "//Userland/Libraries/LibPartition/EBRPartitionTable.cpp", "//Userland/Libraries/LibPartition/GUIDPartitionTable.cpp", "//Userland/Libraries/LibPartition/MBRPartitionTable.cpp", "//Userland/Libraries/LibPartition/PartitionTable.cpp", "//Userland/Libraries/LibPartition/PartitionableDevice.cpp", "//Userland/Libraries/LibVT/EscapeSequenceParser.cpp", "//Userland/Libraries/LibVT/Line.cpp", "//Userland/Libraries/LibVT/Terminal.cpp", ] } action("generate_version_header") { script = "//Meta/gn/secondary/Kernel/generate_version_header.py" outputs = [ "$target_gen_dir/Version.h" ] args = [ rebase_path(outputs[0], root_build_dir) ] } if (current_cpu == "x86_64") { action("preprocess_linker_script") { script = "//Meta/gn/build/invoke_process_with_args.py" inputs = [ "Arch/x86_64/linker.ld" ] outputs = [ "$target_gen_dir/linker.ld" ] args = [ "$serenity_cxx", "-E", "-P", "-x", "c", rebase_path(inputs[0], root_build_dir), "-o", rebase_path(outputs[0], root_build_dir), ] } } executable("Kernel_bin") { configs += [ ":Kernel_config" ] deps = [ ":arch_sources", ":generate_version_header", ":kernel_debug_gen", ":kernel_heap", ":lib_sources", ":mini_stdlib_sources", "//Userland/Libraries/LibC:install_libc_headers", ] ldflags = [ "-static-pie" ] if (serenity_arch == "x86_64") { deps += [ ":preprocess_linker_script" ] ldflags += [ "-Wl,-T," + rebase_path("$target_gen_dir/linker.ld", root_build_dir) ] } else { assert(serenity_arch == "aarch64") ldflags += [ "-Wl,-T," + rebase_path("Arch/aarch64/linker.ld", root_build_dir) ] } sources = [ "Arch/DeferredCallPool.cpp", "Arch/PageFault.cpp", "Arch/init.cpp", "Boot/CommandLine.cpp", "Bus/PCI/API.cpp", "Bus/PCI/Access.cpp", "Bus/PCI/Controller/HostController.cpp", "Bus/PCI/Controller/MemoryBackedHostBridge.cpp", "Bus/PCI/Controller/VolumeManagementDevice.cpp", "Bus/PCI/Device.cpp", "Bus/PCI/DeviceIdentifier.cpp", "Bus/USB/UHCI/UHCIController.cpp", "Bus/USB/UHCI/UHCIRootHub.cpp", "Bus/USB/USBConfiguration.cpp", "Bus/USB/USBController.cpp", "Bus/USB/USBDevice.cpp", "Bus/USB/USBHub.cpp", "Bus/USB/USBManagement.cpp", "Bus/USB/USBPipe.cpp", "Bus/USB/USBTransfer.cpp", "Bus/VirtIO/Console.cpp", "Bus/VirtIO/ConsolePort.cpp", "Bus/VirtIO/Device.cpp", "Bus/VirtIO/Queue.cpp", "Bus/VirtIO/RNG.cpp", "Devices/AsyncDeviceRequest.cpp", "Devices/Audio/AC97/AC97.cpp", "Devices/Audio/Channel.cpp", "Devices/Audio/IntelHDA/Codec.cpp", "Devices/Audio/IntelHDA/Controller.cpp", "Devices/Audio/IntelHDA/Format.cpp", "Devices/Audio/IntelHDA/InterruptHandler.cpp", "Devices/Audio/IntelHDA/Stream.cpp", "Devices/Audio/Management.cpp", "Devices/BlockDevice.cpp", "Devices/CharacterDevice.cpp", "Devices/Device.cpp", "Devices/DeviceManagement.cpp", "Devices/GPU/Bochs/GraphicsAdapter.cpp", "Devices/GPU/Bochs/QEMUDisplayConnector.cpp", "Devices/GPU/Console/BootFramebufferConsole.cpp", "Devices/GPU/Console/ContiguousFramebufferConsole.cpp", "Devices/GPU/Console/GenericFramebufferConsole.cpp", "Devices/GPU/Console/VGATextModeConsole.cpp", "Devices/GPU/DisplayConnector.cpp", "Devices/GPU/Generic/DisplayConnector.cpp", "Devices/GPU/Intel/Auxiliary/GMBusConnector.cpp", "Devices/GPU/Intel/DisplayConnectorGroup.cpp", "Devices/GPU/Intel/NativeDisplayConnector.cpp", "Devices/GPU/Intel/NativeGraphicsAdapter.cpp", "Devices/GPU/Intel/Plane/DisplayPlane.cpp", "Devices/GPU/Intel/Plane/G33DisplayPlane.cpp", "Devices/GPU/Intel/Transcoder/AnalogDisplayTranscoder.cpp", "Devices/GPU/Intel/Transcoder/DisplayTranscoder.cpp", "Devices/GPU/Intel/Transcoder/PLL.cpp", "Devices/GPU/Management.cpp", "Devices/GPU/VMWare/Console.cpp", "Devices/GPU/VMWare/DisplayConnector.cpp", "Devices/GPU/VMWare/GraphicsAdapter.cpp", "Devices/GPU/VirtIO/Console.cpp", "Devices/GPU/VirtIO/DisplayConnector.cpp", "Devices/GPU/VirtIO/GPU3DDevice.cpp", "Devices/GPU/VirtIO/GraphicsAdapter.cpp", "Devices/Generic/ConsoleDevice.cpp", "Devices/Generic/DeviceControlDevice.cpp", "Devices/Generic/FullDevice.cpp", "Devices/Generic/MemoryDevice.cpp", "Devices/Generic/NullDevice.cpp", "Devices/Generic/RandomDevice.cpp", "Devices/Generic/SelfTTYDevice.cpp", "Devices/Generic/ZeroDevice.cpp", "Devices/HID/KeyboardDevice.cpp", "Devices/HID/Management.cpp", "Devices/HID/MouseDevice.cpp", "Devices/HID/PS2/KeyboardDevice.cpp", "Devices/HID/PS2/MouseDevice.cpp", "Devices/KCOVDevice.cpp", "Devices/KCOVInstance.cpp", "Devices/PCISerialDevice.cpp", "Devices/SerialDevice.cpp", "Devices/Storage/ATA/AHCI/Controller.cpp", "Devices/Storage/ATA/AHCI/InterruptHandler.cpp", "Devices/Storage/ATA/AHCI/Port.cpp", "Devices/Storage/ATA/ATAController.cpp", "Devices/Storage/ATA/ATADevice.cpp", "Devices/Storage/ATA/ATADiskDevice.cpp", "Devices/Storage/ATA/ATAPort.cpp", "Devices/Storage/ATA/GenericIDE/Channel.cpp", "Devices/Storage/ATA/GenericIDE/Controller.cpp", "Devices/Storage/DiskPartition.cpp", "Devices/Storage/NVMe/NVMeController.cpp", "Devices/Storage/NVMe/NVMeInterruptQueue.cpp", "Devices/Storage/NVMe/NVMeNameSpace.cpp", "Devices/Storage/NVMe/NVMePollQueue.cpp", "Devices/Storage/NVMe/NVMeQueue.cpp", "Devices/Storage/SD/PCISDHostController.cpp", "Devices/Storage/SD/SDHostController.cpp", "Devices/Storage/SD/SDMemoryCard.cpp", "Devices/Storage/StorageController.cpp", "Devices/Storage/StorageDevice.cpp", "Devices/Storage/StorageManagement.cpp", "FileSystem/AnonymousFile.cpp", "FileSystem/BlockBasedFileSystem.cpp", "FileSystem/Custody.cpp", "FileSystem/DevPtsFS/FileSystem.cpp", "FileSystem/DevPtsFS/Inode.cpp", "FileSystem/Ext2FS/FileSystem.cpp", "FileSystem/Ext2FS/Inode.cpp", "FileSystem/FATFS/FileSystem.cpp", "FileSystem/FATFS/Inode.cpp", "FileSystem/FIFO.cpp", "FileSystem/File.cpp", "FileSystem/FileBackedFileSystem.cpp", "FileSystem/FileSystem.cpp", "FileSystem/ISO9660FS/DirectoryIterator.cpp", "FileSystem/ISO9660FS/FileSystem.cpp", "FileSystem/ISO9660FS/Inode.cpp", "FileSystem/Inode.cpp", "FileSystem/InodeFile.cpp", "FileSystem/InodeMetadata.cpp", "FileSystem/InodeWatcher.cpp", "FileSystem/Mount.cpp", "FileSystem/MountFile.cpp", "FileSystem/OpenFileDescription.cpp", "FileSystem/Plan9FS/FileSystem.cpp", "FileSystem/Plan9FS/Inode.cpp", "FileSystem/Plan9FS/Message.cpp", "FileSystem/ProcFS/FileSystem.cpp", "FileSystem/ProcFS/Inode.cpp", "FileSystem/ProcFS/ProcessExposed.cpp", "FileSystem/RAMFS/FileSystem.cpp", "FileSystem/RAMFS/Inode.cpp", "FileSystem/SysFS/Component.cpp", "FileSystem/SysFS/DirectoryInode.cpp", "FileSystem/SysFS/FileSystem.cpp", "FileSystem/SysFS/Inode.cpp", "FileSystem/SysFS/LinkInode.cpp", "FileSystem/SysFS/Registry.cpp", "FileSystem/SysFS/RootDirectory.cpp", "FileSystem/SysFS/Subsystems/Bus/Directory.cpp", "FileSystem/SysFS/Subsystems/Bus/PCI/BusDirectory.cpp", "FileSystem/SysFS/Subsystems/Bus/PCI/DeviceAttribute.cpp", "FileSystem/SysFS/Subsystems/Bus/PCI/DeviceDirectory.cpp", "FileSystem/SysFS/Subsystems/Bus/PCI/DeviceExpansionROM.cpp", "FileSystem/SysFS/Subsystems/Bus/USB/BusDirectory.cpp", "FileSystem/SysFS/Subsystems/Bus/USB/DeviceInformation.cpp", "FileSystem/SysFS/Subsystems/DeviceIdentifiers/BlockDevicesDirectory.cpp", "FileSystem/SysFS/Subsystems/DeviceIdentifiers/CharacterDevicesDirectory.cpp", "FileSystem/SysFS/Subsystems/DeviceIdentifiers/DeviceComponent.cpp", "FileSystem/SysFS/Subsystems/DeviceIdentifiers/Directory.cpp", "FileSystem/SysFS/Subsystems/DeviceIdentifiers/SymbolicLinkDeviceComponent.cpp", "FileSystem/SysFS/Subsystems/Devices/Directory.cpp", "FileSystem/SysFS/Subsystems/Devices/Graphics/Directory.cpp", "FileSystem/SysFS/Subsystems/Devices/Graphics/DisplayConnector/DeviceAttribute.cpp", "FileSystem/SysFS/Subsystems/Devices/Graphics/DisplayConnector/DeviceDirectory.cpp", "FileSystem/SysFS/Subsystems/Devices/Graphics/DisplayConnector/Directory.cpp", "FileSystem/SysFS/Subsystems/Devices/Storage/DeviceAttribute.cpp", "FileSystem/SysFS/Subsystems/Devices/Storage/DeviceDirectory.cpp", "FileSystem/SysFS/Subsystems/Devices/Storage/Directory.cpp", "FileSystem/SysFS/Subsystems/Firmware/Directory.cpp", "FileSystem/SysFS/Subsystems/Kernel/CPUInfo.cpp", "FileSystem/SysFS/Subsystems/Kernel/Constants/ConstantInformation.cpp", "FileSystem/SysFS/Subsystems/Kernel/Constants/Directory.cpp", "FileSystem/SysFS/Subsystems/Kernel/Directory.cpp", "FileSystem/SysFS/Subsystems/Kernel/DiskUsage.cpp", "FileSystem/SysFS/Subsystems/Kernel/GlobalInformation.cpp", "FileSystem/SysFS/Subsystems/Kernel/Interrupts.cpp", "FileSystem/SysFS/Subsystems/Kernel/Jails.cpp", "FileSystem/SysFS/Subsystems/Kernel/Keymap.cpp", "FileSystem/SysFS/Subsystems/Kernel/Log.cpp", "FileSystem/SysFS/Subsystems/Kernel/MemoryStatus.cpp", "FileSystem/SysFS/Subsystems/Kernel/Network/ARP.cpp", "FileSystem/SysFS/Subsystems/Kernel/Network/Adapters.cpp", "FileSystem/SysFS/Subsystems/Kernel/Network/Directory.cpp", "FileSystem/SysFS/Subsystems/Kernel/Network/Local.cpp", "FileSystem/SysFS/Subsystems/Kernel/Network/Route.cpp", "FileSystem/SysFS/Subsystems/Kernel/Network/TCP.cpp", "FileSystem/SysFS/Subsystems/Kernel/Network/UDP.cpp", "FileSystem/SysFS/Subsystems/Kernel/PowerStateSwitch.cpp", "FileSystem/SysFS/Subsystems/Kernel/Processes.cpp", "FileSystem/SysFS/Subsystems/Kernel/Profile.cpp", "FileSystem/SysFS/Subsystems/Kernel/RequestPanic.cpp", "FileSystem/SysFS/Subsystems/Kernel/SystemStatistics.cpp", "FileSystem/SysFS/Subsystems/Kernel/Uptime.cpp", "FileSystem/SysFS/Subsystems/Kernel/Variables/BooleanVariable.cpp", "FileSystem/SysFS/Subsystems/Kernel/Variables/CapsLockRemap.cpp", "FileSystem/SysFS/Subsystems/Kernel/Variables/CoredumpDirectory.cpp", "FileSystem/SysFS/Subsystems/Kernel/Variables/Directory.cpp", "FileSystem/SysFS/Subsystems/Kernel/Variables/DumpKmallocStack.cpp", "FileSystem/SysFS/Subsystems/Kernel/Variables/StringVariable.cpp", "FileSystem/SysFS/Subsystems/Kernel/Variables/UBSANDeadly.cpp", "FileSystem/VirtualFileSystem.cpp", "Firmware/ACPI/Initialize.cpp", "Firmware/ACPI/Parser.cpp", "Firmware/ACPI/StaticParsing.cpp", "Interrupts/GenericInterruptHandler.cpp", "Interrupts/IRQHandler.cpp", "Interrupts/PCIIRQHandler.cpp", "Interrupts/SharedIRQHandler.cpp", "Interrupts/UnhandledInterruptHandler.cpp", "KSyms.cpp", "Library/DoubleBuffer.cpp", "Library/IOWindow.cpp", "Library/KBufferBuilder.cpp", "Library/KLexicalPath.cpp", "Library/KString.cpp", "Library/Panic.cpp", "Library/ScopedCritical.cpp", "Library/StdLib.cpp", "Library/UserOrKernelBuffer.cpp", "Locking/LockRank.cpp", "Locking/Mutex.cpp", "Memory/AddressSpace.cpp", "Memory/AnonymousVMObject.cpp", "Memory/InodeVMObject.cpp", "Memory/MemoryManager.cpp", "Memory/PhysicalPage.cpp", "Memory/PhysicalRegion.cpp", "Memory/PhysicalZone.cpp", "Memory/PrivateInodeVMObject.cpp", "Memory/Region.cpp", "Memory/RegionTree.cpp", "Memory/RingBuffer.cpp", "Memory/ScatterGatherList.cpp", "Memory/ScopedAddressSpaceSwitcher.cpp", "Memory/SharedFramebufferVMObject.cpp", "Memory/SharedInodeVMObject.cpp", "Memory/VMObject.cpp", "Memory/VirtualRange.cpp", "Net/IPv4Socket.cpp", "Net/Intel/E1000ENetworkAdapter.cpp", "Net/Intel/E1000NetworkAdapter.cpp", "Net/LocalSocket.cpp", "Net/LoopbackAdapter.cpp", "Net/NetworkAdapter.cpp", "Net/NetworkTask.cpp", "Net/NetworkingManagement.cpp", "Net/Realtek/RTL8168NetworkAdapter.cpp", "Net/Routing.cpp", "Net/Socket.cpp", "Net/TCPSocket.cpp", "Net/UDPSocket.cpp", "Net/VirtIO/VirtIONetworkAdapter.cpp", "SanCov.cpp", "Security/AddressSanitizer.cpp", "Security/Credentials.cpp", "Security/Jail.cpp", "Security/Random.cpp", "Security/UBSanitizer.cpp", "Syscalls/SyscallHandler.cpp", "Syscalls/alarm.cpp", "Syscalls/anon_create.cpp", "Syscalls/beep.cpp", "Syscalls/chdir.cpp", "Syscalls/chmod.cpp", "Syscalls/chown.cpp", "Syscalls/clock.cpp", "Syscalls/debug.cpp", "Syscalls/disown.cpp", "Syscalls/dup2.cpp", "Syscalls/emuctl.cpp", "Syscalls/execve.cpp", "Syscalls/exit.cpp", "Syscalls/faccessat.cpp", "Syscalls/fallocate.cpp", "Syscalls/fcntl.cpp", "Syscalls/fork.cpp", "Syscalls/fsync.cpp", "Syscalls/ftruncate.cpp", "Syscalls/futex.cpp", "Syscalls/get_dir_entries.cpp", "Syscalls/get_stack_bounds.cpp", "Syscalls/getrandom.cpp", "Syscalls/getuid.cpp", "Syscalls/hostname.cpp", "Syscalls/inode_watcher.cpp", "Syscalls/ioctl.cpp", "Syscalls/jail.cpp", "Syscalls/keymap.cpp", "Syscalls/kill.cpp", "Syscalls/link.cpp", "Syscalls/lseek.cpp", "Syscalls/mkdir.cpp", "Syscalls/mknod.cpp", "Syscalls/mmap.cpp", "Syscalls/mount.cpp", "Syscalls/open.cpp", "Syscalls/perf_event.cpp", "Syscalls/pipe.cpp", "Syscalls/pledge.cpp", "Syscalls/poll.cpp", "Syscalls/prctl.cpp", "Syscalls/process.cpp", "Syscalls/profiling.cpp", "Syscalls/ptrace.cpp", "Syscalls/purge.cpp", "Syscalls/read.cpp", "Syscalls/readlink.cpp", "Syscalls/realpath.cpp", "Syscalls/rename.cpp", "Syscalls/resource.cpp", "Syscalls/rmdir.cpp", "Syscalls/sched.cpp", "Syscalls/sendfd.cpp", "Syscalls/setpgid.cpp", "Syscalls/setuid.cpp", "Syscalls/sigaction.cpp", "Syscalls/socket.cpp", "Syscalls/stat.cpp", "Syscalls/statvfs.cpp", "Syscalls/sync.cpp", "Syscalls/sysconf.cpp", "Syscalls/thread.cpp", "Syscalls/times.cpp", "Syscalls/umask.cpp", "Syscalls/uname.cpp", "Syscalls/unlink.cpp", "Syscalls/unveil.cpp", "Syscalls/utime.cpp", "Syscalls/utimensat.cpp", "Syscalls/waitid.cpp", "Syscalls/write.cpp", "TTY/ConsoleManagement.cpp", "TTY/MasterPTY.cpp", "TTY/PTYMultiplexer.cpp", "TTY/SlavePTY.cpp", "TTY/TTY.cpp", "TTY/VirtualConsole.cpp", "Tasks/Coredump.cpp", "Tasks/CrashHandler.cpp", "Tasks/FinalizerTask.cpp", "Tasks/FutexQueue.cpp", "Tasks/PerformanceEventBuffer.cpp", "Tasks/PowerStateSwitchTask.cpp", "Tasks/Process.cpp", "Tasks/ProcessGroup.cpp", "Tasks/ProcessList.cpp", "Tasks/Scheduler.cpp", "Tasks/SyncTask.cpp", "Tasks/Thread.cpp", "Tasks/ThreadBlockers.cpp", "Tasks/ThreadTracer.cpp", "Tasks/WaitQueue.cpp", "Tasks/WorkQueue.cpp", "Time/TimeManagement.cpp", "Time/TimerQueue.cpp", ] sources += get_target_outputs(":generate_version_header") } action("postprocess_kernel") { script = "//Meta/gn/secondary/Kernel/post_process_kernel.py" deps = [ ":Kernel_bin" ] inputs = [ "$target_out_dir/Kernel_bin" ] outputs = [ "$target_out_dir/Kernel", "$target_out_dir/Kernel.debug", "$target_out_dir/kernel.map", ] args = [ "--nm", serenity_nm, "--objcopy", serenity_objcopy, rebase_path(inputs[0], root_build_dir), ] } group("install_kernel") { deps = [ ":install_kernel_binaries", ":install_kernel_data", ] if (serenity_arch == "x86_64") { deps += [ "Prekernel:install_prekernel" ] } } copy("install_kernel_binaries") { deps = [ ":postprocess_kernel" ] sources = [ "$target_out_dir/Kernel", "$target_out_dir/Kernel.debug", ] outputs = [ "$sysroot/boot/{{source_file_part}}" ] } copy("install_kernel_data") { deps = [ ":postprocess_kernel" ] sources = [ "$target_out_dir/kernel.map" ] outputs = [ "$sysroot/res/{{source_file_part}}" ] }