view Makefile.gen @ 1931:410679d2fe8a

"Enable" the image->c64 bitmap conversion path in gfxconv. It does not work without the necessary bits elsewhere, though. Also add DMC64ImageConvSpec structure for delivering conversion parameters, though it is not yet used either.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 28 Jun 2018 17:26:30 +0300
parents 73545a442ffe
children 663a8a73cccd
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_BINPATH ?= $(DMLIB)tools/
TESTS_BINPATH ?= $(DMLIB)tests/

DMLIBSRC = $(DMLIB)src/

DM_CFLAGS += -I$(DMLIBSRC)

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

ifeq ($(DM_GFX_8BIT),yes)
DM_CFLAGS += -DDM_GFX_8BIT
endif

ifeq ($(DM_GFX_15BIT),yes)
DM_CFLAGS += -DDM_GFX_15BIT
endif

ifeq ($(DM_GFX_16BIT),yes)
DM_CFLAGS += -DDM_GFX_15BIT
endif

ifeq ($(DM_GFX_32BIT),yes)
DM_CFLAGS += -DDM_GFX_15BIT
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
endif

FONTCONV_BIN=fontconv
DATA2INC_BIN=data2inc


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

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


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 \
	dmwav.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)

NONBUILD += $(OBJPATH) $(BINPATH)


all: $(NONBUILD) $(TARGETS)


###
### Generic rules
###
$(OBJPATH):
	$(MKDIR_P) $@

$(BINPATH):
	$(MKDIR_P) $@


$(OBJPATH)%.o: $(MINIJSS)%.c $(MINIJSS)%.h
	@echo " CC $<"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)

$(OBJPATH)%.o: $(MINIJSS)%.c
	@echo " CC $<"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)


$(OBJPATH)%.o: $(DMLIB)tests/%.c $(DMLIB)tests/%.h
	@echo " CC $<"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)

$(OBJPATH)%.o: $(DMLIB)tests/%.c
	@echo " CC $<"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)


$(OBJPATH)%.o: $(DMLIB)tools/%.c $(DMLIB)tools/%.h
	@echo " CC $<"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)

$(OBJPATH)%.o: $(DMLIB)tools/%.c
	@echo " CC $<"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)



$(OBJPATH)%.o: $(DMLIBSRC)%.c $(DMLIBSRC)%.h
	@echo " CC $<"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)

$(OBJPATH)%.o: $(DMLIBSRC)%.c
	@echo " CC $<"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)


$(OBJPATH)%.o: %.c %.h
	@echo " CC $<"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)

$(OBJPATH)%.o: %.c
	@echo " CC $<"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)


###
### dmlib 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: $(DMLIBSRC)dmimage.c $(DMLIBSRC)stb_image.c $(DMLIBSRC)dmimage.h
	@echo " CC $+"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)

$(OBJPATH)dmresw.o: $(DMLIBSRC)dmresw.c $(DMLIBSRC)dmres.h
	@echo " CC $+"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)


$(OBJPATH)jssmod.o: $(MINIJSS)jssmod.c $(MINIJSS)jssmod.h $(MINIJSS)jss.h
	@echo " CC $+"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)

$(OBJPATH)jssplr.o: $(MINIJSS)jssplr.c $(MINIJSS)jssplr.h $(MINIJSS)jss.h $(MINIJSS)jssmod.h $(MINIJSS)jssmix.h
	@echo " CC $+"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)

$(OBJPATH)jssmix.o: $(MINIJSS)jssmix.c $(MINIJSS)jssmix.h $(MINIJSS)jss.h
	@echo " CC $+"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)

$(OBJPATH)dmblit.o: $(DMLIBSRC)dmblit.c $(DMLIBSRC)dmscaledblit.h $(DMLIBSRC)dmunscaledblit.h $(DMLIBSRC)dmblitfunc.h $(DMLIBSRC)dmlib.h
	@echo " CC $+"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)

$(OBJPATH)dmline.o: $(DMLIBSRC)dmline.c $(DMLIBSRC)dmdrawline.h $(DMLIBSRC)dmlinefunc.h $(DMLIBSRC)dmlineclip.h $(DMLIBSRC)dmlib.h
	@echo " CC $+"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)

