blob: 1ff6d2d1adc76ca44f9e8cc17cae79ea3f91ab52 [file] [log] [blame]
Josh Coalson6b05bc52001-06-08 00:13:21 +00001# FLAC - Free Lossless Audio Codec
Erik de Castro Lopob1982fb2013-05-25 17:11:19 +10002# Copyright (C) 2001-2009 Josh Coalson
Erik de Castro Lopo6a5fe432016-12-05 06:35:39 +11003# Copyright (C) 2011-2016 Xiph.Org Foundation
Josh Coalson6b05bc52001-06-08 00:13:21 +00004#
Josh Coalsone8a76012003-02-07 00:14:32 +00005# This file is part the FLAC project. FLAC is comprised of several
Ulrich Klauercd4ddab2013-05-26 22:53:43 +02006# components distributed under different licenses. The codec libraries
Josh Coalsone8a76012003-02-07 00:14:32 +00007# are distributed under Xiph.Org's BSD-like license (see the file
8# COPYING.Xiph in this distribution). All other programs, libraries, and
9# plugins are distributed under the GPL (see COPYING.GPL). The documentation
10# is distributed under the Gnu FDL (see COPYING.FDL). Each file in the
11# FLAC distribution contains at the top the terms under which it may be
12# distributed.
Josh Coalson6b05bc52001-06-08 00:13:21 +000013#
Josh Coalsone8a76012003-02-07 00:14:32 +000014# Since this particular file is relevant to all components of FLAC,
15# it may be distributed under the Xiph.Org license, which is the least
16# restrictive of those mentioned above. See the file COPYING.Xiph in this
17# distribution.
Josh Coalson6b05bc52001-06-08 00:13:21 +000018
Josh Coalsonbb7f6b92000-12-10 04:09:52 +000019#
20# GNU makefile fragment for building an executable
21#
22
Josh Coalsonb74fc982002-11-20 06:40:08 +000023include $(topdir)/build/config.mk
24
Josh Coalsonc10f9782008-09-14 19:59:52 +000025ifeq ($(OS),Darwin)
Hendricks26696d081c2012-12-29 04:22:59 -060026 CC = cc
27 CCC = c++
Josh Coalson6e144902001-12-07 19:28:25 +000028else
Thomas Zanderd20a79a2015-10-11 17:56:13 +020029ifeq ($(OS),FreeBSD)
30 CC = cc
31 CCC = c++
32else
Hendricks26696d081c2012-12-29 04:22:59 -060033 CC = gcc
34 CCC = g++
Josh Coalson6e144902001-12-07 19:28:25 +000035endif
Thomas Zanderd20a79a2015-10-11 17:56:13 +020036endif
Thomas Zander8f4dffe2017-06-22 19:12:25 +020037ifeq ($(CC),gcc)
38 GCC_INLINE = -finline-functions
39endif
Josh Coalson955a7672001-05-03 02:24:39 +000040NASM = nasm
Josh Coalson6e144902001-12-07 19:28:25 +000041LINK = $(CC) $(LINKAGE)
Erik de Castro Lopo85d5c532013-01-02 22:37:42 +110042OBJPATH = $(topdir)/objs
Josh Coalsonb74fc982002-11-20 06:40:08 +000043BINPATH = $(OBJPATH)/$(BUILD)/bin
44LIBPATH = $(OBJPATH)/$(BUILD)/lib
45DEBUG_BINPATH = $(OBJPATH)/debug/bin
46DEBUG_LIBPATH = $(OBJPATH)/debug/lib
47RELEASE_BINPATH = $(OBJPATH)/release/bin
48RELEASE_LIBPATH = $(OBJPATH)/release/lib
49PROGRAM = $(BINPATH)/$(PROGRAM_NAME)
50DEBUG_PROGRAM = $(DEBUG_BINPATH)/$(PROGRAM_NAME)
51RELEASE_PROGRAM = $(RELEASE_BINPATH)/$(PROGRAM_NAME)
Josh Coalson6ca4b1b2001-06-29 02:54:59 +000052
Erik de Castro Lopo089caea2016-05-12 06:33:22 +100053BASE_CFLAGS = -Wall -Wextra $(CONFIG_CFLAGS) -DVERSION=$(VERSION) $(DEFINES) $(INCLUDES)
Josh Coalsonbb7f6b92000-12-10 04:09:52 +000054
Erik de Castro Lopo089caea2016-05-12 06:33:22 +100055ifeq ($(DEFAULT_BUILD),debug)
56CFLAGS := -g -O0 -DDEBUG $(CFLAGS) $(BASE_CFLAGS) -Wmissing-prototypes -Wstrict-prototypes
57CXXFLAGS := -g -O0 -DDEBUG $(CXXFLAGS) $(BASE_CFLAGS)
58endif
59
60ifeq ($(DEFAULT_BUILD),valgrind)
61CFLAGS := -g -O0 -DDEBUG -DDEBUG -DFLAC__VALGRIND_TESTING $(CFLAGS) $(BASE_CFLAGS) -Wmissing-prototypes -Wstrict-prototypes
62CXXFLAGS := -g -O0 -DDEBUG -DDEBUG -DFLAC__VALGRIND_TESTING $(CXXFLAGS) $(BASE_CFLAGS)
63endif
64
65ifeq ($(DEFAULT_BUILD),release)
Thomas Zander8f4dffe2017-06-22 19:12:25 +020066CFLAGS := -O3 -fomit-frame-pointer -funroll-loops $(GCC_INLINE) -DFLaC__INLINE=__inline__ -DNDEBUG $(CFLAGS) $(BASE_CFLAGS) -Wmissing-prototypes -Wstrict-prototypes
67CXXFLAGS := -O3 -fomit-frame-pointer -funroll-loops $(GCC_INLINE) -DFLaC__INLINE=__inline__ -DNDEBUG $(CXXFLAGS) $(BASE_CFLAGS)
Erik de Castro Lopo089caea2016-05-12 06:33:22 +100068endif
Evan Ramos9df67362014-06-23 16:24:49 -050069
70LFLAGS = -L$(LIBPATH)
Josh Coalsonbb7f6b92000-12-10 04:09:52 +000071
Erik de Castro Lopob60f16b2014-07-13 21:19:48 +100072DEBUG_OBJS = $(SRCS_C:%.c=%.debug.o) $(SRCS_CC:%.cc=%.debug.o) $(SRCS_CPP:%.cpp=%.debug.o) $(SRCS_NASM:%.nasm=%.debug.o)
73RELEASE_OBJS = $(SRCS_C:%.c=%.release.o) $(SRCS_CC:%.cc=%.release.o) $(SRCS_CPP:%.cpp=%.release.o) $(SRCS_NASM:%.nasm=%.release.o)
Josh Coalsonc10f9782008-09-14 19:59:52 +000074ifeq ($(PROC),x86_64)
Erik de Castro Lopob60f16b2014-07-13 21:19:48 +100075DEBUG_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)
76RELEASE_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)
Josh Coalsonc10f9782008-09-14 19:59:52 +000077endif
Josh Coalsonbb7f6b92000-12-10 04:09:52 +000078
Josh Coalsonf8ecdde2004-12-30 03:56:08 +000079debug : $(DEBUG_PROGRAM)
80valgrind: $(DEBUG_PROGRAM)
81release : $(RELEASE_PROGRAM)
Josh Coalsonbb7f6b92000-12-10 04:09:52 +000082
Josh Coalson2757af62004-10-30 00:03:21 +000083# by default on OS X we link with static libs as much as possible
84
Josh Coalsonc10f9782008-09-14 19:59:52 +000085$(DEBUG_PROGRAM) : $(DEBUG_OBJS) $(DEBUG_PIC_OBJS)
86ifeq ($(OS),Darwin)
Josh Coalson2757af62004-10-30 00:03:21 +000087 $(LINK) -o $@ $(DEBUG_OBJS) $(EXPLICIT_LIBS)
88else
Josh Coalsonb74fc982002-11-20 06:40:08 +000089 $(LINK) -o $@ $(DEBUG_OBJS) $(LFLAGS) $(LIBS)
Josh Coalson2757af62004-10-30 00:03:21 +000090endif
Josh Coalsonb74fc982002-11-20 06:40:08 +000091
Josh Coalsonc10f9782008-09-14 19:59:52 +000092$(RELEASE_PROGRAM) : $(RELEASE_OBJS) $(RELEASE_PIC_OBJS)
93ifeq ($(OS),Darwin)
Josh Coalson2757af62004-10-30 00:03:21 +000094 $(LINK) -o $@ $(RELEASE_OBJS) $(EXPLICIT_LIBS)
95else
Josh Coalsonb74fc982002-11-20 06:40:08 +000096 $(LINK) -o $@ $(RELEASE_OBJS) $(LFLAGS) $(LIBS)
Josh Coalson2757af62004-10-30 00:03:21 +000097endif
Josh Coalsonb74fc982002-11-20 06:40:08 +000098
Josh Coalsonc10f9782008-09-14 19:59:52 +000099include $(topdir)/build/compile.mk
Josh Coalson955a7672001-05-03 02:24:39 +0000100
Josh Coalsonbb7f6b92000-12-10 04:09:52 +0000101.PHONY : clean
102clean :
Josh Coalsonc10f9782008-09-14 19:59:52 +0000103 -rm -f $(DEBUG_OBJS) $(RELEASE_OBJS) $(DEBUG_PIC_OBJS) $(RELEASE_PIC_OBJS) $(OBJPATH)/*/bin/$(PROGRAM_NAME)
Josh Coalsonbb7f6b92000-12-10 04:09:52 +0000104
105.PHONY : depend
106depend:
Josh Coalson5601bca2002-10-16 22:33:56 +0000107 makedepend -fMakefile.lite -- $(CFLAGS) $(INCLUDES) -- *.c *.cc *.cpp