view Makefile.gen @ 2208:90ec1ec89c56

Revamp the palette handling in lib64gfx somewhat, add helper functions to lib64util for handling external palette file options and add support for specifying one of the "internal" palettes or external (.act) palette file to gfxconv and 64vw.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 14 Jun 2019 05:01:12 +0300
parents cbac4912992c
children 42a0172b8c80
line wrap: on
line source

###
### Get settings from config.mak
###
ifneq ($(DMCONFIG),)
include $(DMCONFIG)
else
include config.mak
endif

MKDIR ?= mkdir
MKDIR_P ?= $(MKDIR) -p
BINPATH ?= ./
DMLIB ?= ./
TOOL_SRC = $(DMLIB)tools/
TESTS_SRC = $(DMLIB)tests/

TOOL_BINPATH ?= $(TOOL_SRC)
TESTS_BINPATH ?= $(TESTS_SRC)

DMLIB_SRC = $(DMLIB)src/

DM_CFLAGS += -I$(DMLIB_SRC)

ifeq ($(EXTRA_CFLAGS),)
EXTRA_CFLAGS=-O3
# -march=corei7
endif


###
### Extra debug messages etc?
###
ifeq ($(DM_DEBUG),yes)
DM_CFLAGS += -DDM_DEBUG

# Disable JSS_LIGHT
JSS_LIGHT=no
endif


###
### Build demo target?
###
ifneq ($(DEMO_BIN),)
BINARIES += $(DEMO_BIN)
endif

ifeq ($(DM_BUILT_IN_SETUP),yes)
DM_CFLAGS += -DDM_BUILT_IN_SETUP
endif


###
### Editor
###
ifeq ($(DM_USE_TIMELINE),yes)
DM_CFLAGS+=-DDM_USE_TIMELINE
DMLIB_OBJS += dmtimeline.o dmtimelinew.o

ifeq ($(DM_BUILD_EDITOR),yes)
ifneq ($(DEMO_BIN),)
BINARIES += ed_$(DEMO_BIN)
TARGETS += $(EDITOR_MAKEFILE) $(EDITOR_PRO)
TMPFILES += $(OBJPATH)moc_*
endif
endif
endif

EDITOR_PRO = editor.pro
EDITOR_MAKEFILE = Makefile.editor
EDITOR_SOURCES = editor/edmain.cpp editor/edgui.cpp editor/edview.cpp \
	editor/edtlobj.cpp editor/edtimeline.cpp editor/edwaveform.cpp \
	editor/edres.cpp
EDITOR_HEADERS = editor/edmain.h editor/edtlobj.h editor/edview.h \
	editor/edtimeline.h editor/edwaveform.h editor/edres.h


###
### Form additional compilation defines based on settings
###

# Enable SIMD routines, if requested
ifeq ($(DM_USE_SIMD),yes)
DM_CFLAGS+=-DDM_USE_SIMD -msse2
endif

# Enable Tremor Ogg Vorbis decoder
ifeq ($(DM_USE_TREMOR),yes)
DM_CFLAGS+=-DDM_USE_TREMOR $(TREMOR_CFLAGS)
DEMO_LDFLAGS+=$(TREMOR_LDFLAGS)
endif


###
### Filesystem
###
ifeq ($(DM_USE_PACKFS),yes)
BUILD_RES=yes
DM_CFLAGS += -DDM_USE_PACKFS
DMLIB_OBJS += dmpack.o
ifeq ($(DM_BUILD_TOOLS),yes)
TOOL_BINARIES += packed
endif
endif

ifeq ($(DM_USE_STDIO),yes)
BUILD_RES=yes
DM_CFLAGS += -DDM_USE_STDIO
endif

ifeq ($(DM_USE_MEMIO),yes)
BUILD_RES=yes
DM_CFLAGS += -DDM_USE_MEMIO
endif

ifeq ($(BUILD_RES),yes)
DMLIB_OBJS += dmres.o dmresw.o
endif

###
### Graphics support
###

ifeq ($(DM_GFX_LINES),yes)
DM_CFLAGS += -DDM_GFX_LINES
DMLIB_OBJS += dmline.o
endif

