mirror of
https://github.com/vgmstream/vgmstream.git
synced 2024-12-18 01:15:52 +01:00
301 lines
7.6 KiB
Makefile
301 lines
7.6 KiB
Makefile
###############################
|
|
# vgmstream makefile
|
|
###############################
|
|
|
|
ifeq ($(VGMSTREAM_VERSION),)
|
|
# for current dir (expanded later)
|
|
VGMSTREAM_VERSION=`sh ./version-get.sh`
|
|
else
|
|
VGMSTREAM_VERSION=$(VGMSTREAM_VERSION)
|
|
endif
|
|
DEF_CFLAGS += -DVGMSTREAM_VERSION_AUTO -DVGM_LOG_OUTPUT
|
|
|
|
VGM_X64=0
|
|
|
|
###############################################################################
|
|
### external defs
|
|
# currently aimed to WIN32 builds but vgmstream-cli should work for others (or use autotools instead)
|
|
export TARGET_OS = $(OS)
|
|
|
|
#for Win builds with vgmstream123
|
|
LIBAO_DLL_PATH = ../libao/bin
|
|
|
|
### tools
|
|
RMF = rm -f
|
|
|
|
ifeq ($(TARGET_OS),Windows_NT)
|
|
SHELL = sh
|
|
CC = gcc
|
|
AR = ar
|
|
STRIP = strip
|
|
WINDRES = windres
|
|
DLLTOOL = dlltool
|
|
|
|
DLL_DIR = .
|
|
export DLL_DIR
|
|
ifneq ($(VGM_X64),0)
|
|
DLLTOOL = dlltool -m i386:x86-64 --as-flags --64
|
|
DLL_DIR = dll-x64
|
|
endif
|
|
|
|
# same thing, the above should be available
|
|
#CC = i686-w64-mingw32-gcc
|
|
#AR = i686-w64-mingw32-ar
|
|
#STRIP = i686-w64-mingw32-strip
|
|
#WINDRES = i686-w64-mingw32-windres
|
|
#DLLTOOL = i686-w64-mingw32-dlltool
|
|
|
|
else
|
|
SHELL = /bin/sh
|
|
CC = gcc
|
|
AR = ar
|
|
STRIP = strip
|
|
WINDRES =
|
|
DLLTOOL =
|
|
|
|
# (old crosscompile, not used anymore?)
|
|
#CC = i586-mingw32msvc-gcc
|
|
#AR = i586-mingw32msvc-ar
|
|
#STRIP = i586-mingw32msvc-strip
|
|
#WINDRES = i586-mingw32msvc-windres
|
|
#DLLTOOL = i586-mingw32msvc-dlltool
|
|
|
|
endif
|
|
export RMF SHELL CC AR STRIP WINDRES DLLTOOL
|
|
|
|
|
|
###############################################################################
|
|
### build defs
|
|
|
|
DEF_CFLAGS += -ffast-math -O3 -Wall -Werror=format-security -Wvla -Wimplicit-function-declaration -Wignored-qualifiers
|
|
|
|
VGM_DEBUG_FLAGS = 0
|
|
ifeq ($(VGM_DEBUG_FLAGS),1)
|
|
#DEF_CFLAGS += -O0
|
|
DEF_CFLAGS += -g -DVGM_DEBUG_OUTPUT
|
|
DEF_CFLAGS += -Wall
|
|
DEF_CFLAGS += -Wextra
|
|
DEF_CFLAGS += -Wno-sign-compare
|
|
DEF_CFLAGS += -Wlogical-op
|
|
#DEF_CFLAGS += -pedantic -Wconversion -std=gnu90
|
|
#DEF_CFLAGS += -Wfloat-equal
|
|
DEF_CFLAGS += -Wdisabled-optimization -Wunsafe-loop-optimizations -Wswitch-default
|
|
DEF_CFLAGS += -Wcast-qual -Wpointer-arith
|
|
DEF_CFLAGS += -Wcast-align=strict -Wduplicated-cond -Wjump-misses-init -Wnull-dereference
|
|
DEF_CFLAGS += -Wold-style-definition -Wstrict-prototypes
|
|
DEF_CFLAGS += -Wmultistatement-macros -Wstringop-truncation
|
|
DEF_CFLAGS += -Wredundant-decls -Wmissing-include-dirs -Wmissing-declarations
|
|
#DEF_CFLAGS += -Wshadow
|
|
#DEF_CFLAGS += -Wstack-protector -fstack-protector
|
|
STRIP = echo
|
|
endif
|
|
|
|
LIBS_CFLAGS=
|
|
LIBS_LDFLAGS=
|
|
LIBS_TARGET_EXT_LIBS=
|
|
|
|
### bit stuff
|
|
# TODO: some targets don't work with X64 (Winamp, etc), detect
|
|
#ifneq ($(VGM_X86),0)
|
|
# DEF_CFLAGS += -m32
|
|
#endif
|
|
ifneq ($(VGM_X64),0)
|
|
DEF_CFLAGS += -m64
|
|
endif
|
|
|
|
# config libs
|
|
VGM_G7221 = 1
|
|
ifneq ($(VGM_G7221),0)
|
|
LIBS_CFLAGS += -DVGM_USE_G7221
|
|
endif
|
|
|
|
|
|
### external libs
|
|
# (call "make VGM_xxx = 0/1" to override 0/1 defaults, as Make does)
|
|
ifeq ($(TARGET_OS),Windows_NT)
|
|
|
|
# enabled by default on Windows
|
|
VGM_VORBIS = 1
|
|
ifneq ($(VGM_VORBIS),0)
|
|
LIBS_CFLAGS += -DVGM_USE_VORBIS
|
|
LIBS_LDFLAGS += -lvorbis
|
|
LIBS_TARGET_EXT_LIBS += libvorbis.dll.a
|
|
endif
|
|
|
|
VGM_MPEG = 1
|
|
ifneq ($(VGM_MPEG),0)
|
|
LIBS_CFLAGS += -DVGM_USE_MPEG
|
|
LIBS_LDFLAGS += -lmpg123-0
|
|
LIBS_TARGET_EXT_LIBS += libmpg123-0.dll.a
|
|
endif
|
|
|
|
VGM_G719 = 1
|
|
ifneq ($(VGM_G719),0)
|
|
LIBS_CFLAGS += -DVGM_USE_G719
|
|
LIBS_LDFLAGS += -lg719_decode
|
|
LIBS_TARGET_EXT_LIBS += libg719_decode.dll.a
|
|
endif
|
|
|
|
VGM_FFMPEG = 1
|
|
ifneq ($(VGM_FFMPEG),0)
|
|
LIBS_CFLAGS += -DVGM_USE_FFMPEG -I../ext_includes/ffmpeg
|
|
LIBS_LDFLAGS += -lavcodec-vgmstream-59 -lavformat-vgmstream-59 -lavutil-vgmstream-57 -lswresample-vgmstream-4
|
|
LIBS_TARGET_EXT_LIBS += avcodec-vgmstream-59.dll.a avformat-vgmstream-59.dll.a avutil-vgmstream-57.dll.a swresample-vgmstream-4.dll.a
|
|
endif
|
|
|
|
VGM_ATRAC9 = 1
|
|
ifneq ($(VGM_ATRAC9),0)
|
|
LIBS_CFLAGS += -DVGM_USE_ATRAC9
|
|
LIBS_LDFLAGS += -latrac9
|
|
LIBS_TARGET_EXT_LIBS += libatrac9.dll.a
|
|
endif
|
|
|
|
VGM_CELT = 1
|
|
ifneq ($(VGM_CELT),0)
|
|
LIBS_CFLAGS += -DVGM_USE_CELT
|
|
LIBS_LDFLAGS += -lcelt-0061 -lcelt-0110
|
|
LIBS_TARGET_EXT_LIBS += libcelt-0061.dll.a libcelt-0110.dll.a
|
|
endif
|
|
|
|
VGM_SPEEX = 1
|
|
ifneq ($(VGM_SPEEX),0)
|
|
LIBS_CFLAGS += -DVGM_USE_SPEEX
|
|
LIBS_LDFLAGS += -lspeex-1
|
|
LIBS_TARGET_EXT_LIBS += libspeex-1.dll.a
|
|
endif
|
|
|
|
else
|
|
|
|
# must install system libs and enable manually on Linux
|
|
VGM_VORBIS = 0
|
|
ifneq ($(VGM_VORBIS),0)
|
|
LIBS_CFLAGS += -DVGM_USE_VORBIS
|
|
LIBS_LDFLAGS += -lvorbis -lvorbisfile
|
|
endif
|
|
|
|
VGM_MPEG = 0
|
|
ifneq ($(VGM_MPEG),0)
|
|
LIBS_CFLAGS += -DVGM_USE_MPEG
|
|
LIBS_LDFLAGS += -lmpg123
|
|
endif
|
|
|
|
VGM_G719 = 0
|
|
ifneq ($(VGM_G719),0)
|
|
LIBS_CFLAGS += -DVGM_USE_G719
|
|
LIBS_LDFLAGS += -lg719_decode
|
|
endif
|
|
|
|
VGM_FFMPEG = 0
|
|
ifneq ($(VGM_FFMPEG),0)
|
|
LIBS_CFLAGS += -DVGM_USE_FFMPEG
|
|
LIBS_LDFLAGS += -lavcodec -lavformat -lavutil -lswresample
|
|
endif
|
|
|
|
VGM_ATRAC9 = 0
|
|
ifneq ($(VGM_ATRAC9),0)
|
|
LIBS_CFLAGS += -DVGM_USE_ATRAC9
|
|
ifeq ($(VGM_ATRAC9),1)
|
|
LIBS_LDFLAGS += -latrac9
|
|
endif
|
|
ifeq ($(VGM_ATRAC9),2)
|
|
LIBS_LDFLAGS += -l:libatrac9.a
|
|
endif
|
|
endif
|
|
|
|
VGM_CELT = 0
|
|
ifneq ($(VGM_CELT),0)
|
|
LIBS_CFLAGS += -DVGM_USE_CELT
|
|
ifeq ($(VGM_CELT),1)
|
|
LIBS_LDFLAGS += -lcelt-0061 -lcelt-0110
|
|
endif
|
|
ifeq ($(VGM_CELT),2)
|
|
LIBS_LDFLAGS += -l:libcelt-0061.a -l:libcelt-0110.a
|
|
endif
|
|
endif
|
|
|
|
VGM_SPEEX = 0
|
|
ifneq ($(VGM_SPEEX),0)
|
|
LIBS_CFLAGS += -DVGM_USE_SPEEX
|
|
LIBS_LDFLAGS += -lspeex
|
|
endif
|
|
endif
|
|
|
|
export DEF_CFLAGS LIBS_CFLAGS LIBS_LDFLAGS LIBS_TARGET_EXT_LIBS
|
|
|
|
|
|
###############################################################################
|
|
### internal defs
|
|
ifeq ($(TARGET_OS),Windows_NT)
|
|
BIN_FILE = vgmstream-$(VGMSTREAM_VERSION)-win.zip
|
|
ZIP_FILES = COPYING
|
|
ZIP_FILES += README.md
|
|
ZIP_FILES += doc/USAGE.md
|
|
ZIP_FILES += cli/vgmstream-cli.exe
|
|
ZIP_FILES += winamp/in_vgmstream.dll
|
|
ZIP_FILES += xmplay/xmp-vgmstream.dll
|
|
ZIP_FILES += ext_libs/*.dll
|
|
ZIP_FILES_AO = cli/vgmstream123.exe
|
|
ZIP_FILES_AO += $(LIBAO_DLL_PATH)/*.dll
|
|
else
|
|
BIN_FILE = vgmstream-$(VGMSTREAM_VERSION)-bin.zip
|
|
ZIP_FILES = COPYING
|
|
ZIP_FILES += README.md
|
|
ZIP_FILES += doc/USAGE.md
|
|
ZIP_FILES += cli/vgmstream-cli
|
|
ZIP_FILES_AO = cli/vgmstream123
|
|
endif
|
|
|
|
###############################################################################
|
|
### targets
|
|
buildrelease: clean bin
|
|
|
|
buildrelease-ex: clean bin-ex
|
|
|
|
buildfullrelease: clean sourceball bin
|
|
|
|
# make a tmp copy of git's index to avoid including dev stuff
|
|
sourceball:
|
|
rm -rf vgmstream-$(VGMSTREAM_VERSION)
|
|
git checkout-index -f -a --prefix=vgmstream-$(VGMSTREAM_VERSION)/
|
|
# echo "#!/bin/sh" > vgmstream-$(VGMSTREAM_VERSION)/version-get.sh
|
|
# echo "echo \"$(VGMSTREAM_VERSION)\"" >> vgmstream-$(VGMSTREAM_VERSION)/version-get.sh
|
|
tar cvzf "bin/vgmstream-$(VGMSTREAM_VERSION)-src.tar.gz" vgmstream-$(VGMSTREAM_VERSION)/*
|
|
# git archive --format zip --output bin/vgmstream-$(VGMSTREAM_VERSION)-src.zip master
|
|
rm -rf vgmstream-$(VGMSTREAM_VERSION)
|
|
|
|
bin: vgmstream-cli winamp xmplay
|
|
mkdir -p bin
|
|
zip -FS -j "bin/$(BIN_FILE)" $(ZIP_FILES)
|
|
|
|
#separate since vgmstream123 is kinda untested
|
|
bin-ex: vgmstream-cli winamp xmplay vgmstream123
|
|
mkdir -p bin
|
|
zip -FS -j "bin/$(BIN_FILE)" $(ZIP_FILES) $(ZIP_FILES_AO)
|
|
|
|
vgmstream-cli: vgmstream_cli
|
|
|
|
vgmstream_cli: version
|
|
$(MAKE) -C cli vgmstream_cli
|
|
|
|
vgmstream123: version
|
|
$(MAKE) -C cli vgmstream123
|
|
|
|
winamp: version
|
|
$(MAKE) -C winamp in_vgmstream
|
|
|
|
xmplay: version
|
|
$(MAKE) -C xmplay xmp_vgmstream
|
|
|
|
version:
|
|
sh version-make.sh
|
|
|
|
clean:
|
|
$(RMF) vgmstream-*.zip
|
|
$(MAKE) -C src clean
|
|
$(MAKE) -C cli clean
|
|
$(MAKE) -C winamp clean
|
|
$(MAKE) -C xmplay clean
|
|
$(MAKE) -C ext_libs clean
|
|
|
|
.PHONY: clean buildfullrelease buildrelease sourceball bin vgmstream-cli vgmstream_cli vgmstream123 winamp xmplay version
|