From 46ad8869b89e94ffdf287dfaa6d9bc91e7fadc0d Mon Sep 17 00:00:00 2001 From: rexy712 Date: Mon, 12 Apr 2021 13:41:25 -0700 Subject: [PATCH] Separate LDFLAGS and LDLIBS. Add debug settings --- makefile.basic | 24 ++++++++++++++++++++---- makefile.exe_progress | 23 ++++++++++++++++++----- makefile.library | 22 ++++++++++++++++++++-- makefile.reclib | 24 +++++++++++++++++++++--- makefile.recursive | 22 ++++++++++++++++++++-- 5 files changed, 99 insertions(+), 16 deletions(-) diff --git a/makefile.basic b/makefile.basic index ae37bb5..badf80d 100644 --- a/makefile.basic +++ b/makefile.basic @@ -27,6 +27,8 @@ LIBDIRS::=lib INCLUDE_DIRS::=include CFLAGS::=-std=c18 -Wall -pedantic -Wextra CXXFLAGS::=-std=c++17 -Wall -pedantic -Wextra +DEBUG_CFLAGS::= +DEBUG_CXXFLAGS::= EXT::=cpp LANG::=$(EXT) MAIN_EXECUTABLE::=tester @@ -41,6 +43,8 @@ ifneq ($(WINDOWS),1) CXX::=g++ LDLIBS::= LDFLAGS::= + DEBUG_LDLIBS::= + DEBUG_LDFLAGS::= STRIP::=strip RANLIB::=ranlib AR::=ar @@ -53,6 +57,8 @@ else #windows CXX::=$(MINGW_PREFIX)g++ LDLIBS::= LDFLAGS::= + DEBUG_LDLIBS::= + DEBUG_LDFLAGS::= STRIP::=$(MINGW_PREFIX)strip RANLIB::=$(MINGW_PREFIX)ranlib AR::=$(MINGW_PREFIX)ar @@ -100,13 +106,18 @@ endif #setup compiler and flags based on language ifeq ($(LANG),cpp) COMPILER_FLAGS::=$(CXXFLAGS) + ifneq ($(RELEASE),1) + COMPILER_FLAGS+= $(DEBUG_CXXFLAGS) + endif COMPILER::=$(CXX) else ifeq ($(LANG),c) COMPILER_FLAGS::=$(CFLAGS) + ifneq ($(RELEASE),1) + COMPILER_FLAGS+= $(DEBUG_CFLAGS) + endif COMPILER::=$(CC) endif - ifeq ($(RELEASE),1) #a lot of false strict aliasing warnings from gcc 9 COMPILER_FLAGS+=-O2 -Wno-strict-aliasing @@ -138,8 +149,13 @@ INTERNAL_LINKFLAGS=$(foreach dir,$(LIBDIRS),-L"$(dir)") INTERNAL_SOURCES::=$(SOURCES) $(foreach source,$(SOURCE_DIRS),$(foreach ext,$(EXT),$(wildcard $(source)/*.$(ext)))) OBJECTS::=$(addprefix $(OBJDIR)/,$(subst \,.,$(subst /,.,$(addsuffix .o,$(INTERNAL_SOURCES))))) ALL_COMPILEFLAGS=$(COMPILER_FLAGS) $(INTERNAL_COMPILERFLAGS) -ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) - +ifeq ($(RELEASE),1) + ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) + ALL_LDLIBS=$(LDLIBS) +else + ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) $(DEBUG_LDFLAGS) + ALL_LDLIBS=$(LDLIBS) $(DEBUG_LDLIBS) +endif #just a variable for a newline define \n @@ -168,7 +184,7 @@ flags-update: cflags-update ldflags-update #Link executable $(MAIN_EXECUTABLE): $(OBJECTS) $(LDFLAGS_TMPFILE) - $(COMPILER) $(OBJECTS) -o "$(basename $@)" $(ALL_LINKFLAGS) $(LDLIBS) + $(COMPILER) $(OBJECTS) -o "$(basename $@)" $(ALL_LINKFLAGS) $(ALL_LDLIBS) ifeq ($(RELEASE),1) $(STRIP) --strip-all "$(MAIN_EXECUTABLE)" endif diff --git a/makefile.exe_progress b/makefile.exe_progress index 7c6e398..718258a 100644 --- a/makefile.exe_progress +++ b/makefile.exe_progress @@ -27,6 +27,8 @@ LIBDIRS::=lib INCLUDE_DIRS::=include CFLAGS::=-std=c18 -Wall -pedantic -Wextra CXXFLAGS::=-std=c++17 -Wall -pedantic -Wextra +DEBUG_CFLAGS::= +DEBUG_CXXFLAGS::= EXT::=cpp LANG::=$(EXT) MAIN_EXECUTABLE::=tester @@ -45,6 +47,8 @@ ifneq ($(WINDOWS),1) CXX::=g++ LDLIBS::= LDFLAGS::= + DEBUG_LDLIBS::= + DEBUG_LDFLAGS::= STRIP::=strip RANLIB::=ranlib AR::=ar @@ -57,6 +61,8 @@ else #windows CXX::=$(MINGW_PREFIX)g++ LDLIBS::= LDFLAGS::= + DEBUG_LDLIBS::= + DEBUG_LDFLAGS::= STRIP::=$(MINGW_PREFIX)strip RANLIB::=$(MINGW_PREFIX)ranlib AR::=$(MINGW_PREFIX)ar @@ -97,9 +103,15 @@ endif #setup compiler and flags based on language ifeq ($(LANG),cpp) COMPILER_FLAGS::=$(CXXFLAGS) + ifneq ($(RELEASE),1) + COMPILER_FLAGS+= $(DEBUG_CXXFLAGS) + endif COMPILER::=$(CXX) else ifeq ($(LANG),c) COMPILER_FLAGS::=$(CFLAGS) + ifneq ($(RELEASE),1) + COMPILER_FLAGS+= $(DEBUG_CFLAGS) + endif COMPILER::=$(CC) endif @@ -133,11 +145,12 @@ THIS_MAKEFILE_NAME::=$(lastword $(MAKEFILE_LIST)) INTERNAL_SOURCES::=$(SOURCES) $(foreach source,$(SOURCE_DIRS),$(foreach ext,$(EXT),$(wildcard $(source)/*.$(ext)))) OBJECTS::=$(addprefix $(OBJDIR)/,$(subst \,.,$(subst /,.,$(addsuffix .o,$(INTERNAL_SOURCES))))) ALL_COMPILEFLAGS=$(COMPILER_FLAGS) $(INTERNAL_COMPILERFLAGS) -ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) -ifeq ($(VERBOSE),1) - SILENCER::= +ifeq ($(RELEASE),1) + ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) + ALL_LDLIBS=$(LDLIBS) else - SILENCER::=@ + ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) $(DEBUG_LDFLAGS) + ALL_LDLIBS=$(LDLIBS) $(DEBUG_LDLIBS) endif #Arguments to make submake use this makefile without "Entering directory" stuff @@ -189,7 +202,7 @@ do_strip: #Link executable $(MAIN_EXECUTABLE): $(OBJECTS) @$(call PRINT_PERCENT,Linking $@) - $(SILENCER)$(COMPILER) $^ -o "$(basename $@)" $(ALL_LINKFLAGS) $(LDLIBS) + $(SILENCER)$(COMPILER) $^ -o "$(basename $@)" $(ALL_LINKFLAGS) $(ALL_LDLIBS) #Object target recipe define GENERATE_OBJECTS diff --git a/makefile.library b/makefile.library index 17e8743..7d13ee1 100644 --- a/makefile.library +++ b/makefile.library @@ -27,6 +27,8 @@ LIBDIRS::=lib INCLUDE_DIRS::=include CFLAGS::=-std=c18 -Wall -pedantic -Wextra CXXFLAGS::=-std=c++17 -Wall -pedantic -Wextra +DEBUG_CFLAGS::= +DEBUG_CXXFLAGS::= EXT::=cpp LANG::=$(EXT) MAIN_LIBRARY::=tester @@ -43,6 +45,8 @@ ifneq ($(WINDOWS),1) CXX::=g++ LDLIBS::= LDFLAGS::= + DEBUG_LDLIBS::= + DEBUG_LDFLAGS::= STRIP::=strip RANLIB::=ranlib AR::=ar @@ -58,6 +62,8 @@ else #windows CXX::=$(MINGW_PREFIX)g++ LDLIBS::= LDFLAGS::=-static-libgcc -static-libstdc++ + DEBUG_LDLIBS::= + DEBUG_LDFLAGS::=-static-libgcc -static-libstdc++ STRIP::=$(MINGW_PREFIX)strip RANLIB::=$(MINGW_PREFIX)ranlib AR::=$(MINGW_PREFIX)ar @@ -113,9 +119,15 @@ endif #setup compiler and flags based on language ifeq ($(LANG),cpp) COMPILER_FLAGS::=$(CXXFLAGS) + ifneq ($(RELEASE),1) + COMPILER_FLAGS+=$(DEBUG_CXXFLAGS) + endif COMPILER::=$(CXX) else ifeq ($(LANG),c) COMPILER_FLAGS::=$(CFLAGS) + ifneq ($(RELEASE),1) + COMPILER_FLAGS+=$(DEBUG_CFLAGS) + endif COMPILER::=$(CC) endif @@ -154,7 +166,13 @@ INTERNAL_SOURCES::=$(SOURCES) $(foreach source,$(SOURCE_DIRS),$(foreach ext,$(EX STATIC_OBJECTS::=$(addprefix $(OBJDIR)/static/,$(subst \,.,$(subst /,.,$(addsuffix .o,$(INTERNAL_SOURCES))))) SHARED_OBJECTS::=$(addprefix $(OBJDIR)/shared/,$(subst \,.,$(subst /,.,$(addsuffix .o,$(INTERNAL_SOURCES))))) ALL_COMPILEFLAGS=$(COMPILER_FLAGS) $(INTERNAL_COMPILERFLAGS) -ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) +ifeq ($(RELEASE),1) + ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) + ALL_LDLIBS=$(LDLIBS) +else + ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) $(DEBUG_LDFLAGS) + ALL_LDLIBS=$(LDLIBS) $(DEBUG_LDLIBS) +endif .PHONY: cflags-update cflags-update: @@ -178,7 +196,7 @@ flags-update: cflags-update ldflags-update #target for shared library $(INTERNAL_SHARED_LIBRARY): $(SHARED_OBJECTS) $(LDFLAGS_TMPFILE) - $(COMPILER) -shared -o "$@" $(SHARED_OBJECTS) -fPIC $(ALL_LINKFLAGS) $(LDLIBS) + $(COMPILER) -shared -o "$@" $(SHARED_OBJECTS) -fPIC $(ALL_LINKFLAGS) $(ALL_LDLIBS) ifeq ($(RELEASE),1) $(STRIP) --strip-debug "$@" endif diff --git a/makefile.reclib b/makefile.reclib index 576efda..b32f897 100644 --- a/makefile.reclib +++ b/makefile.reclib @@ -27,6 +27,8 @@ LIBDIRS::=lib INCLUDE_DIRS::=include CFLAGS::=-std=c18 -Wall -pedantic -Wextra CXXFLAGS::=-std=c++17 -Wall -pedantic -Wextra +DEBUG_CFLAGS::= +DEBUG_CXXFLAGS::= EXT::=cpp LANG::=$(EXT) MAIN_LIBRARY::=tester @@ -46,6 +48,8 @@ ifneq ($(WINDOWS),1) CXX::=g++ LDLIBS::= LDFLAGS::= + DEBUG_LDLIBS::= + DEBUG_LDFLAGS::= STRIP::=strip RANLIB::=ranlib AR::=ar @@ -58,6 +62,8 @@ else #windows CXX::=$(MINGW_PREFIX)g++ LDLIBS::= LDFLAGS::=-static-libgcc -static-libstdc++ + DEBUG_LDLIBS::= + DEBUG_LDFLAGS::=-static-libgcc -static-libstdc++ STRIP::=$(MINGW_PREFIX)strip RANLIB::=$(MINGW_PREFIX)ranlib AR::=$(MINGW_PREFIX)ar @@ -105,9 +111,15 @@ endif #setup compiler and flags based on language ifeq ($(LANG),cpp) COMPILER_FLAGS::=$(CXXFLAGS) + ifneq ($(RELEASE),1) + COMPILER_FLAGS+=$(DEBUG_CXXFLAGS) + endif COMPILER::=$(CXX) else ifeq ($(LANG),c) COMPILER_FLAGS::=$(CFLAGS) + ifneq ($(RELEASE),1) + COMPILER_FLAGS+=$(DEBUG_CFLAGS) + endif COMPILER::=$(CC) endif @@ -151,7 +163,13 @@ ifeq ($(SHARED),1) SHARED_OBJECTS::=$(addprefix $(OBJDIR)/shared/,$(subst \,.,$(subst /,.,$(addsuffix .o,$(INTERNAL_SOURCES))))) endif ALL_COMPILEFLAGS=$(COMPILER_FLAGS) $(INTERNAL_COMPILERFLAGS) -ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) +ifeq ($(RELEASE),1) + ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) + ALL_LDLIBS=$(LDLIBS) +else + ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) $(DEBUG_LDFLAGS) + ALL_LDLIBS=$(LDLIBS) $(DEBUG_LDLIBS) +endif #Arguments to make submake use this makefile without "Entering directory" stuff SUBMAKE_ARGUMENTS::=--no-print-directory -e -f "$(THIS_MAKEFILE_NAME)" @@ -197,12 +215,12 @@ endif #static ifeq ($(WINDOWS),1) #target for windows shared library $(DLLOUT): $(SHARED_OBJECTS) $(LDFLAGS_TMPFILE) - $(COMPILER) -shared -o "$(DLLOUT)" $(SHARED_OBJECTS) -Wl,--out-implib,"lib$(MAIN_LIBRARY).a" $(SHARED_LIBRARY_FLAGS) $(ALL_LINKFLAGS) $(LDLIBS) + $(COMPILER) -shared -o "$(DLLOUT)" $(SHARED_OBJECTS) -Wl,--out-implib,"lib$(MAIN_LIBRARY).a" $(SHARED_LIBRARY_FLAGS) $(ALL_LINKFLAGS) $(ALL_LDLIBS) else #windows #target for *nix shared library $(INTERNAL_SHARED_LIBRARY): $(SHARED_OBJECTS) $(LDFLAGS_TMPFILE) - $(COMPILER) -shared -o "$@" $(SHARED_OBJECTS) $(SHARED_LIBRARY_FLAGS) $(ALL_LINKFLAGS) $(LDLIBS) + $(COMPILER) -shared -o "$@" $(SHARED_OBJECTS) $(SHARED_LIBRARY_FLAGS) $(ALL_LINKFLAGS) $(ALL_LDLIBS) endif #windows #target for static library diff --git a/makefile.recursive b/makefile.recursive index ce2363c..59ebf79 100644 --- a/makefile.recursive +++ b/makefile.recursive @@ -27,6 +27,8 @@ LIBDIRS::=lib INCLUDE_DIRS::=include CFLAGS::=-std=c18 -Wall -pedantic -Wextra CXXFLAGS::=-std=c++17 -Wall -pedantic -Wextra +DEBUG_CFLAGS::= +DEBUG_CXXFLAGS::= EXT::=cpp LANG::=$(EXT) MAIN_EXECUTABLE::=tester @@ -44,6 +46,8 @@ ifneq ($(WINDOWS),1) CXX::=g++ LDLIBS::= LDFLAGS::= + DEBUG_LDLIBS::= + DEBUG_LDFLAGS::= STRIP::=strip RANLIB::=ranlib AR::=ar @@ -56,6 +60,8 @@ else #windows CXX::=$(MINGW_PREFIX)g++ LDLIBS::= LDFLAGS::= + DEBUG_LDLIBS::= + DEBUG_LDFLAGS::= STRIP::=$(MINGW_PREFIX)strip RANLIB::=$(MINGW_PREFIX)ranlib AR::=$(MINGW_PREFIX)ar @@ -97,9 +103,15 @@ endif #setup compiler and flags based on language ifeq ($(LANG),cpp) COMPILER_FLAGS::=$(CXXFLAGS) + ifneq ($(RELEASE),1) + COMPILER_FLAGS+=$(DEBUG_CXXFLAGS) + endif COMPILER::=$(CXX) else ifeq ($(LANG),c) COMPILER_FLAGS::=$(CFLAGS) + ifneq ($(RELEASE),1) + COMPILER_FLAGS+=$(DEBUG_CFLAGS) + endif COMPILER::=$(CC) endif @@ -134,7 +146,13 @@ THIS_MAKEFILE_NAME::=$(lastword $(MAKEFILE_LIST)) INTERNAL_SOURCES::=$(SOURCES) $(foreach source,$(SOURCE_DIRS),$(foreach ext,$(EXT),$(wildcard $(source)/*.$(ext)))) OBJECTS::=$(addprefix $(OBJDIR)/,$(subst \,.,$(subst /,.,$(addsuffix .o,$(INTERNAL_SOURCES))))) ALL_COMPILEFLAGS=$(COMPILER_FLAGS) $(INTERNAL_COMPILERFLAGS) -ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) +ifeq ($(RELEASE),1) + ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) + ALL_LDLIBS=$(LDLIBS) +else + ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) $(DEBUG_LDFLAGS) + ALL_LDLIBS=$(LDLIBS) $(DEBUG_LDLIBS) +endif #Arguments to make submake use this makefile without "Entering directory" stuff SUBMAKE_ARGUMENTS::=--no-print-directory -e -f "$(THIS_MAKEFILE_NAME)" @@ -170,7 +188,7 @@ all: flags-update #Link executable $(MAIN_EXECUTABLE): $(OBJECTS) $(LDFLAGS_TMPFILE) - $(COMPILER) $(OBJECTS) -o "$(basename $@)" $(ALL_LINKFLAGS) $(LDLIBS) + $(COMPILER) $(OBJECTS) -o "$(basename $@)" $(ALL_LINKFLAGS) $(ALL_LDLIBS) ifeq ($(RELEASE),1) $(STRIP) --strip-all "$@" endif