lo.mk: Use liblocal.a to reduce plugin size

Fix missing symbols from .cpp files via introducing liblocal.a.  This
is the only way I found to make ld ignore object-files unnecessary
for resolving symbols.
This commit is contained in:
Jan Lindemann 2009-06-29 18:43:47 +00:00 committed by Jan Lindemann
commit b9f453a207

View file

@ -1,22 +1,20 @@
# === change this >
TOOLS_DIR ?= $(TOPDIR)/tools
CPP_PREFIX ?= YLo
SO_PREFIX ?= lo_
#SO_PREFIX ?= \
# $(shell sed '/const char \*YAbstractLoadableObject::_soPrefix/ !d; s/[^"]*"//; s/".*//' \
# $(YTOOLS_DIR)/YLoadableObject/YAbstractLoadableObject.cpp)
LOADABLE_OBJ_HOOK ?= LOADABLE_OBJECT_HOOK
# === change this <
include $(MODDIR)/make/defs.mk
include $(MODDIR)/make/rules.mk
include $(MODDIR)/make/depend.mk
.PRECIOUS: %.cpp
LOADABLE_OBJS_BASE = $(patsubst $(CPP_PREFIX)%,%,$(basename $(notdir $(wildcard $(TOOLS_DIR)/$(CPP_PREFIX)*.h))))
LOADABLE_OBJS = $(filter-out $(LOADABLE_OBJ_IGNORE),$(LOADABLE_OBJS_BASE))
LOADABLE_OBJS_O = $(patsubst %.cpp,%.o,$(foreach f,$(LOADABLE_OBJS),$(wildcard $(CPP_PREFIX)$(f).cpp)))
LOADABLE_OBJS_CPP = $(patsubst %,%.cpp,$(LOADABLE_OBJS))
LOADABLE_OBJS_O = $(patsubst %,%.o,$(LOADABLE_OBJS))
OTHER_CPP = $(filter-out $(LOADABLE_OBJS_CPP),$(wildcard *.cpp))
OTHER_O = $(patsubst %.cpp,%.o,$(OTHER_CPP))
OTHER_MEMBERS_O = liblocal.a($(OTHER_O))
ifneq ($(TARGET),mingw)
LOADABLE_OBJ_LIBS = $(addprefix $(SO_PREFIX), $(addsuffix .so, $(LOADABLE_OBJS)))
else
@ -30,10 +28,10 @@ install: $(INSTALLED_LOADABLE_OBJ_LIBS)
clean: clean.lo
clean.lo: profclean
rm -f $(filter-out $(CPP_PREFIX)%.cpp,$(wildcard *.o *.cpp *.so *.done *.dll))
rm -f $(filter-out $(CPP_PREFIX)%.cpp,$(wildcard *.o *.cpp *.so *.done *.dll liblocal.a))
$(SO_PREFIX)%.so $(SO_PREFIX)%.dll: %.o $(LOADABLE_OBJS_O)
$(CPP) $< $(filter $(CPP_PREFIX)$*%, $(LOADABLE_OBJS_O)) -shared $(LDFLAGS) -o $@
$(SO_PREFIX)%.so $(SO_PREFIX)%.dll: %.o liblocal.a
$(CPP) $< -L. -llocal -shared $(LDFLAGS) -o $@
%.cpp: $(TOOLS_DIR)/$(CPP_PREFIX)%.h
echo "#include \"$<\"" > $@.tmp
@ -41,8 +39,14 @@ $(SO_PREFIX)%.so $(SO_PREFIX)%.dll: %.o $(LOADABLE_OBJS_O)
echo "$(LOADABLE_OBJ_HOOK)($(CPP_PREFIX)$*);" >> $@.tmp
mv $@.tmp $@
liblocal.a(%.o): %.o
ar cr liblocal.a $<
liblocal.a: $(OTHER_MEMBERS_O)
$(BUILD_LIBDIR)/%.so: %.so
install -m 755 $< $@
$(BUILD_LIBDIR)/%.dll: %.dll
install -m 755 $< $@
include $(MODDIR)/make/rules.mk
include $(MODDIR)/make/depend.mk