blob: 12bcb410bc0f6f07ead0577f772fd86157004baf [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 a library
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
NotTsunami1640e102019-11-19 15:49:40 -050041LINK = ar cr
Erik de Castro Lopo85d5c532013-01-02 22:37:42 +110042OBJPATH = $(topdir)/objs
Josh Coalsonb74fc982002-11-20 06:40:08 +000043LIBPATH = $(OBJPATH)/$(BUILD)/lib
44DEBUG_LIBPATH = $(OBJPATH)/debug/lib
45RELEASE_LIBPATH = $(OBJPATH)/release/lib
Josh Coalsonc10f9782008-09-14 19:59:52 +000046ifeq ($(OS),Darwin)
Hendricks26696d081c2012-12-29 04:22:59 -060047 STATIC_LIB_SUFFIX = a
48 DYNAMIC_LIB_SUFFIX = dylib
Evan Ramosf658ea52014-06-26 17:25:48 -050049else
50ifeq ($(findstring Windows,$(OS)),Windows)
Hendricks26696d081c2012-12-29 04:22:59 -060051 STATIC_LIB_SUFFIX = a
52 DYNAMIC_LIB_SUFFIX = dll
Josh Coalson1ce20ee2002-08-14 00:50:48 +000053else
Hendricks26696d081c2012-12-29 04:22:59 -060054 STATIC_LIB_SUFFIX = a
55 DYNAMIC_LIB_SUFFIX = so
Josh Coalson1ce20ee2002-08-14 00:50:48 +000056endif
Evan Ramosf658ea52014-06-26 17:25:48 -050057endif
Josh Coalsonb74fc982002-11-20 06:40:08 +000058STATIC_LIB_NAME = $(LIB_NAME).$(STATIC_LIB_SUFFIX)
59DYNAMIC_LIB_NAME = $(LIB_NAME).$(DYNAMIC_LIB_SUFFIX)
60STATIC_LIB = $(LIBPATH)/$(STATIC_LIB_NAME)
61DYNAMIC_LIB = $(LIBPATH)/$(DYNAMIC_LIB_NAME)
62DEBUG_STATIC_LIB = $(DEBUG_LIBPATH)/$(STATIC_LIB_NAME)
63DEBUG_DYNAMIC_LIB = $(DEBUG_LIBPATH)/$(DYNAMIC_LIB_NAME)
64RELEASE_STATIC_LIB = $(RELEASE_LIBPATH)/$(STATIC_LIB_NAME)
65RELEASE_DYNAMIC_LIB = $(RELEASE_LIBPATH)/$(DYNAMIC_LIB_NAME)
Josh Coalsonc10f9782008-09-14 19:59:52 +000066ifeq ($(OS),Darwin)
Hendricks26696d081c2012-12-29 04:22:59 -060067 LINKD = $(CC) -dynamiclib -flat_namespace -undefined suppress -install_name $(DYNAMIC_LIB)
Josh Coalson6e144902001-12-07 19:28:25 +000068else
Hendricks26696d081c2012-12-29 04:22:59 -060069 LINKD = $(CC) -shared
Josh Coalson6e144902001-12-07 19:28:25 +000070endif
Josh Coalsonbb7f6b92000-12-10 04:09:52 +000071
Erik de Castro Lopo9e5dd482016-12-11 20:17:49 +110072BASE_CFLAGS = -Wall -Wextra $(CONFIG_CFLAGS) -DVERSION=$(VERSION) -DPACKAGE_VERSION=$(VERSION) $(DEFINES) $(INCLUDES)
Erik de Castro Lopo089caea2016-05-12 06:33:22 +100073
74ifeq ($(DEFAULT_BUILD),debug)
75CFLAGS := -g -O0 -DDEBUG $(CFLAGS) $(BASE_CFLAGS) -Wmissing-prototypes -Wstrict-prototypes
76CXXFLAGS := -g -O0 -DDEBUG $(CFLAGS) $(BASE_CFLAGS)
77endif
78
79ifeq ($(DEFAULT_BUILD),valgrind)
80CFLAGS := -g -O0 -DDEBUG -DDEBUG -DFLAC__VALGRIND_TESTING $(CFLAGS) $(BASE_CFLAGS) -Wmissing-prototypes -Wstrict-prototypes
81CXXFLAGS := -g -O0 -DDEBUG -DDEBUG -DFLAC__VALGRIND_TESTING $(CFLAGS) $(BASE_CFLAGS)
82endif
83
84ifeq ($(DEFAULT_BUILD),release)
Thomas Zander8f4dffe2017-06-22 19:12:25 +020085CFLAGS := -O3 -fomit-frame-pointer -funroll-loops $(GCC_INLINE) -DFLaC__INLINE=__inline__ -DNDEBUG $(CFLAGS) $(BASE_CFLAGS) -Wmissing-prototypes -Wstrict-prototypes
86CXXFLAGS := -O3 -fomit-frame-pointer -funroll-loops $(GCC_INLINE) -DFLaC__INLINE=__inline__ -DNDEBUG $(CFLAGS) $(BASE_CFLAGS)
Erik de Castro Lopo089caea2016-05-12 06:33:22 +100087endif
Evan Ramos9df67362014-06-23 16:24:49 -050088
89LFLAGS = -L$(LIBPATH)
Josh Coalsonbb7f6b92000-12-10 04:09:52 +000090
Erik de Castro Lopob60f16b2014-07-13 21:19:48 +100091DEBUG_OBJS = $(SRCS_C:%.c=%.debug.o) $(SRCS_CC:%.cc=%.debug.o) $(SRCS_CPP:%.cpp=%.debug.o) $(SRCS_NASM:%.nasm=%.debug.o)
92RELEASE_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 +000093ifeq ($(PROC),x86_64)
Erik de Castro Lopob60f16b2014-07-13 21:19:48 +100094DEBUG_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)
95RELEASE_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 +000096endif
Josh Coalsonbb7f6b92000-12-10 04:09:52 +000097
Josh Coalsonf8ecdde2004-12-30 03:56:08 +000098debug : $(DEBUG_STATIC_LIB) $(DEBUG_DYNAMIC_LIB)
99valgrind: $(DEBUG_STATIC_LIB) $(DEBUG_DYNAMIC_LIB)
100release : $(RELEASE_STATIC_LIB) $(RELEASE_DYNAMIC_LIB)
Josh Coalsonbb7f6b92000-12-10 04:09:52 +0000101
Josh Coalsonb74fc982002-11-20 06:40:08 +0000102$(DEBUG_STATIC_LIB): $(DEBUG_OBJS)
103 $(LINK) $@ $(DEBUG_OBJS) && ranlib $@
104
105$(RELEASE_STATIC_LIB): $(RELEASE_OBJS)
106 $(LINK) $@ $(RELEASE_OBJS) && ranlib $@
107
Josh Coalsonc10f9782008-09-14 19:59:52 +0000108$(DEBUG_DYNAMIC_LIB) : $(DEBUG_OBJS) $(DEBUG_PIC_OBJS)
109ifeq ($(OS),Darwin)
Josh Coalson2757af62004-10-30 00:03:21 +0000110 echo Not building dynamic lib, command is: $(LINKD) -o $@ $(DEBUG_OBJS) $(LFLAGS) $(LIBS) -lc
Josh Coalson6e144902001-12-07 19:28:25 +0000111else
Josh Coalsonc10f9782008-09-14 19:59:52 +0000112ifeq ($(PROC),x86_64)
113 $(LINKD) -o $@ $(DEBUG_PIC_OBJS) $(LFLAGS) $(LIBS)
114else
Josh Coalsonb74fc982002-11-20 06:40:08 +0000115 $(LINKD) -o $@ $(DEBUG_OBJS) $(LFLAGS) $(LIBS)
Josh Coalson6e144902001-12-07 19:28:25 +0000116endif
Josh Coalsonc10f9782008-09-14 19:59:52 +0000117endif
Josh Coalsonbb7f6b92000-12-10 04:09:52 +0000118
Josh Coalsonc10f9782008-09-14 19:59:52 +0000119$(RELEASE_DYNAMIC_LIB) : $(RELEASE_OBJS) $(RELEASE_PIC_OBJS)
120ifeq ($(OS),Darwin)
Josh Coalson28306cc2004-12-30 03:48:25 +0000121 echo Not building dynamic lib, command is: $(LINKD) -o $@ $(RELEASE_OBJS) $(LFLAGS) $(LIBS) -lc
Josh Coalsonb74fc982002-11-20 06:40:08 +0000122else
Josh Coalsonc10f9782008-09-14 19:59:52 +0000123ifeq ($(PROC),x86_64)
124 $(LINKD) -o $@ $(RELEASE_PIC_OBJS) $(LFLAGS) $(LIBS)
125else
Josh Coalsonb74fc982002-11-20 06:40:08 +0000126 $(LINKD) -o $@ $(RELEASE_OBJS) $(LFLAGS) $(LIBS)
127endif
Josh Coalson2757af62004-10-30 00:03:21 +0000128endif
129
Josh Coalsonc10f9782008-09-14 19:59:52 +0000130include $(topdir)/build/compile.mk
Josh Coalson955a7672001-05-03 02:24:39 +0000131
Josh Coalsonbb7f6b92000-12-10 04:09:52 +0000132.PHONY : clean
133clean :
Josh Coalsonc10f9782008-09-14 19:59:52 +0000134 -rm -f $(DEBUG_OBJS) $(RELEASE_OBJS) $(DEBUG_PIC_OBJS) $(RELEASE_PIC_OBJS) $(OBJPATH)/*/lib/$(STATIC_LIB_NAME) $(OBJPATH)/*/lib/$(DYNAMIC_LIB_NAME)
Josh Coalsonbb7f6b92000-12-10 04:09:52 +0000135
136.PHONY : depend
137depend:
Josh Coalson5601bca2002-10-16 22:33:56 +0000138 makedepend -fMakefile.lite -- $(CFLAGS) $(INCLUDES) -- *.c *.cc *.cpp