$(OBJPATH)libgfx.o: $(DMLIB)tools/libgfx.c $(DMLIB)tools/libgfx.h
	@echo " CC $+"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS) $(LIBPNG_CFLAGS)

$(OBJPATH)lib64fmts.o: $(DMLIB)tools/lib64fmts.c $(DMLIB)tools/lib64gfx.h
	@echo " CC $+"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)


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

$(DMLIBSRC)setupfont.h: $(DMLIB)assets/SetupFont.dmf
	$(DATA2INC_BIN) -q -C -n engineSetupFont -t Uint8 $< $@

$(DMLIBSRC)setupimage.h: $(DMLIB)assets/SetupImage.png
	$(DATA2INC_BIN) -q -C -n engineSetupImage -t Uint8 $< $@

$(DMLIBSRC)setupmenubar.h: $(DMLIB)assets/SetupMenuBar.png
	$(DATA2INC_BIN) -q -C -n engineSetupMenuBar -t Uint8 $< $@


$(OBJPATH)dmsimple.o: $(DMLIBSRC)dmsimple.c $(DMLIBSRC)dmengine.h \
	$(DMLIBSRC)setupmenubar.h $(DMLIBSRC)setupfont.h \
	$(DMLIBSRC)setupimage.h $(DMLIBSRC)dmsimple.c
	@echo " CC $+"
	@$(CC) $(CFLAGS) -c -o $@ $< $(DM_CFLAGS)


$(DMLIB_A): $(addprefix $(OBJPATH),$(DMLIB_OBJS)) $(DMLIB)Makefile.gen config.mak
	@echo " AR $@ $(addprefix $(OBJPATH),$(DMLIB_OBJS))"
	@$(AR) cru $@ $(addprefix $(OBJPATH),$(DMLIB_OBJS))
	@$(RANLIB) $@


###
### Tests
###
$(TESTS_BINPATH)blittest$(EXEEXT): $(OBJPATH)blittest.o $(DMLIB_A)
	@echo " LINK $+"
	@$(CC) -o $@ $(filter %.o %.a,$+) $(DM_LDFLAGS) $(SDL_LDFLAGS) $(SDL_TTF_LDFLAGS) -lm

$(TESTS_BINPATH)dzlibtest$(EXEEXT): $(OBJPATH)dzlibtest.o $(DMLIB_A)
	@echo " LINK $+"
	@$(CC) -o $@ $(filter %.o %.a,$+) $(DM_LDFLAGS) $(SDL_LDFLAGS) $(ZLIB_LDFLAGS)

$(TESTS_BINPATH)plrtest$(EXEEXT): $(OBJPATH)plrtest.o $(DMLIB_A)
	@echo " LINK $+"
	@$(CC) -o $@ $(filter %.o %.a,$+) $(DM_LDFLAGS) $(SDL_LDFLAGS) $(ZLIB_LDFLAGS) -lm

$(TESTS_BINPATH)%test$(EXEEXT): $(OBJPATH)%test.o $(DMLIB_A)
	@echo " LINK $+"
	@$(CC) -o $@ $(filter %.o %.a,$+) $(DM_LDFLAGS) $(TOOL_LDFLAGS) -lm


###
### Tools
###
$(TOOL_BINPATH)fontconv$(EXEEXT): $(OBJPATH)fontconv.o $(DMLIB_A)
	@echo " LINK $+"
	@$(CC) -o $@ $(filter %.o %.a,$+) $(DM_LDFLAGS) $(TOOL_LDFLAGS) $(SDL_LDFLAGS) $(SDL_TTF_LDFLAGS) $(ZLIB_LDFLAGS) -lm

$(TOOL_BINPATH)data2inc$(EXEEXT): $(OBJPATH)data2inc.o $(DMLIB_A)
	@echo " LINK $+"
	@$(CC) -o $@ $(filter %.o %.a,$+) $(DM_LDFLAGS) $(TOOL_LDFLAGS)

