]> Projects (at) Tadryanom (dot) Me - AdrOS.git/commitdiff
fix: doom build + move userspace build output to build/$ARCH/user/
authorTulio A M Mendes <[email protected]>
Sat, 14 Mar 2026 16:14:55 +0000 (13:14 -0300)
committerTulio A M Mendes <[email protected]>
Sat, 14 Mar 2026 16:14:55 +0000 (13:14 -0300)
- 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/<name> to
  all sub-Make invocations

Tests: 103/103 smoke, 68/68 host utils, cppcheck clean

Makefile
user/cmds/common.mk
user/cmds/fulltest/Makefile
user/cmds/ldso/Makefile
user/cmds/pie_test/Makefile
user/doom/Makefile

index 35baa624644836d1a252b10149196d8385ada158..334624076dde6431fee7e17bc83d5f4b8c1796c7 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -87,8 +87,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/<name>/Makefile)
     USER_CMD_NAMES := echo sh cat ls mkdir rm cp mv touch ln \
@@ -209,13 +209,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
@@ -227,6 +227,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))))
index c8b6382d6139879d53bc60f4daf892adf8312f4b..ce554041eac0d8fb7b7ce8e4f76b670b8d9163ad 100644 (file)
@@ -16,7 +16,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
index cc47f768b48dd59f1cdb9182513ea8763c53d466..2ddec8c1a78ad40e11e01fe10a31ac36fe7196eb 100644 (file)
@@ -11,7 +11,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
index c77bda5f24701de944f79d3a2d612f25e7af5161..77e7e1b30df63c288b8e39b4c6e5aa238ceecada 100644 (file)
@@ -11,7 +11,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
index 5dfb0e5e1ff01e4ab277ad52579a2ac8ed510bbc..e9025f1b821c28246a0f9415499eafcb4ce30e41 100644 (file)
@@ -11,7 +11,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
 
index 7fefe9751eabb1d1c1c3579281fe9cbfabfa0107..fd8b1894ab1d5fa13ee8dcbee4ccd2cbc38a4e16 100644 (file)
@@ -17,8 +17,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
@@ -33,7 +33,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