ifeq ($(DM_GFX_BLITS),yes)
DM_CFLAGS += -DDM_GFX_BLITS
DMLIB_OBJS += dmblit.o
endif

ifeq ($(DM_GFX_BM_TEXT),yes)
DM_CFLAGS += -DDM_GFX_BM_TEXT
DMLIB_OBJS += dmtext_bm.o
ifeq ($(DM_BUILD_TOOLS),yes)
ifeq ($(DM_USE_STDIO),yes)
TOOL_BINARIES += fontconv
endif
endif
endif

ifeq ($(DM_GFX_TTF_TEXT),yes)
DM_CFLAGS += -DDM_GFX_TTF_TEXT
DMLIB_OBJS += dmtext_ttf.o

ifeq ($(DM_BUILD_TESTS),yes)
ifeq ($(DM_GFX_BLITS),yes)
ifeq ($(DM_USE_STDIO),yes)
#TESTS_BINARIES += blittest
endif
endif
endif
else
SDL_TTF_LDFLAGS=
SDL_TTF_CFLAGS=
endif


###
### miniJSS
###
MINIJSS=$(DMLIB)/minijss/


ifeq ($(JSS),yes)
DM_CFLAGS+=-DDM_USE_JSS -I$(MINIJSS)

ifeq ($(JSS_LIGHT),yes)
DM_CFLAGS+=-DJSS_LIGHT -Os
else
ifeq ($(JSS_USE_ASSERTS),yes)
DM_CFLAGS+=-DJSS_USE_ASSERTS
endif
ifeq ($(JSS_DEBUG),yes)
DM_CFLAGS+=-DJSS_DEBUG
endif
endif

ifeq ($(JSS_MIX_FP),yes)
DM_CFLAGS+=-DJSS_MIX_FP
endif

ifeq ($(JSS_SUP_THREADS),yes)
DM_CFLAGS+=-DJSS_SUP_THREADS
endif


SUP_MODLOAD=no
ifeq ($(JSS_SUP_XM),yes)
SUP_MODLOAD=yes
DMLIB_OBJS+= jloadxm.o 
DM_CFLAGS+=-DJSS_SUP_XM
endif

ifeq ($(JSS_SUP_JSSMOD),yes)
SUP_MODLOAD=yes
DMLIB_OBJS+= jloadjss.o
DM_CFLAGS+=-DJSS_SUP_JSSMOD $(JSSMOD_FLAGS)
endif

ifeq ($(DM_USE_C),yes)
DM_CFLAGS+=-DDM_USE_C
TARGETS += $(MINIJSS)jmix_c.c
DMLIB_OBJS+=jmix_c.o
endif

#ifeq ($(DM_USE_SIMD),yes)
#DMLIB_OBJS+=jmix_simd.o
#endif

ifeq ($(DM_BUILD_TOOLS),yes)
ifeq ($(DM_USE_STDIO),yes)
ifeq ($(JSS_SUP_JSSMOD),yes)
ifeq ($(JSS_SUP_XM),yes)
TOOL_BINARIES+= xm2jss
endif
endif
endif
endif
DMLIB_OBJS += jss.o jssmix.o jssmod.o jssplr.o
endif


### Dependancies
ifeq ($(DM_BUILD_TOOLS),yes)
ifeq ($(DM_USE_STDIO),yes)
TOOL_BINARIES+= objlink data2inc gfxconv gentab fanalyze
ifeq ($(SUP_MODLOAD),yes)
TOOL_BINARIES+= dumpmod mod2wav
TESTS_BINARIES+= plrtest
ifeq ($(DM_GFX_BLITS),yes)
TOOL_BINARIES+= 64vw
ifeq ($(DM_GFX_BM_TEXT),yes)
TOOL_BINARIES+= ppl
endif
endif
endif

endif
endif


### libPNG handling
ifeq ($(DM_USE_LIBPNG),yes)
DM_CFLAGS += -DDM_USE_LIBPNG $(LIBPNG_CFLAGS)
endif


