Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
/DJDM19
/DMDM19
/OCDM19
/WCDM19
.vscode
build_dos
build_linux
105 changes: 105 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
CC := gcc
CXX := g++
DBGFLAGS := -g -DRANGECHECK -fsanitize=address -fsanitize=undefined
#EXTRAFLAGS = $(DBGFLAGS)
EXTRAFLAGS = -O2 -fomit-frame-pointer
CFLAGS := -m32 -Wno-attributes -Wno-unused-result -DAPPVER_EXEDEF=DM19F2 -fno-pic -no-pie $(EXTRAFLAGS)
COBJFLAGS := $(CFLAGS) -c
AS := nasm

SRC_DIR := src
DOS_BUILD_DIR := build_dos
LINUX_BUILD_DIR := build_linux

define get-objects-from-dir
$(patsubst $(1)/%.c,$(1)/%.o,$(wildcard $(1)/*.c)) \
$(patsubst $(1)/%.asm,$(1)/%.o,$(wildcard $(1)/*.asm))
endef

define src-to-build
$(patsubst %,$(1)/%,$(2))
endef

define _depend
#!/bin/sh
CC=$1
DIR=$2
shift 2
case "$DIR" in
"" | ".")
$CC -MM -MG -c "$@" | sed -e 's@^\(.*\).o:@\\1.d \\1.o:@g'
;;
*)
$CC -MM -MG -c "$@" | sed -e "s@^\(.*\).o:@$DIR\/\\1.d $DIR\/\\1.o:@g"
;;
esac
endef
export depend = $(value _depend)

# Z_ZONE_OBJ = $(SRC_DIR)/z_zone/z_zone_asan.o
Z_ZONE_OBJ = $(SRC_DIR)/z_zone/z_zone.o

# Find all .o files
DOOM_OBJS := $(call get-objects-from-dir,$(SRC_DIR)) $(Z_ZONE_OBJ)
DOS_OBJS := $(call get-objects-from-dir,$(SRC_DIR)/dos)
LINUX_OBJS := $(call get-objects-from-dir,$(SRC_DIR)/linux)

ALL_DOS_OBJS := $(call src-to-build, $(DOS_BUILD_DIR), $(DOOM_OBJS) $(DOS_OBJS))
ALL_LINUX_OBJS := $(call src-to-build, $(LINUX_BUILD_DIR), $(DOOM_OBJS) $(LINUX_OBJS))

.PRECIOUS: $(DOS_BUILD_DIR)/%.d $(LINUX_BUILD_DIR)/%.d %/depend.sh

%/depend.sh: Makefile | %/depend.sh.dir
@echo "$$depend" > $@
@chmod +x $@

define make-rules
$(1)/%.d: %.c $(1)/depend.sh | $(1)/%.dir
@$(1)/depend.sh $(CC) $$(@D) $(CFLAGS) $$< > $$@

$(1)/%.d: %.asm | $(1)/%.dir
@touch $$@

$(1)/%.o: %.c $(1)/%.d
@echo "Compiling $$<"
@$(CC) $(COBJFLAGS) -o $$@ $$<

$(1)/%.o: %.cpp | $(1)/%.dir
@$(CXX) $(COBJFLAGS) -o $$@ $$<

$(1)/%.s: %.c $(1)/%.d
@$(CC) $(COBJFLAGS) -S -o $$@ $$<

$(1)/%.o: %.asm $(1)/%.d | $(1)/%.dir
@$(AS) $$< $(2) -o $$@
endef

$(eval $(call make-rules, $(DOS_BUILD_DIR), -f coff))
$(eval $(call make-rules, $(LINUX_BUILD_DIR), -f elf))

%.dir:
@mkdir -p $(dir $@)

# Doom targets
$(DOS_BUILD_DIR)/doom.exe: $(ALL_DOS_OBJS)
$(CXX) -o $@ $^ $(CFLAGS)

$(LINUX_BUILD_DIR)/doom: $(ALL_LINUX_OBJS)
$(CXX) -o $@ $^ $(CFLAGS) -lX11


.PHONY: debug
debug: $(TARGET_DEBUG)

.PHONY: clean
clean:
@rm -rf $(DOS_BUILD_DIR)
@rm -rf $(LINUX_BUILD_DIR)

# Include dependency files
# This will include the dependency files generated by the depend.sh script
# and will ensure that any change to headers will force correct rebuilding.
# The wildcard function will expand to all .d files in the build directories
# are present, which prevents make from trying to generate .d files that
# don't exist.
-include $(wildcard $(ALL_DOS_OBJS:.o=.d) $(ALL_LINUX_OBJS:.o=.d))
24 changes: 0 additions & 24 deletions compdj.bat

This file was deleted.

10 changes: 0 additions & 10 deletions compdm.bat

This file was deleted.

18 changes: 0 additions & 18 deletions compoc.bat

This file was deleted.

11 changes: 0 additions & 11 deletions compwc.bat

This file was deleted.

Loading