$(TOOL_BINPATH)packed$(EXEEXT): $(OBJPATH)packed.o $(DMLIB_A)
	@echo " LINK $+"
	@$(CC) -o $@ $(filter %.o %.a,$+) $(DM_LDFLAGS) $(TOOL_LDFLAGS) $(ZLIB_LDFLAGS)

$(TOOL_BINPATH)mod2wav$(EXEEXT): $(OBJPATH)mod2wav.o $(DMLIB_A)
	@echo " LINK $+"
	@$(CC) -o $@ $(filter %.o %.a,$+) $(DM_LDFLAGS) $(TOOL_LDFLAGS) $(ZLIB_LDFLAGS) -lm

$(TOOL_BINPATH)xm2jss$(EXEEXT): $(OBJPATH)xm2jss.o $(DMLIB_A)
	@echo " LINK $+"
	@$(CC) -o $@ $(filter %.o %.a,$+) $(DM_LDFLAGS) $(TOOL_LDFLAGS) $(ZLIB_LDFLAGS)

$(TOOL_BINPATH)dumpmod$(EXEEXT): $(OBJPATH)dumpmod.o $(DMLIB_A)
	@echo " LINK $+"
	@$(CC) -o $@ $(filter %.o %.a,$+) $(DM_LDFLAGS) $(TOOL_LDFLAGS) $(ZLIB_LDFLAGS)

$(TOOL_BINPATH)ppl$(EXEEXT): $(DMLIBSRC)setupfont.h $(OBJPATH)ppl.o $(OBJPATH)libgutil.o $(DMLIB_A) 
	@echo " LINK $+"
	@$(CC) -o $@ $(filter %.o %.a,$+) $(DM_LDFLAGS) $(ZLIB_LDFLAGS) $(SDL_LDFLAGS) -lm

$(TOOL_BINPATH)objlink$(EXEEXT): $(OBJPATH)objlink.o $(DMLIB_A)
	@echo " LINK $+"
	@$(CC) -o $@ $(filter %.o %.a,$+) $(DM_LDFLAGS) $(TOOL_LDFLAGS)

$(TOOL_BINPATH)fanalyze$(EXEEXT): $(OBJPATH)fanalyze.o $(DMLIB_A)
	@echo " LINK $+"
	@$(CC) -o $@ $(filter %.o %.a,$+) $(DM_LDFLAGS) $(TOOL_LDFLAGS)

$(TOOL_BINPATH)gfxconv$(EXEEXT): $(OBJPATH)gfxconv.o $(OBJPATH)lib64gfx.o $(OBJPATH)lib64fmts.o $(OBJPATH)libgfx.o $(DMLIB_A)
	@echo " LINK $+"
	@$(CC) -o $@ $(filter %.o %.a,$+) $(DM_LDFLAGS) $(TOOL_LDFLAGS) $(LIBPNG_LDFLAGS) $(ZLIB_LDFLAGS)

$(TOOL_BINPATH)64vw$(EXEEXT): $(OBJPATH)64vw.o $(OBJPATH)lib64gfx.o $(OBJPATH)lib64fmts.o $(OBJPATH)libgfx.o $(DMLIB_A)
	@echo " LINK $+"
	@$(CC) -o $@ $(filter %.o %.a,$+) $(DM_LDFLAGS) $(LIBPNG_LDFLAGS) $(ZLIB_LDFLAGS) $(SDL_LDFLAGS)

$(TOOL_BINPATH)gentab$(EXEEXT): $(OBJPATH)gentab.o $(DMLIB_A)
	@echo " LINK $+"
	@$(CC) -o $@ $(filter %.o %.a,$+) $(DM_LDFLAGS) $(TOOL_LDFLAGS) -lm


###
### Demo binary
###
ifneq ($(DEMO_BIN),)
$(BINPATH)$(DEMO_BIN)$(EXEEXT): $(addprefix $(OBJPATH),$(DEMO_OBJS)) $(DMLIB_A)
	@echo " LINK $+"
	@$(CC) -o $@ $(filter %.o %.a,$+) $(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