rendered paste bodyCC=llvm-gcc
LD=llvm-ld
#-------------------------------------------------------------------------------
VERSION := $(shell sh scripts/version.sh)
ifeq ($(VERSION),unknown)
$(warning Failed to obtain sane version for this build.)
endif
#------------------------------------------------------------------------------
# Optional flags
CFLAGS := -Wall -g -ansi -pedantic -emit-llvm
# Mandatory flags
SDL_CPPFLAGS := $(shell sdl-config --cflags)
PNG_CPPFLAGS := $(shell libpng-config --cflags)
ALL_CFLAGS := $(CFLAGS)
ALL_CPPFLAGS := $(SDL_CPPFLAGS) $(PNG_CPPFLAGS) -Ishare \
-DVERSION=\"$(VERSION)\"
ifeq ($(ENABLE_NLS),0)
ALL_CPPFLAGS += -DENABLE_NLS=0
else
ALL_CPPFLAGS += -DENABLE_NLS=1
endif
ALL_CPPFLAGS += $(CPPFLAGS)
#------------------------------------------------------------------------------
SDL_LIBS := -lSDL -lpthread
PNG_LIBS := -lpng12
ifdef MINGW
ifneq ($(ENABLE_NLS),0)
INTL_LIBS := -lintl
endif
OGL_LIBS := -lopengl32 -lm
BASE_LIBS := -lSDL -lSDL_image $(INTL_LIBS)
ALL_LIBS := $(SDL_LIBS) -lSDL_image $(INTL_LIBS) \
$(PNG_LIBS) -lSDL_ttf -lSDL_mixer $(OGL_LIBS)
else
OGL_LIBS := -lGL -lm
BASE_LIBS := $(SDL_LIBS) -lSDL_image
ALL_LIBS := $(BASE_LIBS) $(PNG_LIBS) -lSDL_ttf -lSDL_mixer $(OGL_LIBS)
endif
#------------------------------------------------------------------------------
ifdef MINGW
EXT := .exe
WINE := wine
endif
#------------------------------------------------------------------------------
MAPC_TARG := mapc$(EXT)
BALL_TARG := neverball$(EXT)
PUTT_TARG := neverputt$(EXT)
#------------------------------------------------------------------------------
MAPC_OBJS := \
share/vec3.o \
share/base_image.o \
share/solid.o \
share/binary.o \
share/base_config.o \
share/mapc.o
BALL_OBJS := \
share/lang.o \
share/st_resol.o \
share/vec3.o \
share/base_image.o \
share/image.o \
share/solid.o \
share/solid_gl.o \
share/part.o \
share/back.o \
share/geom.o \
share/gui.o \
share/base_config.o \
share/config.o \
share/binary.o \
share/state.o \
share/audio.o \
ball/hud.o \
ball/mode.o \
ball/game.o \
ball/score.o \
ball/level.o \
ball/levels.o \
ball/set.o \
ball/demo.o \
ball/util.o \
ball/st_conf.o \
ball/st_demo.o \
ball/st_save.o \
ball/st_goal.o \
ball/st_fall_out.o \
ball/st_time_out.o \
ball/st_done.o \
ball/st_level.o \
ball/st_over.o \
ball/st_play.o \
ball/st_set.o \
ball/st_start.o \
ball/st_title.o \
ball/st_help.o \
ball/st_name.o \
ball/st_shared.o \
ball/st_pause.o \
ball/main.o
PUTT_OBJS := \
share/lang.o \
share/st_resol.o \
share/vec3.o \
share/base_image.o \
share/image.o \
share/solid.o \
share/solid_gl.o \
share/part.o \
share/geom.o \
share/back.o \
share/base_config.o \
share/config.o \
share/binary.o \
share/audio.o \
share/state.o \
share/gui.o \
putt/hud.o \
putt/game.o \
putt/hole.o \
putt/course.o \
putt/st_all.o \
putt/st_conf.o \
putt/main.o
BALL_DEPS := $(BALL_OBJS:.o=.d)
PUTT_DEPS := $(PUTT_OBJS:.o=.d)
MAPC_DEPS := $(MAPC_OBJS:.o=.d)
MAPS := $(shell find data -name "*.map" \! -name "*.autosave.map")
SOLS := $(MAPS:%.map=%.sol)
#------------------------------------------------------------------------------
%.o : %.c
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) -MM -MP -MF $*.d -MT "$@" $<
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) -o $@ -c $<
%.sol : %.map $(MAPC_TARG)
$(WINE) ./$(MAPC_TARG) $< data
#------------------------------------------------------------------------------
all : $(BALL_TARG) $(PUTT_TARG) $(MAPC_TARG) sols locales
$(BALL_TARG) : $(BALL_OBJS)
$(LD) -o $(BALL_TARG) $(BALL_OBJS) $(LDFLAGS) $(ALL_LIBS)
$(PUTT_TARG) : $(PUTT_OBJS)
$(LD) -o $(PUTT_TARG) $(PUTT_OBJS) $(LDFLAGS) $(ALL_LIBS)
$(MAPC_TARG) : $(MAPC_OBJS)
$(LD) -o $(MAPC_TARG) $(MAPC_OBJS) $(LDFLAGS) $(BASE_LIBS)
sols : $(SOLS)
locales :
ifneq ($(ENABLE_NLS),0)
$(MAKE) -C po
endif
clean-src :
$(RM) $(BALL_TARG) $(BALL_OBJS) $(BALL_DEPS)
$(RM) $(PUTT_TARG) $(PUTT_OBJS) $(PUTT_DEPS)
$(RM) $(MAPC_TARG) $(MAPC_OBJS) $(MAPC_DEPS)
clean : clean-src
$(RM) $(SOLS)
$(MAKE) -C po clean
test : all
./neverball
#------------------------------------------------------------------------------
.PHONY : all sols locales clean-src clean test
-include $(BALL_DEPS) $(PUTT_DEPS) $(MAPC_DEPS)
#------------------------------------------------------------------------------
ifdef MINGW
#------------------------------------------------------------------------------
INSTALLER := ../neverball-$(VERSION)-setup.exe
MAKENSIS := makensis
MAKENSIS_FLAGS := -DVERSION=$(VERSION) -DOUTFILE=$(INSTALLER)
TODOS := todos
FROMDOS := fromdos
CP := cp
TEXT_DOCS := \
doc/AUTHORS \
doc/MANUAL \
CHANGES \
COPYING \
README
TXT_DOCS := $(TEXT_DOCS:%=%.txt)
#-----------------------------------------------------------------------------
.PHONY: setup
setup: $(INSTALLER)
$(INSTALLER): install-dlls convert-text-files all tools
$(MAKENSIS) $(MAKENSIS_FLAGS) -nocd scripts/neverball.nsi
$(INSTALLER): LDFLAGS := -s $(LDFLAGS)
.PHONY: clean-setup
clean-setup: clean
$(RM) install-dlls.sh *.dll $(TXT_DOCS)
find data -name "*.txt" -exec $(FROMDOS) {} \;
$(MAKE) -C tools EXT=$(EXT) clean
#-----------------------------------------------------------------------------
.PHONY: install-dlls
install-dlls: install-dlls.sh
sh $<
install-dlls.sh:
if ! sh scripts/gen-install-dlls.sh > $@; then \
$(RM) $@; \
exit 1; \
fi
@echo --------------------------------------------------------
@echo You can probably ignore any file-not-found errors above.
@echo Now edit $@ to your needs before restarting make.
@echo --------------------------------------------------------
@exit 1
#-----------------------------------------------------------------------------
.PHONY: convert-text-files
convert-text-files: $(TXT_DOCS)
find data -name "*.txt" -exec $(TODOS) {} \;
%.txt: %
$(CP) $< $@
$(TODOS) $@
#-----------------------------------------------------------------------------
.PHONY: tools
tools:
$(MAKE) -C tools EXT=$(EXT)
#------------------------------------------------------------------------------
endif
#------------------------------------------------------------------------------