From 9d7ac411412f133fa2de753fd3e358d7bf23b149 Mon Sep 17 00:00:00 2001 From: namark <namark@disroot.org> Date: Mon, 20 Sep 2021 20:12:44 +0400 Subject: [PATCH] Shared library support in static_lib template. because they turned out so similar. --- make_templates/static_lib | 44 +++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/make_templates/static_lib b/make_templates/static_lib index ac4676c..3fc4623 100644 --- a/make_templates/static_lib +++ b/make_templates/static_lib @@ -1,15 +1,19 @@ CPPSTD ?= --std=c++1z CPPFLAGS += $(CPPSTD) +SRCDIR ?= ./source +SRCEXT ?= .cpp +#SHARED + override CPPFLAGS += -MMD -MP -override CPPFLAGS += -I./include +override CPPFLAGS += -I./include -I$(SRCDIR) override CPPFLAGS += $(shell cat .cxxflags 2> /dev/null | xargs) ARFLAGS := $(ARFLAGS)c -INSTALL_INCLUDE := include -INSTALL_SOURCE := source -INSTALL_LIB := lib +INSTALL_INCLUDE ?= include +INSTALL_SOURCE ?= source +INSTALL_LIB ?= lib #LOCAL_TEMP #LOCAL_DIST @@ -20,13 +24,11 @@ else COPYRIGHT ?= /dev/null endif -PREFIX := $(DESTDIR)/usr/local +PREFIX ?= $(DESTDIR)/usr/local INCDIR := $(PREFIX)/$(INSTALL_INCLUDE) LIBDIR := $(PREFIX)/$(INSTALL_LIB) INSTALL_SRCDIR := $(PREFIX)/$(INSTALL_SOURCE) -SRCDIR ?= ./source -SRCEXT ?= .cpp TEMPDIR := temp ifneq ($(LOCAL_TEMP),) @@ -38,8 +40,23 @@ ifneq ($(LOCAL_DIST),) DISTDIR := $(DISTDIR)/$(LOCAL_DIST) endif +ifneq ($(SHARED),) +LIBEXT := .so +override LOCALIB += $(wildcard lib/*.a) +override LDFLAGS += --shared +override LDFLAGS += $(shell cat .ldflags 2> /dev/null | xargs) +override LDFLAGS += -L./lib +override LDLIBS += $(shell cat .ldlibs 2> /dev/null | xargs) +else +LIBEXT := .a +endif + +ifeq ($(origin NAME), undefined) +NAME := $(shell pwd | xargs basename) +endif + ifeq ($(origin TARGET), undefined) -TARGET := $(shell pwd | xargs basename).a +TARGET := $(NAME)$(LIBEXT) endif OUT := $(DISTDIR)/$(TARGET) @@ -48,7 +65,7 @@ ifeq ($(origin HEADERS), undefined) HEADERS := $(shell find -wholename "$(SRCDIR)/*.hpp" && find -wholename "$(SRCDIR)/*.h") endif INCLUDE := $(ADD_INCLUDE:%=$(INCDIR)/%) $(HEADERS:$(SRCDIR)/%=$(INCDIR)/%) -INCDIRS := $(shell dirname $(INCLUDE)) +INCDIRS := $(shell dirname $(INCLUDE) 2> /dev/null) ifeq ($(origin SOURCES), undefined) SOURCES := $(shell find -wholename "$(SRCDIR)/*$(SRCEXT)") @@ -63,9 +80,14 @@ INSTALL_SOURCES += $(INCLUDE:$(INCDIR)/%=$(INSTALL_SRCDIR)/%) INSTALL_SOURCES += $(ADD_INSTALL_SOURCES:%=$(INSTALL_SRCDIR)/%) INSTALL_SRCDIRS := $(shell dirname $(INSTALL_SOURCES)) -$(OUT): $(OBJECTS) | $(DISTDIR) +build: $(OUT) + +$(DISTDIR)/%.a: $(OBJECTS) | $(DISTDIR) $(AR) $(ARFLAGS) $@ $^ +$(DISTDIR)/%.so: $(OBJECTS) $(LOCALIB) | $(DISTDIR) + $(CXX) $(LDFLAGS) $(OBJECTS) $(LOCALIB) $(LDLIBS) -o $@ + $(TEMPDIR)/%.o: $(SRCDIR)/%$(SRCEXT) | $(TEMPDIR) @mkdir -p $(@D) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ -c $< @@ -134,4 +156,4 @@ uninstall_all: uninstall uninstall_source -include $(DEPENDS) .PRECIOUS : $(OBJECTS) -.PHONY : clean distclean uninstall uninstall_source uninstall_all +.PHONY : build clean distclean uninstall uninstall_source uninstall_all -- GitLab