Makefile now builds DYNs magically.

This commit is contained in:
Scott Duensing 2025-12-20 19:35:54 -06:00
parent e2c517b529
commit 646ef619b0
11 changed files with 188 additions and 126 deletions

View file

@ -29,7 +29,7 @@ DXE3GEN := dxe3gen
EXE2COFF := exe2coff EXE2COFF := exe2coff
# Compiler Settings # Compiler Settings
CFLAGS := -DPLATFORM_DOS -Wall CFLAGS := -DPLATFORM_DOS -Wall -MD
LDFLAGS := LDFLAGS :=
# Output Directories # Output Directories
@ -50,17 +50,11 @@ FONT_SRC := $(shell find font/src -name '*.c')
FONT_OBJ := $(FONT_SRC:%=$(OBJ)/%.o) FONT_OBJ := $(FONT_SRC:%=$(OBJ)/%.o)
FONT_LIB := -lm FONT_LIB := -lm
# Roo/E Dynamic Libraries
DYNS_EXE := stbimage.dyn
DYNS_SRC := $(shell find dyn/stbimage -name '*.c')
DYNS_OBJ := $(DYNS_SRC:%=$(OBJ)/%.o)
DYNS_LIB :=
# Roo/E Source and Target # Roo/E Source and Target
ROOE_EXE := roo_e.exe ROOE_EXE := roo_e.exe
ROOE_SRC := $(shell find roo_e -name '*.c') ROOE_SRC := $(shell find roo_e -name '*.c')
ROOE_OBJ := $(ROOE_SRC:%=$(OBJ)/%.o) ROOE_OBJ := $(ROOE_SRC:%=$(OBJ)/%.o)
ROOE_LIB := 3rdparty/pthreads/lib/libgthreads.a -lgcc ROOE_LIB := 3rdparty/pthreads/lib/libgthreads.a -lgcc -lm
# MultiPlayer Game Client # MultiPlayer Game Client
MPGC_EXE := kpsmpgc.app MPGC_EXE := kpsmpgc.app
@ -68,13 +62,17 @@ MPGC_SRC := $(shell find kpsmpgc -name '*.c')
MPGC_OBJ := $(MPGC_SRC:%=$(OBJ)/%.o) MPGC_OBJ := $(MPGC_SRC:%=$(OBJ)/%.o)
MPGC_LIB := MPGC_LIB :=
FONTS := $(FNT)/vga4x8.fnt $(FNT)/vga8x8.fnt $(FNT)/vga8x14.fnt $(FNT)/vga8x16.fnt DYNS := kpsvideo stbimage
FONTS := vga4x8 vga8x8 vga8x14 vga8x16
# Wiring # Wiring
FONT_PNGS := $(subst $(FNT),$(FIN),$(FONTS))
FONT_PNGS := $(subst .fnt,.png,$(FONTS_PNGS))
INC_FLAGS := $(addprefix -I,$(INC)) INC_FLAGS := $(addprefix -I,$(INC))
CFLAGS += $(INC_FLAGS) CFLAGS += $(INC_FLAGS)
APP_OBJS := $(ROOE_OBJ) $(MPGC_OBJ)
FONTS := $(addprefix $(FNT)/,$(addsuffix .fnt,$(FONTS)))
FONT_PNGS := $(subst .fnt,.png,$(subst $(FNT),$(FIN),$(FONTS)))
DYN_FILES := $(foreach DIR,$(DYNS),$(DYN)/$(DIR).dyn)
DYN_SOURCE := $(foreach DIR,$(DYNS),$(shell find dyn/$(DIR) -name '*.c' -or -name '*.h'))
# Force User to Run This Using Toolchains # Force User to Run This Using Toolchains
.PHONY: use_build_script .PHONY: use_build_script
@ -83,7 +81,7 @@ use_build_script:
# Build Everything # Build Everything
.PHONY: dos .PHONY: dos
dos: $(BIN)/$(ROOE_EXE) $(APP)/$(MPGC_EXE) $(DYN)/$(DYNS_EXE) dos: $(BIN)/$(ROOE_EXE) $(APP)/$(MPGC_EXE) $(DYN_FILES)
.PHONY: linux .PHONY: linux
linux: $(FONTS) linux: $(FONTS)
@ -98,7 +96,7 @@ $(BIN)/$(FONT_ELF): $(FONT_OBJ) Makefile
mkdir -p $(dir $@) $(BIN)/fonts mkdir -p $(dir $@) $(BIN)/fonts
$(CC) $(FONT_OBJ) -o $@ $(LDFLAGS) $(FONT_LIB) $(CC) $(FONT_OBJ) -o $@ $(LDFLAGS) $(FONT_LIB)
$(FONTS) &: $(FIN)/vga4x8.png $(FIN)/vga4x8.png $(FIN)/vga4x8.png $(FIN)/vga4x8.png $(BIN)/$(FONT_ELF) $(FONTS) &: $(FONT_PNGS) $(BIN)/$(FONT_ELF)
cd $(BIN) && ./$(FONT_ELF) cd $(BIN) && ./$(FONT_ELF)
# Roo/E Target # Roo/E Target
@ -115,15 +113,21 @@ $(APP)/$(MPGC_EXE): $(MPGC_OBJ) Makefile
mkdir -p $(dir $@) mkdir -p $(dir $@)
$(DXE3GEN) -o $@ $(MPGC_OBJ) -U $(LDFLAGS) $(MPGC_LIB) $(DXE3GEN) -o $@ $(MPGC_OBJ) -U $(LDFLAGS) $(MPGC_LIB)
# DYNS Target # DYN Targets
$(DYN)/$(DYNS_EXE): $(DYNS_OBJ) Makefile .PHONY: dyns
mkdir -p $(dir $@) $(DYN_FILES): $(DYN_SOURCE) Makefile
$(AR) rcs $(OBJ)/$(DYNS_EXE).a $(DYNS_OBJ) echo $(DYN_SOURCE)
$(DXE3GEN) -o $@ -Y $@.a --whole-archive -U $(OBJ)/$(DYNS_EXE).a $(LDFLAGS) $(DYNS_LIB) mkdir -p $(DYN) $(OBJ)/dyn/$(basename $(notdir $@)) $(SDK)/lib $(SDK)/include
mkdir -p $(SDK) $(foreach CFILE,$(shell find dyn/$(basename $(notdir $@)) -name '*.c'),$(CC) $(CFLAGS) -o $(OBJ)/dyn/$(basename $(notdir $@))/$(subst dyn/$(basename $(notdir $@))/,,$(CFILE).o) -c $(CFILE) && ) true
mv $(DYN)/$(DYNS_EXE).a $(SDK)/. $(AR) rcs $(OBJ)/dyn/$(basename $(notdir $@)).a $(OBJ)/dyn/$(basename $(notdir $@))/*.o
$(DXE3GEN) -o $@ -Y $@.a --whole-archive -U $(OBJ)/dyn/$(basename $(notdir $@)).a $(LDFLAGS)
mv $@.a $(SDK)/lib/.
if [ ! -z "$(shell find dyn/$(basename $(notdir $@)) -name '*.h')" ]; then cp $(shell find dyn/$(basename $(notdir $@)) -name '*.h') $(SDK)/include/.; fi
# Build C Files # Build C Files
$(OBJ)/%.c.o: %.c $(OBJ)/%.c.o: %.c
mkdir -p $(dir $@) mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c $< -o $@ $(CC) $(CFLAGS) -c $< -o $@
# Track Header Changes in APPs and Roo/E
-include $(APP_OBJS:.o=.d)

31
dyn/kpsvideo/kpsvideo.c Normal file
View file

@ -0,0 +1,31 @@
/* Roo/E, the Kangaroo Punch Portable GUI Toolkit
* Copyright (C) 2026 Scott Duensing
*
* http://kangaroopunch.com
*
*
* This file is part of Roo/E.
*
* Roo/E is free software: you can redistribute it and/or modify it under the
* terms of the GNU Affero General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option)
* any later version.
*
* Roo/E is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Roo/E. If not, see <https://www.gnu.org/licenses/>.
*/
#include "kpsvideo.h"
#include <stdio.h>
int dynStart(void) {
printf("kpsvideo starting!\n");
return 0;
}

