jw-pkg/make/defs-cpp.mk
Jan Lindemann 5aee508df9 defs-*.mk: Add USE_DISABLE_COMPILER_OPTIMISATION_OPTS
USE_DISABLE_COMPILER_OPTIMISATION_OPTS = true disables options targeted
at disabling optimization features, which were introduced to facilitate
debugging in the first place, but make the commandline harder to compare
to others while troubleshooting the compile process

Signed-off-by: Jan Lindemann <jan@janware.com>
2019-03-13 08:53:56 +00:00

587 lines
20 KiB
Makefile

# ----- compilation options
CREATE_DEVEL ?= true
#COMPILER_SUITE ?= clang
COMPILER_SUITE ?= gcc
ifeq ($(TARGET_ARCH),$(ARCH_32))
PROJECT_CFLAGS += -m32
PROJECT_CPPFLAGS += -m32
PROJECT_LDFLAGS += -m32
endif
ifeq ($(TARGET_ARCH),armv7hl)
PROJECT_CFLAGS += -fPIC
PROJECT_CPPFLAGS += -fPIC
PROJECT_LDFLAGS +=
else ifeq ($(TARGET_ARCH),aarch64)
PROJECT_CFLAGS += -fPIC
PROJECT_CPPFLAGS += -fPIC
PROJECT_LDFLAGS +=
endif
ifeq ($(findstring $(TARGET_OS),linux),)
USE_SYSTEMD := false
endif
ifeq ($(DEVELOPMENT),true)
export G_SLICE = always-malloc
export G_DEBUG = gc-friendly,resident-modules
export MALLOC_CHECK_ = 2
endif
USE_PROJECT_LIB ?= true
EXPORT_PROJECT_LIB ?= $(USE_PROJECT_LIB)
USE_JW_BUILD ?= true
USE_EXCEPTIONS_IN_C ?= true
USE_COMPILER_OPTIMIZATION_OPTS = false
USE_COMPILER_DEBUG_OPTS = true
COMPILE_DEBUG_CODE = true
BUILD_CFLAGS += $(CFLAGS)
BUILD_CPPFLAGS += $(CPPFLAGS)
BUILD_LDFLAGS += $(LDFLAGS)
BUILD_CFLAGS += -D_FILE_OFFSET_BITS=64 -Wall -Wno-unused-value -fexceptions -DPROJECT_STR=\"$(PROJECT)\"
BUILD_CPPFLAGS += -D_FILE_OFFSET_BITS=64 -Wall -Wno-unused-value -Wno-deprecated -DPROJECT_STR=\"$(PROJECT)\"
BUILD_LDFLAGS += -Wall
LOG_QUAL_PREFIX ?= $(LOGID):
ifneq ($(LOG_QUAL_PREFIX),)
PROJECT_CFLAGS += -DKEEP_FILES_OPEN -DLOG_QUAL_PREFIX=\"$(LOG_QUAL_PREFIX)\"
PROJECT_CPPFLAGS += -DKEEP_FILES_OPEN -DLOG_QUAL_PREFIX=\"$(LOG_QUAL_PREFIX)\"
endif
ifeq ($(CATCH_ONLY_YERROR),true)
BUILD_CFLAGS += -DCATCH_ONLY_YERROR
BUILD_CPPFLAGS += -DCATCH_ONLY_YERROR
endif
SYSCFG_DIR ?= /etc/sysconfig
SYSCFG_FILE ?= $(SYSCFG_DIR)/$(PROJECT)
OPTS_PID_FILE ?= $(PIDDIR)/$(PROJECT).pid
USE_VERSION_MACROS ?= true
ifeq ($(USE_VERSION_MACROS),true)
BUILD_CFLAGS += -DVERSION=$(HEX_VERSION) -DVERSION_STR=\"$(VERSION)\"
BUILD_CPPFLAGS += -DVERSION=$(HEX_VERSION) -DVERSION_STR=\"$(VERSION)\"
endif
# ----- tool chain
ifneq ($(TARGET_TRIPLET),$(HOST_TRIPLET)) # we're cross-compiling
TC_BIN_PREFIX ?= $(TARGET_TRIPLET)-
TC_SYS_ROOT ?= /usr/$(TARGET_TRIPLET)
ifeq ($(TARGET),mingw)
ifneq ($(wildcard $(TC_BIN_PREFIX)gcc),)
CROSS_TOOL_DIR ?=
TC_SYS_ROOT ?= /usr/$(TARGET_TRIPLET)/sys-root/mingw
else
CROSS_TOOL_DIR ?= /opt/cross-tools
TC_BIN_PREFIX ?= $(CROSS_TOOL_DIR)/bin/i686-pc-mingw32-
endif
PROJECT_CFLAGS += -D_WINDOWS
PROJECT_CPPFLAGS += -D_WINDOWS
BUILD_LDFLAGS += -lws2_32
WINDRES ?= $(TC_BIN_PREFIX)windres
USE_GFILTER ?= false
MS_LD ?= wine $(HOME)/local/mingw/packages/msvcpp/bin/LIB.EXE
endif
#PROJECT_CFLAGS += -I$(TC_SYS_ROOT)/include
#PROJECT_CPPFLAGS += -I$(TC_SYS_ROOT)/include
#PROJECT_LDFLAGS += -L$(TC_SYS_ROOT)/lib
else # we're not cross-compiling
TC_SYS_ROOT ?= /usr
ifeq ($(LIBTYPE),shared)
LIBFLAGS += -ldl
else
LIBFLAGS += -l:libdl.a
endif
LIBFLAGS += -pthread
endif
ifeq ($(TARGET_ARCH),x86_64)
BUILD_CFLAGS += -fPIC
BUILD_CPPFLAGS += -fPIC
LIBFLAGS +=
endif
ifeq ($(TARGET_TRIPLET),arm-none-eabi)
BUILD_CFLAGS += -mcpu=cortex-m3 -mthumb
BUILD_CPPFLAGS += -mcpu=cortex-m3 -mthumb
endif
ifeq ($(COMPILER_SUITE),gcc)
GCC ?= $(TC_BIN_PREFIX)gcc
GPP ?= $(TC_BIN_PREFIX)g++
CPP ?= $(GPP)
GNU_LD ?= $(TC_BIN_PREFIX)ld
CLANG ?= $(TC_BIN_PREFIX)clang
CLANGPP ?= $(TC_BIN_PREFIX)clang++
STRIP ?= $(TC_BIN_PREFIX)strip
RANLIB ?= $(TC_BIN_PREFIX)ranlib
AR ?= $(TC_BIN_PREFIX)ar
PKG_CONFIG_EXE ?= $(TC_BIN_PREFIX)pkg-config
CPP_FILT ?= $(TC_BIN_PREFIX)c++filt
OBJCOPY ?= $(TC_BIN_PREFIX)objcopy
OBJDUMP ?= $(TC_BIN_PREFIX)objdump
# compiler and linker
# gcc
GCC_VERSION := $(shell $(GCC) -v 2>&1 | $(SED) '/gcc.version/I !d; s/.*version *//I; s/ \+.*//')
GCC_VERSION_NUMBERS := $(subst ., ,$(GCC_VERSION))
GCC_MAJOR := $(word 1,$(GCC_VERSION_NUMBERS))
GCC_MINOR := $(word 2,$(GCC_VERSION_NUMBERS))
GCC_REV := $(word 3,$(GCC_VERSION_NUMBERS))
# Not needed anywhere
#GNU_LD_VERSION := $(shell $(LD) -V | $(SED) '/GNU ld/ !d; s/(.*)//; s/[^0-9.-]*//')
#GNU_LD_VERSION_NUMBERS := $(subst ., ,$(GNU_LD_VERSION))
#GNU_LD_MAJOR := $(word 1,$(GNU_LD_VERSION_NUMBERS))
#GNU_LD_MINOR := $(word 2,$(GNU_LD_VERSION_NUMBERS))
#GNU_LD_REV := $(word 3,$(GNU_LD_VERSION_NUMBERS))
CC = $(GCC)
CPP = $(GPP)
LD = $(GPP)
ifneq ($(GCC_VERSION),4.1.0)
ifneq ($(GCC_VERSION),4.5.1)
BUILD_CFLAGS += -std=gnu11
BUILD_CPPFLAGS += -std=c++11
#BUILD_CPPFLAGS += -Wsuggest-override
endif
endif
ifeq ($(shell $(TEST) $(GCC_MAJOR) -ge 5; $(ECHO) $$?),0)
ifeq ($(USE_CPP_FORCE_OVERRIDE),true)
GCC_CPPFLAGS += -Werror=suggest-override
endif
endif
else ifeq ($(COMPILER_SUITE),clang)
# clang
CLANG_CPPFLAGS += -Wno-unused-private-field -Wno-self-assign-field -Wno-overloaded-virtual
CC = $(CLANG)
CPP = $(CLANGPP)
LD = $(CLANGPP)
ifeq ($(USE_CPP_WARN_INCONSISTENT_OVERRIDE),true)
CLANG_CPPFLAGS += -Winconsistent-missing-override
endif
endif # COMPILER_SUITE
# -- target files and dirs
SRC_SUFFIX += $(sort $(suffix $(wildcard $(TOPDIR)/hdr/*)))
LOCAL_SRC += Makefile $(wildcard $(addprefix *,$(SRC_SUFFIX)))
SRC_HEADERED += $(shell if [ "$(LOCAL_SRC)" ]; then grep -ic "it services" $(LOCAL_SRC) | $(SED) '/:0$$/ d; s/:.*$$//'; fi)
SRC_UNHEADERED += $(filter-out $(SRC_HEADERED),$(LOCAL_SRC))
LOCAL_C ?= $(wildcard *.c)
LOCAL_CPP ?= $(wildcard *.cc *.cpp *.C)
LOCAL_H ?= $(wildcard *.h *.H *.hpp)
SFILES ?= $(wildcard *.S *.sx)
#PREREQ_H += $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.h))
ALL_H += $(LOCAL_H) $(PREREQ_H)
SRC_ALL_CPP += $(LOCAL_C) $(LOCAL_CPP) $(LOCAL_H)
SRC_C += $(filter %.c, $(SRC_ALL_CPP))
SRC_CPP += $(filter %.cc %.cpp %.C, $(SRC_ALL_CPP))
OBJ += $(addprefix $(FLAVOUR_PREFIX),$(patsubst %.C,%.o,$(patsubst %.cpp,%.o,$(patsubst %.cc,%.o,$(patsubst %.c,%.o,$(filter %.c %.cpp %.cc %.C, $(SRC_ALL_CPP)))))))
OBJ += $(addprefix $(FLAVOUR_PREFIX),$(patsubst %.sx,%.o,$(patsubst %.S,%.o,$(SFILES))))
#PREREQ_C += $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.c))
#PREREQ_CPP += $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.c)) \
# $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.cpp))
#PREREQ_CSRC += $(PREREQ_H) $(PREREQ_C) $(PREREQ_CPP)
REQUIRED_DIR += $(patsubst %,$(MODDIR)/%,$(REQUIRED))
REQUIRED_DONE += $(patsubst %,%/all.done,$(REQUIRED_DIR))
REQUIRED_H += $(foreach dir,$(REQUIRED_DIR),$(wildcard $(dir)/*.h))
REQUIRED_C += $(foreach dir,$(REQUIRED_DIR),$(wildcard $(dir)/*.c))
REQUIRED_CPP += $(foreach dir,$(REQUIRED_DIR),$(wildcard $(dir)/*.cpp)) \
$(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.cpp))
REQUIRED_CSRC += $(REQUIRED_H) $(REQUIRED_C) $(REQUIRED_CPP)
ALL_C += $(LOCAL_C) $(PREREQ_CPP)
ALL_CPP += $(LOCAL_CPP) $(PREREQ_CPP)
ALL_CSRC += $(LOCAL_CSRC) $(PREREQ_CSRC)
# ==
ifeq ($(DEVELOPMENT),true)
BUILD_CFLAGS += -D_DEVELOPMENT_
BUILD_CPPFLAGS += -D_DEVELOPMENT_
endif
CORE += $(filter-out $(wildcard *.intern-state*),$(wildcard core core.* vgcore vgcore.*))
ifeq ($(GCC_MAJOR),4)
BUILD_CFLAGS += -DGCC_HASCLASSVISIBILITY
BUILD_CPPFLAGS += -DGCC_HASCLASSVISIBILITY
endif
ifeq ($(USE_QT),true)
include $(MODDIR)/make/qtversion.mk
include $(MODDIR)/make/qt-defs.mk
endif
ifeq ($(USE_X),true)
BUILD_LDFLAGS += -L/usr/X11/$(SYSTEM_LIBDIR_NAME) -lXext -lX11
endif
LPPFLAGS += -lstdc++
ifeq ($(GCC_MAJOR),2)
LPPFLAGS += -lm
BUILD_CFLAGS += -I/usr/local/include
BUILD_CPPFLAGS += -I/usr/local/include
else
ifeq ($(GCC_MAJOR),3)
ifeq ($(GCC_MINOR),3)
LPPFLAGS += -lgcc_s
# LPPFLAGS += -L/usr/local/gcc3.3/lib
endif
endif
endif
ifeq ($(TARGET),mingw)
BUILD_CFLAGS += -DWIN32
BUILD_CPPFLAGS += -DWIN32
# see https://stackoverflow.com/questions/4492799
BUILD_LDFLAGS += -fstack-protector
endif
# TODO: this shoud be only conditional, but breaks, because not all headers
# do a conditional include of timer headers, yet
GENERATE_FUNC_TIMERS = $(MODDIR)/YStopWatchThreadList/generate_func_timers.sh
ifeq ($(LOG_THREAD_NAMES), true)
BUILD_CFLAGS += -DSLOG_THREAD_NAMES
BUILD_CPPFLAGS += -DSLOG_THREAD_NAMES
endif
# ----- standard features, switched on with USE_XXX = true
#include $(MODDIR)/make/lib-deps.mk
ifeq ($(USE_GFILTER),true)
GFILT = sh $(firstword $(wildcard $(MODDIR)/contrib/gfilt/gfilt $(MODDIR)/bin/gfilt))
ifneq ($(strip $(GFILT)),sh)
GPP = $(GFILT)
endif
endif
ifeq ($(USE_PROJECT_LIB),true)
PROJECTLIB_LDFLAGS += -L$(TOPDIR)/lib -l$(LIBNAME)
endif
ifneq ($(filter jw-build,$(PREREQ_BUILD)),)
ifeq ($(TARGET),mingw)
JW_BUILD_LDFLAGS += -lglib-2.0 -lws2_32 -lstdc++
endif
endif
ifeq ($(USE_SYSTEMD),true)
BUILD_CFLAGS += -D_USE_SYSTEMD_ $(shell $(PKG_CONFIG_EXE) --cflags libsystemd)
BUILD_CPPFLAGS += -D_USE_SYSTEMD_ $(shell $(PKG_CONFIG_EXE) --cflags libsystemd)
BUILD_LDFLAGS += $(shell $(PKG_CONFIG_EXE) --libs libsystemd)
endif
ifeq ($(USE_TIMER),true)
BUILD_CFLAGS += -D_USE_TIMER_
BUILD_CPPFLAGS += -D_USE_TIMER_
endif
ifeq ($(USE_FAST_LOG),false)
BUILD_CFLAGS += -D_USE_FAST_LOG_=0
BUILD_CPPFLAGS += -D_USE_FAST_LOG_=0
endif
ifeq ($(USE_YAMD),true)
CC = yamd-gcc
endif
ifeq ($(USE_MPATROL),true)
BUILD_CFLAGS += -include /usr/include/mpatrol.h
#BUILD_CPPFLAGS += -include /usr/include/mpatrol.h
BUILD_LDFLAGS += -lmpatrolmt -lbfd -liberty
endif
ifeq ($(USE_VALGRIND),true)
BUILD_CFLAGS += -include /usr/include/valgrind/memcheck.h -D_VALGRIND_
BUILD_CPPFLAGS += -include /usr/include/valgrind/memcheck.h -D_VALGRIND_
# BUILD_LDFLAGS +=
endif
ifeq ($(USE_MCHECK),true)
BUILD_LDFLAGS += -lmcheck
endif
ifeq ($(USE_STACK_PROTECTOR),true)
BUILD_CFLAGS += -fstack-protector-all
BUILD_CPPFLAGS += -fstack-protector-all
#BUILD_CFLAGS += -fstack-protector
endif
ifeq ($(USE_STACK_CHECKER),true)
ifeq "$(COMPILER_SUITE)" "clang"
BUILD_CFLAGS += -fsanitize=address -fno-omit-frame-pointer
BUILD_CPPFLAGS += -fsanitize=address -fno-omit-frame-pointer
BUILD_LDFLAGS += -fsanitize=address
endif
endif
ifeq ($(USE_DBMALLOC),true)
CONTRIB_LIBS += dbmalloc
BUILD_CFLAGS += -DDBMALLOC -DEXITFUN=_exit -I$(TOPDIR)/contrib/dbmalloc
BUILD_CPPFLAGS += -DDBMALLOC -DEXITFUN=_exit -I$(TOPDIR)/contrib/dbmalloc
BUILD_LDFLAGS += -ldbmalloc
endif
ifeq ($(USE_DMALLOC),true)
BUILD_CFLAGS += -DDMALLOC -DDMALLOC_FUNC_CHECK -DSTORE_SEEN_COUNT
BUILD_CPPFLAGS += -DDMALLOC -DDMALLOC_FUNC_CHECK -DSTORE_SEEN_COUNT
BUILD_LDFLAGS += -ldmallocthcxx -ldmallocth
endif
ifeq ($(USE_MEMWATCH),true)
BUILD_CFLAGS += -DMEMWATCH -DMW_STDIO
BUILD_CPPFLAGS += -DMEMWATCH -DMW_STDIO
endif
ifeq ($(USE_EFENCE),true)
BUILD_CFLAGS += -DEFENCE
BUILD_CPPFLAGS += -DEFENCE
BUILD_LDFLAGS += -lefence
endif
ifeq ($(USE_TRACING),true)
BUILD_CFLAGS += -D_DO_TRACE_
BUILD_CPPFLAGS += -D_DO_TRACE_
endif
ifeq ($(USE_ASSERTIONS),false)
BUILD_CFLAGS += -DNDEBUG
BUILD_CPPFLAGS += -DNDEBUG
endif
ifeq ($(COMPILE_DEBUG_CODE),true)
BUILD_CFLAGS += -D_DEBUG_
BUILD_CPPFLAGS += -D_DEBUG_
endif
ifeq ($(COMPILE_DEBUG_LOG),true)
BUILD_CFLAGS += -D_LOG_DEBUG_
BUILD_CPPFLAGS += -D_LOG_DEBUG_
endif
ifeq ($(USE_MPATROL),true)
BUILD_CFLAGS += -include $(MODDIR)/include/mpatrol.h
BUILD_CPPFLAGS += -include $(MODDIR)/include/mpatrol.h
BUILD_LDFLAGS += -lmpatrolmt -lbfd -liberty
endif
ifeq ($(BREAK_ABI),true)
BUILD_CFLAGS += -D_BREAK_ABI_
BUILD_CPPFLAGS += -D_BREAK_ABI_
endif
ifeq ($(USE_STACK_CHECK),true)
BUILD_CFLAGS += -fstack-check
BUILD_CPPFLAGS += -fstack-check
endif
ifeq ($(USE_COMPILER_DEBUG_OPTS),true)
BUILD_CFLAGS += -gdwarf-2 -g3 -ggdb
BUILD_CPPFLAGS += -gdwarf-2 -g3 -ggdb
BUILD_LDFLAGS += -gdwarf-2 -g3 -ggdb
endif
ifeq ($(CC),$(GCC))
GCC_NO_OPT_FLAGS = \
-fno-inline-functions-called-once \
-fno-tree-loop-optimize \
-fno-early-inlining \
-fno-default-inline
else ifeq ($(CC),$(CLANG))
BUILD_CFLAGS += -Werror
BUILD_CPPFLAGS += -Werror
endif
ifeq ($(USE_COMPILER_OPTIMIZATION_OPTS),true)
BUILD_CFLAGS += -funroll-loops -O3
BUILD_CPPFLAGS += -funroll-loops -O3
else ifeq ($(USE_DISABLE_COMPILER_OPTIMISATION_OPTS),true)
NO_OPT_FLAGS = \
-O0 -g -fno-inline -fno-omit-frame-pointer \
-fno-optimize-sibling-calls \
$(GCC_NO_OPT_FLAGS)
# -fconserve-stack
# breaks constexpr
#NO_OPT_FLAGS += -fno-builtin
_NO_OPT_FLAGS = \
-O0 \
-fno-implicit-inline-templates \
-fno-implement-inlines \
-fno-default-inline \
-fno-inline \
-finline-limit=0 \
-fkeep-inline-functions \
-fno-inline-functions \
$(GCC_NO_OPT_FLAGS)
BUILD_CFLAGS += $(NO_OPT_FLAGS)
BUILD_CPPFLAGS += $(NO_OPT_FLAGS)
BUILD_LDFLAGS += $(NO_OPT_FLAGS)
endif
ifeq ($(USE_EXCEPTIONS_IN_C),true)
BUILD_CFLAGS += -fexceptions
ifeq ($(LIBTYPE),shared)
GCC_LDFLAGS += -shared-libgcc
endif
endif
ifeq ($(STRIP_SYMBOLS),true)
STRIP_DONE ?= strip.done
endif
INCLUDE += $(LOCAL_INCLUDE)
# force use of double quotes, allow header namespaces
ifeq ($(HDRDIR_SCOPE_SUFFIX),)
INCLUDE += -I.
else
INCLUDE += -iquote .
endif
ifeq ($(USE_PROJECT_LIB),true)
INCLUDE += $(PROJECT_INCLUDE) -I$(TOPDIR)/include
LIBFLAGS += -L$(BUILD_LIBDIR)
endif
INCLUDE += $(call proj_query, cflags $(PREREQ_BUILD) $(PROJECT))
LDFLAGS_QUERY_ARGS = $(addprefix --exclude ,$(LDFLAGS_EXCLUDE))
LIBFLAGS += $(call proj_query, ldflags $(LDFLAGS_QUERY_ARGS) --add-self $(PREREQ_BUILD))
# the following is necessary, because not all projects have build.libname = none in project.conf
ifeq ($(USE_PROJECT_LIB),true)
LDFLAGS_QUERY_ARGS_SELF = --add-self
endif
LIBFLAGS += $(call proj_query, ldflags $(LDFLAGS_QUERY_ARGS) $(LDFLAGS_QUERY_ARGS_SELF) $(PROJECT))
ifeq ($(USE_SNDFILE),true)
LIBFLAGS += -lsndfile
endif
ifeq ($(USE_FFTW),true)
LIBFLAGS += -lfftw3
endif
ifeq ($(USE_GLIB),true)
PROJECT_CFLAGS += $(shell $(PKG_CONFIG_EXE) --cflags glib-2.0)
PROJECT_CPPFLAGS += $(shell $(PKG_CONFIG_EXE) --cflags glib-2.0)
LIBFLAGS += $(shell $(PKG_CONFIG_EXE) --libs glib-2.0)
endif
ifeq ($(CC),$(CLANG))
COMPILER_CFLAGS += $(CLANG_CFLAGS)
COMPILER_CPPFLAGS += $(CLANG_CPPFLAGS)
COMPILER_LDFLAGS += $(CLANG_LDFLAGS)
endif
ifeq ($(CC),$(GCC))
COMPILER_CFLAGS += $(GCC_CFLAGS)
COMPILER_CPPFLAGS += $(GCC_CPPFLAGS)
COMPILER_LDFLAGS += $(GCC_LDFLAGS)
endif
BUILD_CFLAGS += $(LOCAL_CFLAGS) $(PROJECT_CFLAGS) $(COMPLILER_CFLAGS) $(INCLUDE)
BUILD_CPPFLAGS += $(LOCAL_CPPFLAGS) $(PROJECT_CPPFLAGS) $(COMPILER_CPPFLAGS) $(INCLUDE)
BUILD_LDFLAGS += $(LOCAL_LDFLAGS) $(PROJECTLIB_LDFLAGS) $(PROJECT_LDFLAGS) $(COMPILER_LDFLAGS) $(LPPFLAGS) $(LIBFLAGS)
#RPM_REQUIRES = $(shell $(ECHO) "$(RPM_REQUIRES_RUN) $(RPM_REQUIRES_DEVEL)" | $(add_flavour_prefix))
RPM_REQUIRES += $(RPM_REQUIRES_RUN) $(RPM_REQUIRES_DEVEL)
# -- LIB
INSTALLATION_FILE_TYPES += LIB
#BUILD_PIDIR = $(BUILD_LIBDIR)
#BUILD_PI = $(addprefix $(BUILD_PIDIR)/,$(PLUGIN))
#INSTALL_PIDIR = $(INSTALL_LIBDIR)
#INSTALLED_PI = $(addprefix $(INSTALL_PIDIR)/,$(PLUGIN))
BUILD_LIBDIR ?= $(TOPDIR)/lib
LOCAL_LIBS += $(CONTRIB_LIBS) $(PLUGIN)
ifeq ($(TARGET),mingw)
ifeq ($(TC_SYS_ROOT),)
CONTRIB_LIBS_PATH += $(CROSS_TOOL_DIR)/bin
else
CONTRIB_LIBS_PATH += $(TC_SYS_ROOT)/lib
endif
endif
INSTALL_LIBDIR ?= $(EXE_PREFIX)/lib
LIBTYPE ?= shared
ifeq ($(LIBTYPE),shared)
ifneq ($(TARGET),mingw)
BUILD_LDFLAGS += -rdynamic
endif
else
LIB_SO ?=
BUILD_LDFLAGS += -static
endif
ifeq ($(USE_PROJECT_LIB),true)
LIBNAME ?= $(PROJECT)
MEMBERS += $(LIB_A)($(OBJ))
VERSION_SCRIPT = $(BUILD_LIBDIR)/version.ldscript
# TODO: use something like this as unifying variable, there are far too many
# lib-related variables
LOCAL_LIBS +=
ifneq ($(TARGET),mingw)
LIB_A ?= $(BUILD_LIBDIR)/lib$(LIBNAME).a
SO_SUFFIX ?= so.$(MAJOR_MINOR_RELEASE)
SO_PREFIX ?= lib
LIB_SO ?= $(BUILD_LIBDIR)/lib$(LIBNAME).$(SO_SUFFIX)
LINKS_SO += $(filter-out $(LIB_SO),$(shell $(ECHO) $(LIB_SO) | $(SED) -e "s/\.so\..*$$/.so/"))
INSTALLED_LINKS_SO += $(filter-out $(INSTALLED_LIB_SO),$(shell $(ECHO) $(INSTALLED_LIB_SO) | $(SED) -e "s/\.so\..*$$/.so/"))
INSTALLED_LIB_A = $(INSTALL_LIBDIR)/lib$(LIBNAME).a
else
LIB_A = $(BUILD_LIBDIR)/lib$(LIBNAME)-static.a
#WINRES_RC_TMPL = $(MODDIR)/make/winres-minimal.rc.tmpl
WINRES_RC_TMPL = $(MODDIR)/make/winres.rc.tmpl
WINRES_RC = $(BUILD_LIBDIR)/$(PROJECT).rc
WINRES_O = $(WINRES_RC).o
SO_SUFFIX ?= dll
SO_PREFIX ?=
LIB_DEF = $(BUILD_LIBDIR)/$(LIBNAME).def
MSVCPP_IMPLIB = $(BUILD_LIBDIR)/$(LIBNAME).lib
LIB_SO ?= $(BUILD_LIBDIR)/$(LIBNAME).dll
INSTALLED_LIB_A = $(INSTALL_LIBDIR)/lib$(LIBNAME).a
endif # mingw
BUILD_LIB += $(LIB_SO)
endif # USE_PROJECT_LIB
INSTALLED_LIB_SO = $(addprefix $(INSTALL_LIBDIR)/,$(notdir $(LIB_SO)))
INSTALLED_DEF = $(addprefix $(INSTALL_LIBDIR)/,$(wildcard *.lib *.exp))
INSTALLED_LIB += $(addprefix $(INSTALL_LIBDIR)/,$(LOCAL_LIBS))
BUILD_LIB += $(addprefix $(BUILD_LIBDIR)/,$(LOCAL_LIBS))
INSTALLED_ALL_LIBS = $(addprefix $(INSTALL_LIBDIR)/,$(wildcard *.a))
INSTALLED_LIB += $(INSTALLED_LIB_SO) $(INSTALLED_SHOBJS) \
$(INSTALLED_LINKS_SO) $(sort $(INSTALLED_LIB_A) $(INSTALLED_ALL_LIBS)) \
$(INSTALLED_DEF)