view Makefile.gen @ 2276:b613715bb57a

Slightly improve MiniJSS build depencies.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 18 Jun 2019 12:10:21 +0300
parents 92385f9b7384
children a46a5d2833bb
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

ifeq ($(EXEEXT),.exe)
# Cross-building Windows binaries requires locally installed utilities
FONTCONV_BIN=fontconv
FONTCONV_DEP=
DATA2INC_BIN=data2inc
DATA2INC_DEP=
else
FONTCONV_BIN=$(DMLIB)tools/fontconv
FONTCONV_DEP=$(FONTCONV_BIN)
DATA2INC_BIN=$(DMLIB)tools/data2inc
DATA2INC_DEP=$(DATA2INC_BIN)
endif


###
### 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 $(OBJPATH)jss.o
	$(COMPILE_OBJ)

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

$(OBJPATH)jssplr.o: $(MINIJSS)jssplr.c $(MINIJSS)jssplr.h $(OBJPATH)jssmix.o
	$(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 $(FONTCONV_DEP)
	@echo " FONT $@ $<"
	@$(FONTCONV_BIN) $< $@

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

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

$(DMLIB_SRC)setupmenubar.h: $(DMLIB)assets/SetupMenuBar.png  $(DATA2INC_DEP)
	@echo " DATA $@ $<"
	@$(DATA2INC_BIN) -q -f 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