### Check requirements for zlib
ifeq ($(DM_USE_ZLIB),yes)
DM_CFLAGS += -DDM_USE_ZLIB $(ZLIB_CFLAGS)
DEMO_LDFLAGS += $(ZLIB_LDFLAGS)
else
DEMO_LDFLAGS +=
endif


### What tests to build?
ifeq ($(DM_BUILD_TESTS),yes)
TESTS_BINARIES += vecmattest fptest dzlibtest encbr1test
endif

FONTCONV_BIN=fontconv
DATA2INC_BIN=data2inc


###
### Rest of the rules
###
CFLAGS += -g -W -Wall -DHAVE_STRING_H $(EXTRA_CFLAGS)
#CFLAGS += -std=c11 -D_FILE_OFFSET_BITS=64
CXXFLAGS=$(CFLAGS)

DM_CFLAGS += $(SDL_CFLAGS)
DM_LDFLAGS += $(LDFLAGS)


ifneq ($(V),1)
COMPILE_OBJ = @if test ! -d $(OBJPATH); then mkdir -p $(OBJPATH); fi && echo " CC $<" && $(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)
LINK_BIN = @if test ! -d $(BINPATH); then mkdir -p $(BINPATH); fi && echo " LINK $@" && $(CC) -o $@ $(filter %.o %.a,$+)
LINK_STATIC_LIB = @echo " AR $@" && $(AR) cru $@ $(filter %.o,$+) && $(RANLIB) $@
else
COMPILE_OBJ = @if test ! -d $(OBJPATH); then mkdir -p $(OBJPATH); fi && echo "$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)" && $(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)
LINK_BIN = @if test ! -d $(BINPATH); then mkdir -p $(BINPATH); fi && echo "$(CC) -o $@ $(filter %.o %.a,$+)" && $(CC) -o $@ $(filter %.o %.a,$+)
LINK_STATIC_LIB = @echo "$(AR) cru $@ $(filter %.o,$+)" && $(AR) cru $@ $(filter %.o,$+) && echo "$(RANLIB) $@" && $(RANLIB) $@
endif


DMLIB_A=$(OBJPATH)dmlib.a
DMLIB_OBJS += \
	dmfile.o dmlib.o dmcurves.o dmstring.o \
	dmgrowbuf.o dmargs.o dmvecmat.o dmperlin.o \
	dmimage.o dmengine.o dmfft.o dmzlib.o


TESTS_TARGETS = $(addprefix $(TESTS_BINPATH),$(addsuffix $(EXEEXT),$(TESTS_BINARIES)))
TOOL_TARGETS = $(addprefix $(TOOL_BINPATH),$(addsuffix $(EXEEXT),$(TOOL_BINARIES)))
TARGETS += $(DMLIB_A) $(addprefix $(BINPATH),$(addsuffix $(EXEEXT),$(BINARIES))) \
	$(TOOL_TARGETS) $(TESTS_TARGETS) \
	$(DMLIB)assets/SetupFont.dmf \
	$(DMLIB_SRC)setupfont.h \
	$(DMLIB_SRC)setupimage.h \
	$(DMLIB_SRC)setupmenubar.h

#NONBUILD +=


all: $(NONBUILD) $(TARGETS)


###
### Generic object rules
###
$(OBJPATH)%.o: $(DMLIB)tests/%.c $(DMLIB)tests/%.h
	$(COMPILE_OBJ)

$(OBJPATH)%.o: $(DMLIB)tests/%.c
	$(COMPILE_OBJ)

$(OBJPATH)%.o: $(DMLIB)tools/%.c $(DMLIB)tools/%.h
	$(COMPILE_OBJ)

$(OBJPATH)%.o: $(DMLIB)tools/%.c
	$(COMPILE_OBJ)

$(OBJPATH)%.o: %.c %.h
	$(COMPILE_OBJ)

$(OBJPATH)%.o: %.c
	$(COMPILE_OBJ)

$(OBJPATH)%.o: $(MINIJSS)%.c $(MINIJSS)%.h
	$(COMPILE_OBJ)