27
dyn/kpsvideo/kpsvideo.h Normal file
View file

@ -0,0 +1,27 @@
/* Roo/E, the Kangaroo Punch Portable GUI Toolkit
* Copyright (C) 2026 Scott Duensing
*
* http://kangaroopunch.com
*
*
* This file is part of Roo/E.
*
* Roo/E is free software: you can redistribute it and/or modify it under the
* terms of the GNU Affero General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option)
* any later version.
*
* Roo/E is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Roo/E. If not, see <https://www.gnu.org/licenses/>.
*/
#ifndef KPSVIDEO_H
#define KPSVIDEO_H
#endif // KPSVIDEO_H

View file

@ -24,7 +24,7 @@
#include <stdio.h> #include <stdio.h>
#define STB_IMAGE_IMPLEMENTATION #define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h" #include "stbimage.h"
int dynStart(void) { int dynStart(void) {

View file

@ -30,7 +30,7 @@
#define STB_IMAGE_IMPLEMENTATION #define STB_IMAGE_IMPLEMENTATION
#define STBI_ONLY_PNG #define STBI_ONLY_PNG
#include "stb_image.h" #include "stbimage.h"
#include "stddclmr.h" #include "stddclmr.h"

View file

@ -22,7 +22,7 @@
#include <stdio.h> #include <stdio.h>
#include "stb_image.h" #include "stbimage.h"
void __attribute__((constructor)) registerApp(void) { void __attribute__((constructor)) registerApp(void) {

View file

@ -34,7 +34,7 @@
#include "util.h" #include "util.h"
#define STB_DS_IMPLEMENTATION #define STB_DS_IMPLEMENTATION
#include "stb_ds.h" #include "stbds.h"
int startApp(const char *appName, int argc, char *argv[]); int startApp(const char *appName, int argc, char *argv[]);