From: Tulio A M Mendes Date: Sat, 14 Mar 2026 16:14:55 +0000 (-0300) Subject: fix: doom build + move userspace build output to build/$ARCH/user/ X-Git-Url: https://projects.tadryanom.me/docs/static/gitweb.css?a=commitdiff_plain;h=f8c26b489d8fbc16590127af380fb3e79977ec66;p=AdrOS.git fix: doom build + move userspace build output to build/$ARCH/user/ - Fix doom.elf build: force i686-elf toolchain (CC/LD := instead of ?=), add --unresolved-symbols=ignore-in-shared-libs for libc.so undefined refs - Reorganize userspace build output from build/user/ to build/$ARCH/user/ (e.g. build/x86/user/) so all arch artifacts live under one directory - Sub-Makefiles (common.mk, fulltest, ldso, pie_test) now accept BUILDDIR override from root Makefile via ?= operator - Root Makefile passes BUILDDIR=$(CURDIR)/$(USER_BUILD)/cmds/ to all sub-Make invocations Tests: 103/103 smoke, 68/68 host utils, cppcheck clean --- diff --git a/Makefile b/Makefile index 4b08b49..9227435 100644 --- a/Makefile +++ b/Makefile @@ -78,8 +78,8 @@ ifeq ($(ARCH),x86) USER_LD ?= i686-elf-ld USER_AR ?= i686-elf-ar - # User build output directory - USER_BUILD := build/user + # User build output directory (under build/$ARCH/ to keep arch-separated) + USER_BUILD := build/$(ARCH)/user # List of dynamically-linked user commands (built via user/cmds//Makefile) USER_CMD_NAMES := echo sh cat ls mkdir rm cp mv touch ln \ @@ -200,13 +200,13 @@ FORCE: # --- Special builds (fulltest, ldso, pie_test) --- $(FULLTEST_ELF): user/cmds/fulltest/fulltest.c user/cmds/fulltest/errno.c user/linker.ld - @$(MAKE) --no-print-directory -C user/cmds/fulltest TOPDIR=$(CURDIR) USER_CC="$(USER_CC)" + @$(MAKE) --no-print-directory -C user/cmds/fulltest TOPDIR=$(CURDIR) BUILDDIR=$(CURDIR)/$(USER_BUILD)/cmds/fulltest USER_CC="$(USER_CC)" $(LDSO_ELF): user/cmds/ldso/ldso.c user/ldso_linker.ld - @$(MAKE) --no-print-directory -C user/cmds/ldso TOPDIR=$(CURDIR) USER_CC="$(USER_CC)" + @$(MAKE) --no-print-directory -C user/cmds/ldso TOPDIR=$(CURDIR) BUILDDIR=$(CURDIR)/$(USER_BUILD)/cmds/ldso USER_CC="$(USER_CC)" $(PIE_SO) $(PIE_ELF): user/cmds/pie_test/pie_main.c user/cmds/pie_test/pie_func.c user/pie_linker.ld - @$(MAKE) --no-print-directory -C user/cmds/pie_test TOPDIR=$(CURDIR) USER_CC="$(USER_CC)" USER_LD="$(USER_LD)" + @$(MAKE) --no-print-directory -C user/cmds/pie_test TOPDIR=$(CURDIR) BUILDDIR=$(CURDIR)/$(USER_BUILD)/cmds/pie_test USER_CC="$(USER_CC)" USER_LD="$(USER_LD)" # --- Dynamically-linked user commands (generic rule via sub-Makefiles) --- # Use absolute paths so they work from sub-Makefile directories @@ -218,6 +218,7 @@ ABS_DYN_LD := $(USER_LD) -m elf_i386 --dynamic-linker=/lib/ld.so -T $(CURDIR)/us define USER_CMD_RULE $(USER_BUILD)/cmds/$(1)/$(1).elf: user/cmds/$(1)/$(1).c user/dyn_linker.ld $(ULIBC_SO) $(ULIBC_LIB) @$$(MAKE) --no-print-directory -C user/cmds/$(1) TOPDIR=$$(CURDIR) \ + BUILDDIR=$$(CURDIR)/$(USER_BUILD)/cmds/$(1) \ DYN_CC="$$(ABS_DYN_CC)" DYN_LD="$$(ABS_DYN_LD)" CRT0="$(ABS_ULIBC)/src/crt0.o" endef $(foreach cmd,$(USER_CMD_NAMES),$(eval $(call USER_CMD_RULE,$(cmd)))) diff --git a/user/cmds/common.mk b/user/cmds/common.mk index 55e047b..13a7205 100644 --- a/user/cmds/common.mk +++ b/user/cmds/common.mk @@ -7,7 +7,7 @@ # include ../common.mk TOPDIR ?= $(abspath ../../..) -BUILDDIR := $(TOPDIR)/build/user/cmds/$(NAME) +BUILDDIR ?= $(TOPDIR)/build/x86/user/cmds/$(NAME) ULIBC_DIR := $(TOPDIR)/user/ulibc DYN_CC ?= i686-elf-gcc -m32 -ffreestanding -nostdlib -O2 -Wall -Wextra -fPIC -fno-plt -I$(ULIBC_DIR)/include diff --git a/user/cmds/fulltest/Makefile b/user/cmds/fulltest/Makefile index ddeeb20..9755ba3 100644 --- a/user/cmds/fulltest/Makefile +++ b/user/cmds/fulltest/Makefile @@ -2,7 +2,7 @@ NAME := fulltest TOPDIR ?= $(abspath ../../..) -BUILDDIR := $(TOPDIR)/build/user/cmds/$(NAME) +BUILDDIR ?= $(TOPDIR)/build/x86/user/cmds/$(NAME) USER_CC ?= i686-elf-gcc ELF := $(BUILDDIR)/fulltest.elf diff --git a/user/cmds/ldso/Makefile b/user/cmds/ldso/Makefile index d99d498..5c7b460 100644 --- a/user/cmds/ldso/Makefile +++ b/user/cmds/ldso/Makefile @@ -2,7 +2,7 @@ NAME := ldso TOPDIR ?= $(abspath ../../..) -BUILDDIR := $(TOPDIR)/build/user/cmds/$(NAME) +BUILDDIR ?= $(TOPDIR)/build/x86/user/cmds/$(NAME) USER_CC ?= i686-elf-gcc ELF := $(BUILDDIR)/ld.so diff --git a/user/cmds/pie_test/Makefile b/user/cmds/pie_test/Makefile index 5d3b791..a9135f4 100644 --- a/user/cmds/pie_test/Makefile +++ b/user/cmds/pie_test/Makefile @@ -2,7 +2,7 @@ NAME := pie_test TOPDIR ?= $(abspath ../../..) -BUILDDIR := $(TOPDIR)/build/user/cmds/$(NAME) +BUILDDIR ?= $(TOPDIR)/build/x86/user/cmds/$(NAME) USER_CC ?= i686-elf-gcc USER_LD ?= i686-elf-ld diff --git a/user/doom/Makefile b/user/doom/Makefile index ba56605..df4c206 100644 --- a/user/doom/Makefile +++ b/user/doom/Makefile @@ -8,8 +8,8 @@ # # The output is doom.elf which gets packaged into the AdrOS initrd. -CC ?= i686-elf-gcc -LD ?= i686-elf-ld +CC := i686-elf-gcc +LD := i686-elf-ld ULIBC_DIR := ../ulibc ULIBC_INC := $(ULIBC_DIR)/include @@ -24,7 +24,7 @@ CFLAGS := -m32 -O2 -ffreestanding -nostdlib -fPIC -fno-plt \ -DNORMALUNIX -DLINUX LIBGCC := $(shell $(CC) -print-libgcc-file-name) -LDFLAGS := -m elf_i386 --dynamic-linker=/lib/ld.so -T $(DYN_LINKER) -L$(ULIBC_DIR) -rpath /lib +LDFLAGS := -m elf_i386 --dynamic-linker=/lib/ld.so -T $(DYN_LINKER) -L$(ULIBC_DIR) -rpath /lib --unresolved-symbols=ignore-in-shared-libs # doomgeneric engine sources (nested inside cloned repo) # Exclude platform adapters and files requiring external libraries