$(OBJPATH)%.o: $(MINIJSS)%.c
	$(COMPILE_OBJ)

$(OBJPATH)%.o: $(DMLIB_SRC)%.c $(DMLIB_SRC)%.h
	$(COMPILE_OBJ)

$(OBJPATH)%.o: $(DMLIB_SRC)%.c
	$(COMPILE_OBJ)


###
### dmlib-specific rules
###
$(MINIJSS)jmix_c.c: $(MINIJSS)jmix_c_in.c $(MINIJSS)jmixtmpl_c.h $(MINIJSS)jmix_post_c.h
	(echo "#include \"jssmix.h\"" && cpp $< $(DM_CFLAGS)) | sed "s/^# .*//g" > $@

$(OBJPATH)dmimage.o: $(DMLIB_SRC)dmimage.c $(DMLIB_SRC)stb_image.c $(DMLIB_SRC)dmimage.h
	$(COMPILE_OBJ)

$(OBJPATH)dmresw.o: $(DMLIB_SRC)dmresw.c $(DMLIB_SRC)dmres.h
	$(COMPILE_OBJ)


$(OBJPATH)jssmod.o: $(MINIJSS)jssmod.c $(MINIJSS)jssmod.h $(MINIJSS)jss.h
	$(COMPILE_OBJ)

$(OBJPATH)jssplr.o: $(MINIJSS)jssplr.c $(MINIJSS)jssplr.h $(MINIJSS)jss.h $(MINIJSS)jssmod.h $(MINIJSS)jssmix.h
	$(COMPILE_OBJ)

$(OBJPATH)jssmix.o: $(MINIJSS)jssmix.c $(MINIJSS)jssmix.h $(MINIJSS)jss.h
	$(COMPILE_OBJ)

$(OBJPATH)dmblit.o: $(DMLIB_SRC)dmblit.c $(DMLIB_SRC)dmscaledblit.h $(DMLIB_SRC)dmunscaledblit.h $(DMLIB_SRC)dmblitfunc.h $(DMLIB_SRC)dmlib.h
	$(COMPILE_OBJ)

$(OBJPATH)dmline.o: $(DMLIB_SRC)dmline.c $(DMLIB_SRC)dmdrawline.h $(DMLIB_SRC)dmlinefunc.h $(DMLIB_SRC)dmlineclip.h $(DMLIB_SRC)dmlib.h
	$(COMPILE_OBJ)

$(OBJPATH)libgfx.o: $(DMLIB)tools/libgfx.c $(DMLIB)tools/libgfx.h $(DMLIB_A)
	$(COMPILE_OBJ)

$(OBJPATH)lib64gfx.o: $(DMLIB)tools/lib64gfx.c $(DMLIB)tools/lib64gfx.h $(OBJPATH)libgfx.o
	$(COMPILE_OBJ)

$(OBJPATH)lib64util.o: $(DMLIB)tools/lib64util.c $(DMLIB)tools/lib64util.h $(OBJPATH)lib64gfx.o
	$(COMPILE_OBJ)

$(OBJPATH)lib64fmts.o: $(DMLIB)tools/lib64fmts.c $(OBJPATH)lib64gfx.o
	$(COMPILE_OBJ)

$(OBJPATH)64vw.o: $(DMLIB)tools/64vw.c $(OBJPATH)lib64util.o
	$(COMPILE_OBJ)

$(OBJPATH)gfxconv.o: $(DMLIB)tools/gfxconv.c $(OBJPATH)lib64util.o
	$(COMPILE_OBJ)

$(OBJPATH)ppl.o: $(TOOL_SRC)ppl.c $(DMLIB_SRC)setupfont.h \
	$(OBJPATH)libgutil.o $(DMLIB_A)
	$(COMPILE_OBJ)


$(DMLIB)assets/SetupFont.dmf: $(DMLIB)assets/SetupFont.fnt
	@echo " FONT $@ $<"
	@$(FONTCONV_BIN) $< $@

$(DMLIB_SRC)setupfont.h: $(DMLIB)assets/SetupFont.dmf
	@echo " DATA $@ $<"
	@$(DATA2INC_BIN) -q -C -n engineSetupFont -t Uint8 $< $@ > /dev/null

