]> 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 4b08b49712fd28f344af9f8832ecc748e2ddb0ea..92274357226585cc81a8bb6fa9fd9c7c1b9137bf 100644 (file)
--- 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/<name>/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))))
index 55e047b2d84514fb02be4bfc16e19bfee8598aa1..13a72055b3bad0e9c0573e40308724b626150430 100644 (file)
@@ -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
index ddeeb200b0e319c936cd26e3d56fff6ef244affb..9755ba3239f3c5bebbf5571d5b6cc126a64ce377 100644 (file)
@@ -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
index d99d4985c3631ef242305e0a63088099d4c4bebf..5c7b460272661a43614f8ad5cf99c86496afb88e 100644 (file)
@@ -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
index 5d3b7916627659f42322a2f322330b9db388cc7c..a9135f484db736940682b1b40687c895e8ed2f3f 100644 (file)
@@ -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
 
index ba56605070c2b8bf86165d4f07845df60c3733b9..df4c2066b9b068b7f510c7a116358777a18f9100 100644 (file)
@@ -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