#****************************************************************************** # config.gnu.mk Make-It-Quick project #****************************************************************************** # # File Description: # # Makefile configuration file for GNU tools # # # # # # # #****************************************************************************** # (C) 1992-2018 Christophe de Dinechin # This software is licensed under the GNU General Public License v3 # See LICENSE file for details. #****************************************************************************** #------------------------------------------------------------------------------ # Tools #------------------------------------------------------------------------------ CC= $(CROSS_COMPILE:%=%-)gcc CXX= $(CROSS_COMPILE:%=%-)g++ ifeq ($(filter %.cpp,$(SOURCES)),) LD= $(CC) else LD= $(CXX) endif CPP= $(CC) -E PYTHON= python AR= $(CROSS_COMPILE:%=%-)ar -rcs RANLIB= $(CROSS_COMPILE:%=%-)ranlib INSTALL= install CAT= cat /dev/null #------------------------------------------------------------------------------ # Compilation flags #------------------------------------------------------------------------------ CFLAGS_STD= $(CC_STD:%=-std=%) $(CFLAGS_PIC) CXXFLAGS_STD= $(CXX_STD:%=-std=%) $(CFLAGS_PIC) CFLAGS_DEPENDENCIES= -MD -MP -MF $(@).d -MT $@ CFLAGS_TARGET_debug= -g -Wall -fno-inline CFLAGS_TARGET_opt= -g -O3 -Wall CFLAGS_TARGET_release= -O3 -Wall CFLAGS_TARGET_profile= -pg LDFLAGS_TARGET_debug= -g LDFLAGS_TARGET_profile= -pg #------------------------------------------------------------------------------ # File extensions #------------------------------------------------------------------------------ EXE_EXT= ifdef LIBTOOL OBJ_EXT= .lo LIB_EXT= .la DLL_EXT= .la else OBJ_EXT= .o LIB_EXT= .a DLL_EXT= .so endif EXE_PFX= LIB_PFX= lib DLL_PFX= lib #------------------------------------------------------------------------------ # Shared libraries versioning #------------------------------------------------------------------------------ MIQ_SOBASE= $(@F:%.install_dll=%) MIQ_SONAME= $(@F:%.install_dll=%)$(MIQ_V_MAJOR:%=.%) MIQ_DLLNAME= $(@:%.install_dll=%)$(PRODUCTS_VERSION:%=.$(MIQ_V_VERSION)) # Conversion to libttool input MIQ_LT_CURRENT= $(shell echo $$(($(MIQ_V_MAJOR) + $(MIQ_V_MINOR)))) MIQ_LT_REVISION=$(MIQ_V_PATCH) MIQ_LT_AGE= $(MIQ_V_MINOR) MIQ_LT_VERSION= $(MIQ_LT_CURRENT):$(MIQ_LT_REVISION):$(MIQ_LT_AGE) MIQ_LT_VERS_OPT=$(PRODUCTS_VERSION:%=-version-info $(MIQ_LT_VERSION)) # Symbolic links for shared libraries MIQ_SONAME_OPT= $(PRODUCTS_VERSION:%=-Wl,-soname -Wl,$(MIQ_SONAME)) MIQ_SYMLINKS_SO=ln -sf $(notdir $(MIQ_DLLNAME)) $(MIQ_SOBASE) && \ ln -sf $(notdir $(MIQ_DLLNAME)) $(MIQ_SONAME) MIQ_SYMLINKS= $(PRODUCTS_VERSION:%=&& $(MIQ_SYMLINKS_SO)) #------------------------------------------------------------------------------ # Build rules #------------------------------------------------------------------------------ MAKE_DIR= mkdir -p $* MAKE_OBJDIR= $(MAKE_DIR) && touch $@ ifdef LIBTOOL MIQ_COMPILE= $(LIBTOOL) --silent --mode=compile MIQ_LINK= $(LIBTOOL) --silent --mode=link MAKE_CC= $(MIQ_COMPILE) $(CC) $(MIQ_CFLAGS) -c $< -o $@ MAKE_CXX= $(MIQ_COMPILE) $(CXX) $(MIQ_CXXFLAGS) -c $< -o $@ MAKE_AS= $(MIQ_COMPILE) $(CC) $(MIQ_CFLAGS) -c $< -o $@ MAKE_LIB= $(MIQ_LINK) $(LD) $(MIQ_LDFLAGS) $(MIQ_TOLINK) \ -rpath $(PREFIX_DLL) -o $@ \ $(MIQ_LT_VERS_OPT) MAKE_DLL= $(MAKE_LIB) INSTALL_DLL= $(LIBTOOL) --silent --mode=install \ $(INSTALL) $(MIQ_DLLNAME) $(PREFIX_DLL) MAKE_EXE= $(MIQ_LINK) $(LD) $(MIQ_LDFLAGS) $(MIQ_TOLINK) -o $@ else # Non-libtool case: manage manually CFLAGS_PIC= -fPIC MAKE_CC= $(CC) $(MIQ_CFLAGS) -c $< -o $@ MAKE_CXX= $(CXX) $(MIQ_CXXFLAGS) -c $< -o $@ MAKE_AS= $(CC) $(MIQ_CFLAGS) -c $< -o $@ MAKE_LIB= $(AR) $@ $(MIQ_TOLINK) && $(RANLIB) $@ MAKE_DLL= $(LD) -shared $(MIQ_LDFLAGS) $(MIQ_TOLINK) \ -o $(MIQ_DLLNAME) \ -Wl,-rpath -Wl,$(PREFIX_DLL) \ $(MIQ_SONAME_OPT) \ && (cd $(OUTPUT) $(MIQ_SYMLINKS)) INSTALL_DLL= $(INSTALL) $(MIQ_DLLNAME) $(PREFIX_DLL) \ && (cd $(PREFIX_DLL) $(MIQ_SYMLINKS)) MAKE_EXE= $(LD) $(MIQ_LDFLAGS) $(MIQ_TOLINK) -o $@ endif LINK_DIR_OPT= -L LINK_LIB_OPT= -l LINK_DLL_OPT= -l LINK_CFG_OPT= -l #------------------------------------------------------------------------------ # Dependencies #------------------------------------------------------------------------------ CC_DEPEND= $(CC) $(MIQ_CPPFLAGS) -MM -MP -MF $@ -MT $(@:.d=) $< CXX_DEPEND= $(CXX) $(MIQ_CPPFLAGS) -MM -MP -MF $@ -MT $(@:.d=) $< AS_DEPEND= $(CC) $(MIQ_CPPFLAGS) -MM -MP -MF $@ -MT $(@:.d=) $< #------------------------------------------------------------------------------ # Test environment #------------------------------------------------------------------------------ TEST_ENV= LD_LIBRARY_PATH=$(OUTPUT) #------------------------------------------------------------------------------ # Configuration checks #------------------------------------------------------------------------------ MIQ_CFGUPPER= $(shell echo -n "$(MIQ_ORIGTARGET)" | tr '[:lower:]' '[:upper:]' | tr -c '[:alnum:]' '_') MIQ_CFGLFLAGS= $(MIQ_LDFLAGS) \ $(shell grep '// [A-Z]*FLAGS=' "$<" | \ sed -e 's|// [A-Z]*FLAGS=||g') MIQ_CFGFLAGS= $(MIQ_CFGLFLAGS) \ $(shell $(CAT) $(MIQ_PKGCFLAGS) $(MIQ_PKGLDFLAGS)) MIQ_CFGSET= && MIQ_CFGRC=1 || MIQ_CFGRC=0; MIQ_CFGTEST= "$<" -o "$<".exe > "$<".err 2>&1 && \ [ -x "$<".exe ] && \ "$<".exe > "$<".out \ $(MIQ_CFGSET) MIQ_CFG_PRINT= if [ $$MIQ_CFGRC == 1 ]; then \ echo "$(POS_COLOR)OK$(DEF_COLOR)"; \ else \ echo "$(ERR_COLOR)NO$(DEF_COLOR)"; \ fi; MIQ_CFGUNDEF0= $$MIQ_CFGRC \ | sed -e 's|^\#define \(.*\) 0$$|/* \#undef \1 */|g' > "$@"; \ [ -f "$<".out ] && cat >> "$@" "$<".out; \ $(MIQ_CFG_PRINT) \ true MIQ_CFGDEF= echo '\#define' MIQ_CFGCFLAGS= $(CFLAGS) $(CFLAGS_CONFIG_$*) $(MIQ_CFGFLAGS) MIQ_CFGCXXFLAGS=$(CXXFLAGS) $(CFLAGS_CONFIG_$*) $(MIQ_CFGFLAGS) MIQ_CFGCC_CMD= $(CC) $(MIQ_CFGCFLAGS) $(MIQ_CFGTEST) MIQ_CFGCXX_CMD= $(CXX) $(MIQ_CFGCXXFLAGS) $(MIQ_CFGTEST) MIQ_CFGLIB_CMD= $(CC) $(MIQ_CFGLFLAGS) -l$* $(MIQ_CFGTEST) MIQ_CFGFN_CMD= $(CC) $(MIQ_CFGCFLAGS) $(CFLAGS_CONFIG_$*) $(MIQ_CFGTEST) MIQ_CFGPK_CMD= pkg-config $* --silence-errors $(MIQ_CFGSET) MIQ_CC_CFG= $(MIQ_CFGCC_CMD) $(MIQ_CFGDEF) HAVE_$(MIQ_CFGUPPER)_H $(MIQ_CFGUNDEF0) MIQ_CXX_CFG= $(MIQ_CFGCXX_CMD) $(MIQ_CFGDEF) HAVE_$(MIQ_CFGUPPER) $(MIQ_CFGUNDEF0) MIQ_LIB_CFG= $(MIQ_CFGLIB_CMD) $(MIQ_CFGDEF) HAVE_LIB$(MIQ_CFGUPPER) $(MIQ_CFGUNDEF0) MIQ_FN_CFG= $(MIQ_CFGFN_CMD) $(MIQ_CFGDEF) HAVE_$(MIQ_CFGUPPER) $(MIQ_CFGUNDEF0) MIQ_PK_CFG= $(MIQ_CFGPK_CMD) $(MIQ_CFGDEF) HAVE_$(MIQ_CFGUPPER) $(MIQ_CFGUNDEF0) MIQ_MK_CFG= sed -e 's|^\#define \([^ ]*\) \(.*\)$$|\1=\2|g' \ -e 's|.*undef.*||g' < "$<" > "$@" #------------------------------------------------------------------------------ # pkg-config checks #------------------------------------------------------------------------------ MIQ_PKGCONFIG_CFLAGS_CHECK= \ pkg-config --cflags $* > $@ $(MIQ_PKGCONFIG_ERROR_CHECK) MIQ_PKGCONFIG_LIBS_CHECK= \ pkg-config --libs $* > $@ $(MIQ_PKGCONFIG_ERROR_CHECK) MIQ_PKGCONFIG_ERROR_CHECK= \ || (echo "Error"": Required package $* not found" && false) MIQ_PKGCONFIG_BUILDMK= \ (echo CFLAGS_PKGCONFIG=`$(CAT) $(MIQ_PKGCFLAGS)`; \ echo LDFLAGS_PKGCONFIG=`$(CAT) $(MIQ_PKGLDFLAGS) $(MIQ_PKGLIBS)` ) > $@ MIQ_PKGCONFIG_CFLAGS_OPTIONAL= \ (pkg-config --cflags $* --silence-errors > $@ \ && MIQ_CFGRC=1 || MIQ_CFGRC=0; \ true) MIQ_PKGCONFIG_LIBS_OPTIONAL= \ (pkg-config --libs $* --silence-errors > $@ \ && MIQ_CFGRC=1 || MIQ_CFGRC=0; \ true)