# DVX Widget Modules Makefile for DJGPP cross-compilation # # Each widget lives in its own subdirectory with its .c, .res, and .bmp. # Each .wgt is a DXE loaded by the loader at startup. DJGPP_PREFIX = $(HOME)/djgpp/djgpp CC = $(DJGPP_PREFIX)/bin/i586-pc-msdosdjgpp-gcc DXE3GEN = PATH=$(DJGPP_PREFIX)/bin:$(PATH) DJDIR=$(DJGPP_PREFIX)/i586-pc-msdosdjgpp $(DJGPP_PREFIX)/i586-pc-msdosdjgpp/bin/dxe3gen CFLAGS = -O2 -Wall -Wextra -Werror -Wno-type-limits -Wno-sign-compare -Wno-format-truncation -march=i486 -mtune=i586 -I../core -I../core/platform -I../tasks -I../core/thirdparty DVXRES = ../bin/dvxres OBJDIR = ../obj/widgets WGTDIR = ../bin/widgets/kpunch # Widget name -> directory, source, short name for .wgt/.res # Format: wgtShortName:dirName:srcFile:resFile WIDGETS = \ box:box:widgetBox:box \ button:button:widgetButton:button \ canvas:canvas:widgetCanvas:canvas \ checkbox:checkbox:widgetCheckbox:checkbox \ combobox:comboBox:widgetComboBox:combobox \ dropdown:dropdown:widgetDropdown:dropdown \ imgbtn:imageButton:widgetImageButton:imgbtn \ image:image:widgetImage:image \ label:label:widgetLabel:label \ listbox:listBox:widgetListBox:listbox \ listview:listView:widgetListView:listview \ progress:progressBar:widgetProgressBar:progress \ radio:radio:widgetRadio:radio \ scrlpane:scrollPane:widgetScrollPane:scrlpane \ separatr:separator:widgetSeparator:separatr \ slider:slider:widgetSlider:slider \ spacer:spacer:widgetSpacer:spacer \ spinner:spinner:widgetSpinner:spinner \ splitter:splitter:widgetSplitter:splitter \ statbar:statusBar:widgetStatusBar:statbar \ tabctrl:tabControl:widgetTabControl:tabctrl \ terminal:ansiTerm:widgetAnsiTerm:terminal \ textinpt:textInput:widgetTextInput:textinpt \ timer:timer:widgetTimer:timer \ datactrl:dataCtrl:widgetDataCtrl:datactr \ dbgrid:dbGrid:widgetDbGrid:dbgrid \ toolbar:toolbar:widgetToolbar:toolbar \ treeview:treeView:widgetTreeView:treeview \ wrapbox:wrapBox:widgetWrapBox:wrapbox # Extract lists WGT_NAMES = $(foreach w,$(WIDGETS),$(word 1,$(subst :, ,$w))) WGT_MODS = $(foreach n,$(WGT_NAMES),$(WGTDIR)/$(n)/$(n).wgt) OBJS = $(foreach w,$(WIDGETS),$(OBJDIR)/$(word 3,$(subst :, ,$w)).o) # Per-widget extra DXE3GEN flags (e.g. additional -E exports for dlsym) EXTRA_DXE_FLAGS_datactrl = -E _dataCtrl DEPFILES = textinpt combobox spinner terminal listbox dropdown listview treeview WGT_DEPS = $(foreach d,$(DEPFILES),$(WGTDIR)/$(d)/$(d).dep) .PHONY: all clean all: $(WGT_MODS) $(WGT_DEPS) define DEP_RULE $(WGTDIR)/$(1)/$(1).dep: ../config/$(1).dep | $(WGTDIR)/$(1) cp $$< $$@ endef $(foreach d,$(DEPFILES),$(eval $(call DEP_RULE,$(d)))) # Compile: source is in subdirectory WIDGET_DEPS_H = ../core/dvxWidgetPlugin.h ../core/dvxWidget.h ../core/dvxTypes.h ../core/dvxApp.h ../core/dvxDraw.h ../core/dvxWm.h ../core/dvxVideo.h ../core/platform/dvxPlatform.h define WIDGET_RULES $(OBJDIR)/$(word 3,$(subst :, ,$1)).o: $(word 2,$(subst :, ,$1))/$(word 3,$(subst :, ,$1)).c $$(WIDGET_DEPS_H) | $(OBJDIR) $$(CC) $$(CFLAGS) -c -o $$@ $$< $(WGTDIR)/$(word 1,$(subst :, ,$1))/$(word 1,$(subst :, ,$1)).wgt: $(OBJDIR)/$(word 3,$(subst :, ,$1)).o | $(WGTDIR)/$(word 1,$(subst :, ,$1)) $$(DXE3GEN) -o $(WGTDIR)/$(word 1,$(subst :, ,$1))/$(word 1,$(subst :, ,$1)).dxe -E _wgtRegister $$(EXTRA_DXE_FLAGS_$(word 1,$(subst :, ,$1))) -U $$< mv $(WGTDIR)/$(word 1,$(subst :, ,$1))/$(word 1,$(subst :, ,$1)).dxe $$@ @if [ -f $(word 2,$(subst :, ,$1))/$(word 4,$(subst :, ,$1)).res ]; then \ cd $(word 2,$(subst :, ,$1)) && ../$(DVXRES) build ../$$@ $(word 4,$(subst :, ,$1)).res; \ fi $(WGTDIR)/$(word 1,$(subst :, ,$1)): mkdir -p $$@ endef $(foreach w,$(WIDGETS),$(eval $(call WIDGET_RULES,$w))) $(OBJDIR): mkdir -p $(OBJDIR) $(WGTDIR): mkdir -p $(WGTDIR) clean: rm -f $(OBJS) $(WGT_MODS) $(WGT_DEPS) -rmdir $(WGTDIR) 2>/dev/null