$(DMLIB_SRC)setupimage.h: $(DMLIB)assets/SetupImage.png
	@echo " DATA $@ $<"
	@$(DATA2INC_BIN) -q -C -n engineSetupImage -t Uint8 $< $@ > /dev/null

$(DMLIB_SRC)setupmenubar.h: $(DMLIB)assets/SetupMenuBar.png
	@echo " DATA $@ $<"
	@$(DATA2INC_BIN) -q -C -n engineSetupMenuBar -t Uint8 $< $@ > /dev/null


$(OBJPATH)dmsimple.o: $(addprefix $(DMLIB_SRC), dmsimple.c dmengine.h \
		setupmenubar.h setupfont.h setupimage.h dmsimple.c)
	$(COMPILE_OBJ)


$(DMLIB_A): $(addprefix $(OBJPATH),$(DMLIB_OBJS)) $(DMLIB)Makefile.gen config.mak
	$(LINK_STATIC_LIB)


###
### Tests
###
$(TESTS_BINPATH)blittest$(EXEEXT): $(OBJPATH)blittest.o $(DMLIB_A)
	$(LINK_BIN) $(SDL_LDFLAGS) $(SDL_TTF_LDFLAGS) -lm

$(TESTS_BINPATH)dzlibtest$(EXEEXT): $(OBJPATH)dzlibtest.o $(DMLIB_A)
	$(LINK_BIN) $(DM_LDFLAGS) $(SDL_LDFLAGS) $(ZLIB_LDFLAGS)

$(TESTS_BINPATH)plrtest$(EXEEXT): $(OBJPATH)plrtest.o $(DMLIB_A)
	$(LINK_BIN) $(DM_LDFLAGS) $(SDL_LDFLAGS) $(ZLIB_LDFLAGS) -lm

$(TESTS_BINPATH)%test$(EXEEXT): $(OBJPATH)%test.o $(DMLIB_A)
	$(LINK_BIN) $(DM_LDFLAGS) $(TOOL_LDFLAGS) -lm


###
### Tools
###
$(TOOL_BINPATH)fontconv$(EXEEXT): $(OBJPATH)fontconv.o $(DMLIB_A)
	$(LINK_BIN) $(DM_LDFLAGS) $(TOOL_LDFLAGS) $(SDL_LDFLAGS) $(SDL_TTF_LDFLAGS) $(ZLIB_LDFLAGS) -lm

$(TOOL_BINPATH)data2inc$(EXEEXT): $(OBJPATH)data2inc.o $(DMLIB_A)
	$(LINK_BIN) $(DM_LDFLAGS) $(TOOL_LDFLAGS)

$(TOOL_BINPATH)packed$(EXEEXT): $(OBJPATH)packed.o $(DMLIB_A)
	$(LINK_BIN) $(DM_LDFLAGS) $(TOOL_LDFLAGS) $(ZLIB_LDFLAGS)

$(TOOL_BINPATH)mod2wav$(EXEEXT): $(OBJPATH)mod2wav.o $(DMLIB_A)
	$(LINK_BIN) $(DM_LDFLAGS) $(TOOL_LDFLAGS) $(ZLIB_LDFLAGS) -lm

$(TOOL_BINPATH)xm2jss$(EXEEXT): $(OBJPATH)xm2jss.o $(DMLIB_A)
	$(LINK_BIN) $(DM_LDFLAGS) $(TOOL_LDFLAGS) $(ZLIB_LDFLAGS)

$(TOOL_BINPATH)dumpmod$(EXEEXT): $(OBJPATH)dumpmod.o $(DMLIB_A)
	$(LINK_BIN) $(DM_LDFLAGS) $(TOOL_LDFLAGS) $(ZLIB_LDFLAGS)


$(TOOL_BINPATH)ppl$(EXEEXT): $(OBJPATH)ppl.o $(OBJPATH)libgutil.o $(DMLIB_A)
	$(LINK_BIN) $(DM_LDFLAGS) $(ZLIB_LDFLAGS) $(SDL_LDFLAGS) -lm

