include $(topdir)/build/config.mk
ifeq ($(OS),Darwin) CC = cc CCC = c++ else ifeq ($(OS),FreeBSD) CC = cc CCC = c++ else CC = gcc CCC = g++ endif endif NASM = nasm LINK = $(CC) $(LINKAGE) OBJPATH = $(topdir)/objs BINPATH = $(OBJPATH)/$(BUILD)/bin LIBPATH = $(OBJPATH)/$(BUILD)/lib DEBUG_BINPATH = $(OBJPATH)/debug/bin DEBUG_LIBPATH = $(OBJPATH)/debug/lib RELEASE_BINPATH = $(OBJPATH)/release/bin RELEASE_LIBPATH = $(OBJPATH)/release/lib PROGRAM = $(BINPATH)/$(PROGRAM_NAME) DEBUG_PROGRAM = $(DEBUG_BINPATH)/$(PROGRAM_NAME) RELEASE_PROGRAM = $(RELEASE_BINPATH)/$(PROGRAM_NAME)
BASE_CFLAGS = -Wall -Wextra $(CONFIG_CFLAGS) -DVERSION=$(VERSION) $(DEFINES) $(INCLUDES)
ifeq ($(DEFAULT_BUILD),debug) CFLAGS := -g -O0 -DDEBUG $(CFLAGS) $(BASE_CFLAGS) -Wmissing-prototypes -Wstrict-prototypes CXXFLAGS := -g -O0 -DDEBUG $(CXXFLAGS) $(BASE_CFLAGS) endif
ifeq ($(DEFAULT_BUILD),valgrind) CFLAGS := -g -O0 -DDEBUG -DDEBUG -DFLAC__VALGRIND_TESTING $(CFLAGS) $(BASE_CFLAGS) -Wmissing-prototypes -Wstrict-prototypes CXXFLAGS := -g -O0 -DDEBUG -DDEBUG -DFLAC__VALGRIND_TESTING $(CXXFLAGS) $(BASE_CFLAGS) endif
ifeq ($(DEFAULT_BUILD),release) CFLAGS := -O3 -fomit-frame-pointer -funroll-loops -finline-functions -DFLaC__INLINE=inline -DNDEBUG $(CFLAGS) $(BASE_CFLAGS) -Wmissing-prototypes -Wstrict-prototypes CXXFLAGS := -O3 -fomit-frame-pointer -funroll-loops -finline-functions -DFLaC__INLINE=inline -DNDEBUG $(CXXFLAGS) $(BASE_CFLAGS) endif
LFLAGS = -L$(LIBPATH)
DEBUG_OBJS = $(SRCS_C:%.c=%.debug.o) $(SRCS_CC:%.cc=%.debug.o) $(SRCS_CPP:%.cpp=%.debug.o) $(SRCS_NASM:%.nasm=%.debug.o) RELEASE_OBJS = $(SRCS_C:%.c=%.release.o) $(SRCS_CC:%.cc=%.release.o) $(SRCS_CPP:%.cpp=%.release.o) $(SRCS_NASM:%.nasm=%.release.o) ifeq ($(PROC),x86_64) DEBUG_PIC_OBJS = $(SRCS_C:%.c=%.debug.pic.o) $(SRCS_CC:%.cc=%.debug.pic.o) $(SRCS_CPP:%.cpp=%.debug.pic.o) $(SRCS_NASM:%.nasm=%.debug.pic.o) RELEASE_PIC_OBJS = $(SRCS_C:%.c=%.release.pic.o) $(SRCS_CC:%.cc=%.release.pic.o) $(SRCS_CPP:%.cpp=%.release.pic.o) $(SRCS_NASM:%.nasm=%.release.pic.o) endif
debug : $(DEBUG_PROGRAM) valgrind: $(DEBUG_PROGRAM) release : $(RELEASE_PROGRAM)
$(DEBUG_PROGRAM) : $(DEBUG_OBJS) $(DEBUG_PIC_OBJS) ifeq ($(OS),Darwin) $(LINK) -o $@ $(DEBUG_OBJS) $(EXPLICIT_LIBS) else $(LINK) -o $@ $(DEBUG_OBJS) $(LFLAGS) $(LIBS) endif
$(RELEASE_PROGRAM) : $(RELEASE_OBJS) $(RELEASE_PIC_OBJS) ifeq ($(OS),Darwin) $(LINK) -o $@ $(RELEASE_OBJS) $(EXPLICIT_LIBS) else $(LINK) -o $@ $(RELEASE_OBJS) $(LFLAGS) $(LIBS) endif
include $(topdir)/build/compile.mk
.PHONY : clean clean : -rm -f $(DEBUG_OBJS) $(RELEASE_OBJS) $(DEBUG_PIC_OBJS) $(RELEASE_PIC_OBJS) $(OBJPATH)/*/bin/$(PROGRAM_NAME)
.PHONY : depend depend: makedepend -fMakefile.lite -- $(CFLAGS) $(INCLUDES) -- .c .cc *.cpp