Mercurial > hg > dmlib
view Makefile.gen @ 2592:70b589a22495
Sync some changes from th-libs/th_args.c
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 30 Dec 2022 10:24:20 +0200 |
parents | ba0f55e2f877 |
children |
line wrap: on
line source
### ### Get settings from config.mak or other include ### ifneq ($(DM_CONFIG),) ifneq ($(DM_CONFIG),no) include $(DM_CONFIG) else DM_CONFIG= endif else include config.mak DM_CONFIG=config.mak endif ### ### Compiler flags ### ifeq ($(EXTRA_CFLAGS),) EXTRA_CFLAGS =-O3 # -march=corei7 endif CFLAGS += -g -W -Wall -D_FILE_OFFSET_BITS=64 -D_POSIX_C_SOURCE=200808L $(EXTRA_CFLAGS) CXXFLAGS = $(CFLAGS) CFLAGS += -std=c11 #CFLAGS += -pedantic DM_CFLAGS += -I$(DMLIB_SRC) $(SDL_CFLAGS) DM_LDFLAGS += $(LDFLAGS) ### ### Tools, paths and directories ### 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/ ### ### 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 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 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 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=$(TOOL_BINPATH)fontconv$(BINEXT) DATA2INC_BIN=$(TOOL_BINPATH)data2inc$(BINEXT) ifeq ($(BINEXT),.exe) # Cross-building Windows binaries requires locally installed utilities FONTCONV_DEP= DATA2INC_DEP= else ifeq ($(DM_BUILD_TOOLS),yes) FONTCONV_DEP=$(FONTCONV_BIN) DATA2INC_DEP=$(DATA2INC_BIN) endif endif ### ### Main targets and objects ### 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 dmzlib.o \ dmlicense.o TESTS_TARGETS = $(addprefix $(TESTS_BINPATH),$(addsuffix $(BINEXT),$(TESTS_BINARIES))) TOOL_TARGETS = $(addprefix $(TOOL_BINPATH),$(addsuffix $(BINEXT),$(TOOL_BINARIES))) TARGETS += \ $(DMLIB_A) \ $(addprefix $(BINPATH),$(addsuffix $(BINEXT),$(BINARIES))) \ $(TOOL_TARGETS) $(TESTS_TARGETS) NOBUILD_TARGETS += NOINST_TARGETS += ### ### Functions and compilation/link commands ### ifneq ($(V),1) DO_CMD=/bin/echo -E " $(1) $(2)" && $(3) else DO_CMD=/bin/echo -E $(3) && $(3) endif DO_MKDIR=if test ! -z "$(1)" -a ! -d "$(1)"; then /bin/echo -E " MKDIR $(1)"; mkdir -p "$(1)"; fi COMPILE_C_OBJ = \ @$(call DO_MKDIR,$(OBJPATH)) ; \ $(call DO_CMD,CC,$<,$(CC) $(CFLAGS) $(DM_CFLAGS) -c -o $@ $< $(1)) LINK_C_BIN = \ @$(call DO_MKDIR,$(BINPATH)) ; \ $(call DO_CMD,LINK,$@,$(CC) -o $@ $(filter %.o %.a,$+) $(LDFLAGS) $(1)) COMPILE_CXX_OBJ = \ @$(call DO_MKDIR,$(OBJPATH)) ; \ $(call DO_CMD,CXX,$<,$(CXX) $(CXXFLAGS) $(DM_CFLAGS) -c -o $@ $< $(1)) LINK_CXX_BIN = \ @$(call DO_MKDIR,$(BINPATH)) ; \ $(call DO_CMD,LINK,$@,$(CXX) -o $@ $(filter %.o %.a,$+) $(LDFLAGS) $(1)) LINK_STATIC_LIB = \ @$(call DO_MKDIR,$(OBJPATH)) ; \ $(call DO_CMD,AR,$@ $(filter %.o,$+),$(AR) cru $@ $(filter %.o,$+)) ; \ $(call DO_CMD,RANLIB,$@,$(RANLIB) $@) ### ### Generic target rules ### all: $(NOBUILD_TARGETS) $(NOINST_TARGETS) $(TARGETS) $(OBJPATH)%.o: $(DMLIB)tests/%.c $(DMLIB)tests/%.h $(call COMPILE_C_OBJ,) $(OBJPATH)%.o: $(DMLIB)tests/%.c $(call COMPILE_C_OBJ,) $(OBJPATH)%.o: $(DMLIB)tools/%.c $(DMLIB)tools/%.h $(call COMPILE_C_OBJ,) $(OBJPATH)%.o: $(DMLIB)tools/%.c $(call COMPILE_C_OBJ,) $(OBJPATH)%.o: %.c %.h $(call COMPILE_C_OBJ,) $(OBJPATH)%.o: %.c $(call COMPILE_C_OBJ,) $(OBJPATH)%.o: $(MINIJSS)%.c $(MINIJSS)%.h $(call COMPILE_C_OBJ,) $(OBJPATH)%.o: $(MINIJSS)%.c $(call COMPILE_C_OBJ,) $(OBJPATH)%.o: $(DMLIB_SRC)%.c $(DMLIB_SRC)%.h $(call COMPILE_C_OBJ,) $(OBJPATH)%.o: $(DMLIB_SRC)%.c $(call COMPILE_C_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 $(call COMPILE_C_OBJ,) $(OBJPATH)dmresw.o: $(DMLIB_SRC)dmresw.c $(DMLIB_SRC)dmres.h $(call COMPILE_C_OBJ,) $(OBJPATH)jssmod.o: $(MINIJSS)jssmod.c $(MINIJSS)jssmod.h $(OBJPATH)jss.o $(call COMPILE_C_OBJ,) $(OBJPATH)jssmix.o: $(MINIJSS)jssmix.c $(MINIJSS)jssmix.h $(OBJPATH)jssmod.o $(call COMPILE_C_OBJ,) $(OBJPATH)jssplr.o: $(MINIJSS)jssplr.c $(MINIJSS)jssplr.h $(OBJPATH)jssmix.o $(call COMPILE_C_OBJ,) $(OBJPATH)dmblit.o: $(DMLIB_SRC)dmblit.c $(DMLIB_SRC)dmscaledblit.h $(DMLIB_SRC)dmunscaledblit.h $(DMLIB_SRC)dmblitfunc.h $(DMLIB_SRC)dmlib.h $(call COMPILE_C_OBJ,) $(OBJPATH)dmline.o: $(DMLIB_SRC)dmline.c $(DMLIB_SRC)dmdrawline.h $(DMLIB_SRC)dmlinefunc.h $(DMLIB_SRC)dmlineclip.h $(DMLIB_SRC)dmlib.h $(call COMPILE_C_OBJ,) $(OBJPATH)libgfx.o: $(DMLIB)tools/libgfx.c $(DMLIB)tools/libgfx.h $(DMLIB_A) $(call COMPILE_C_OBJ,) $(OBJPATH)lib64gfx.o: $(DMLIB)tools/lib64gfx.c $(DMLIB)tools/lib64gfx.h $(OBJPATH)libgfx.o $(call COMPILE_C_OBJ,) $(OBJPATH)lib64util.o: $(DMLIB)tools/lib64util.c $(DMLIB)tools/lib64util.h $(OBJPATH)lib64gfx.o $(call COMPILE_C_OBJ,) $(OBJPATH)lib64fmts.o: $(DMLIB)tools/lib64fmts.c $(OBJPATH)lib64gfx.o $(call COMPILE_C_OBJ,) $(OBJPATH)64vw.o: $(DMLIB)tools/64vw.c $(OBJPATH)lib64util.o $(call COMPILE_C_OBJ,) $(OBJPATH)gfxconv.o: $(DMLIB)tools/gfxconv.c $(OBJPATH)lib64util.o $(call COMPILE_C_OBJ,) $(OBJPATH)ppl.o: $(TOOL_SRC)ppl.c $(DMLIB_SRC)setupfont.h \ $(OBJPATH)libgutil.o $(DMLIB_A) $(call COMPILE_C_OBJ,) $(DMLIB)assets/SetupFont.dmf: $(DMLIB)assets/SetupFont.fnt $(FONTCONV_DEP) @$(call DO_CMD,FONT,$@ $<,$(FONTCONV_BIN) $< $@) $(DMLIB_SRC)setupfont.h: $(DMLIB)assets/SetupFont.dmf $(DATA2INC_DEP) @$(call DO_CMD,DATA,$@ $<,$(DATA2INC_BIN) -q -f c -n engineSetupFont -t Uint8 $< $@ > /dev/null) $(DMLIB_SRC)setupimage.h: $(DMLIB)assets/SetupImage.png $(DATA2INC_DEP) @$(call DO_CMD,DATA,$@ $<,$(DATA2INC_BIN) -q -f c -n engineSetupImage -t Uint8 $< $@ > /dev/null) $(DMLIB_SRC)setupmenubar.h: $(DMLIB)assets/SetupMenuBar.png $(DATA2INC_DEP) @$(call DO_CMD,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) $(call COMPILE_C_OBJ,) $(DMLIB_A): $(addprefix $(OBJPATH),$(DMLIB_OBJS)) $(DMLIB)Makefile.gen $(DM_CONFIG) $(call LINK_STATIC_LIB,) ### ### Tests ### define RULE_TESTS_BIN $$(TESTS_BINPATH)$(1)$$(BINEXT): $$(OBJPATH)$(1).o $(2) $$(DMLIB_A) $$(call LINK_C_BIN,$$(DM_LDFLAGS) $$(SDL_LDFLAGS) $(3)) endef $(eval $(call RULE_TESTS_BIN,blittest,,$$(SDL_TTF_LDFLAGS) -lm)) $(eval $(call RULE_TESTS_BIN,dzlibtest,,$$(ZLIB_LDFLAGS))) $(eval $(call RULE_TESTS_BIN,plrtest,,$$(ZLIB_LDFLAGS) -lm)) $(eval $(call RULE_TESTS_BIN,%test,,$$(TOOL_LDFLAGS) -lm)) ### ### Tools ### define RULE_TOOL_BIN $$(TOOL_BINPATH)$(1)$$(BINEXT): $$(OBJPATH)$(1).o $(2) $$(DMLIB_A) $$(call LINK_C_BIN, $$(DM_LDFLAGS) $$(TOOL_LDFLAGS) $(3)) endef $(eval $(call RULE_TOOL_BIN,fontconv,,\ $$(SDL_LDFLAGS) $$(SDL_TTF_LDFLAGS) $$(ZLIB_LDFLAGS) -lm)) $(eval $(call RULE_TOOL_BIN,data2inc,,)) $(eval $(call RULE_TOOL_BIN,packed,,$(ZLIB_LDFLAGS))) $(eval $(call RULE_TOOL_BIN,mod2wav,,$(ZLIB_LDFLAGS) -lm)) $(eval $(call RULE_TOOL_BIN,xm2jss,,$(ZLIB_LDFLAGS))) $(eval $(call RULE_TOOL_BIN,dumpmod,,$(ZLIB_LDFLAGS))) $(eval $(call RULE_TOOL_BIN,ppl,\ $$(OBJPATH)libgutil.o,$$(ZLIB_LDFLAGS) $$(SDL_LDFLAGS) -lm)) $(eval $(call RULE_TOOL_BIN,objlink,,)) $(eval $(call RULE_TOOL_BIN,fanalyze,,)) $(eval $(call RULE_TOOL_BIN,gfxconv,\ $$(OBJPATH)lib64gfx.o $$(OBJPATH)lib64fmts.o \ $$(OBJPATH)lib64util.o $$(OBJPATH)libgfx.o,\ $$(LIBPNG_LDFLAGS) $$(ZLIB_LDFLAGS))) $(eval $(call RULE_TOOL_BIN,64vw,\ $$(OBJPATH)lib64gfx.o $$(OBJPATH)lib64fmts.o \ $$(OBJPATH)lib64util.o $$(OBJPATH)libgfx.o,\ $$(LIBPNG_LDFLAGS) $$(ZLIB_LDFLAGS) $$(SDL_LDFLAGS))) ### ### Demo binary ### ifneq ($(DEMO_BIN),) $(BINPATH)$(DEMO_BIN)$(BINEXT): $(addprefix $(OBJPATH),$(DEMO_OBJS)) $(DMLIB_A) $(call LINK_C_BIN, $(DM_LDFLAGS) $(SDL_LDFLAGS) $(DEMO_LDFLAGS) -lm) endif ### ### Editor targets ### $(EDITOR_PRO): $(DMLIB)Makefile.gen $(DM_CONFIG) $(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)$(BINEXT)" >> $@ @echo "TEMPLATE = app" >> $@ @echo "SOURCES = $(addprefix $(DMLIB),$(EDITOR_SOURCES))" >> $@ @echo "HEADERS = $(addprefix $(DMLIB),$(EDITOR_HEADERS))" >> $@ $(EDITOR_MAKEFILE): $(EDITOR_PRO) @$(call DO_CMD,QMAKE,$+,qmake -Wall $<) $(BINPATH)ed_$(DEMO_BIN)$(BINEXT): $(EDITOR_MAKEFILE) @$(MAKE) -f $< ### ### Special targets ### clean: -$(RM) $(TARGETS) $(NOINST_TARGETS) $(CLEAN_TARGETS) $(OBJPATH)*.o distclean: clean -$(RM) $(DISTCLEAN_TARGETS) *~ core *.core .PHONY: clean distclean all