$(TOOL_BINPATH)objlink$(EXEEXT): $(OBJPATH)objlink.o $(DMLIB_A)
	$(LINK_BIN) $(DM_LDFLAGS) $(TOOL_LDFLAGS)

$(TOOL_BINPATH)fanalyze$(EXEEXT): $(OBJPATH)fanalyze.o $(DMLIB_A)
	$(LINK_BIN) $(DM_LDFLAGS) $(TOOL_LDFLAGS)

$(TOOL_BINPATH)gfxconv$(EXEEXT): $(OBJPATH)gfxconv.o $(OBJPATH)lib64gfx.o \
	$(OBJPATH)lib64fmts.o $(OBJPATH)lib64util.o $(OBJPATH)libgfx.o $(DMLIB_A)
	$(LINK_BIN) $(DM_LDFLAGS) $(TOOL_LDFLAGS) $(LIBPNG_LDFLAGS) $(ZLIB_LDFLAGS)

$(TOOL_BINPATH)64vw$(EXEEXT): $(OBJPATH)64vw.o $(OBJPATH)lib64gfx.o \
	$(OBJPATH)lib64fmts.o $(OBJPATH)lib64util.o $(OBJPATH)libgfx.o $(DMLIB_A)
	$(LINK_BIN) $(DM_LDFLAGS) $(LIBPNG_LDFLAGS) $(ZLIB_LDFLAGS) $(SDL_LDFLAGS)

$(TOOL_BINPATH)gentab$(EXEEXT): $(OBJPATH)gentab.o $(DMLIB_A)
	$(LINK_BIN) $(DM_LDFLAGS) $(TOOL_LDFLAGS) -lm


###
### Demo binary
###
ifneq ($(DEMO_BIN),)
$(BINPATH)$(DEMO_BIN)$(EXEEXT): $(addprefix $(OBJPATH),$(DEMO_OBJS)) $(DMLIB_A)
	$(LINK_BIN) $(DM_LDFLAGS) $(SDL_LDFLAGS) $(DEMO_LDFLAGS) -lm
endif


###
### Editor targets
###
$(EDITOR_PRO): $(DMLIB)Makefile.gen config.mak $(addprefix $(DMLIB),$(EDITOR_SOURCES) $(EDITOR_HEADERS)) $(addprefix $(OBJPATH),$(DEMO_OBJS)) $(DMLIB_A)
	@echo " CREATE $@"
	@echo "OBJECTS_DIR = $(OBJPATH)" > $@
	@echo "MOC_DIR = $(OBJPATH)" >> $@
	@echo "QMAKE_CXXFLAGS += $(DM_CFLAGS) $(SDL_CFLAGS)" >> $@
	@echo "QMAKE_LIBS += $(filter-out %dmsimple.o,$(filter %.o %.a,$+))" >> $@
	@echo "QMAKE_LIBS += $(DM_LDFLAGS) $(SDL_LDFLAGS) $(DEMO_LDFLAGS)" >> $@
	@echo "MAKEFILE = $(EDITOR_MAKEFILE)" >> $@
	@echo "CONFIG += debug" >> $@
	@echo "QT += core gui opengl" >> $@
	@echo "TARGET = $(BINPATH)ed_$(DEMO_BIN)$(EXEEXT)" >> $@
	@echo "TEMPLATE = app" >> $@
	@echo "SOURCES = $(addprefix $(DMLIB),$(EDITOR_SOURCES))" >> $@
	@echo "HEADERS = $(addprefix $(DMLIB),$(EDITOR_HEADERS))" >> $@
	

$(EDITOR_MAKEFILE): $(EDITOR_PRO)
	@echo " QMAKE $+"
	@qmake -Wall $<

$(BINPATH)ed_$(DEMO_BIN)$(EXEEXT): $(EDITOR_MAKEFILE)
	@$(MAKE) -f $<


###
### Special targets
###
clean:
	-$(RM) $(TARGETS) $(TMPFILES) $(OBJPATH)*.o