Makefiles, UNIX: few optimizations in classlib (re)linking
...by:
* reducing a number of sub-make invocations
* avoiding linkage when nothing changes
--- a/makelib/rules.make Wed Aug 09 21:54:11 2017 +0100
+++ b/makelib/rules.make Wed Aug 09 22:22:06 2017 +0100
@@ -1016,22 +1016,8 @@
obj:: obj$(TARGET_RULE_EXTENSION)
-obj_shared: newobj
- @echo "making shared classObject ..."
- @-if [ "$(LIBNAME)" != "" ]; then \
- if [ -f $(LIBNAME)$(OBJNAME) ]; then \
- echo "making shared object $(LIBNAME)$(SO_NAME)"; \
- if [ "$(LOCAL_SHARED_LIBS)" != "" ]; then \
- echo " local libs: $(LOCAL_SHARED_LIBS)"; \
- fi; \
- $(MAKE) $(LIBNAME)$(SO_NAME) LOCAL_SHARED_LIBS="$(LOCAL_SHARED_LIBS)"; \
- else \
- echo " ** $(LIBNAME)$(SO_NAME) not made - no $(LIBNAME)$(OBJNAME)"; \
- fi \
- fi
- @-if [ "$(STUBLIBNAME)" != "" ]; then \
- $(MAKE) obj_shared_stub; \
- fi
+obj_shared: newobj $(LIBNAME)$(SO_NAME)
+
obj_shared_stub:
@-if [ -f $(STUBLIBNAME)$(OBJNAME) ]; then \
@@ -1058,7 +1044,7 @@
newobj_postlink::
@true "nothing done here"
-newobj: $(LIBNAME)Init.c objs $(LINKOBJS)
+newobj: objs $(LINKOBJS)
@if [ "$(NEWOBJ_SUBDIRS)"x != x ]; then \
for i in "$(NEWOBJ_SUBDIRS)"; do \
if [ -d $$i ]; then \
@@ -1069,16 +1055,13 @@
fi
@if [ "$(LIBNAME)" != "" ]; then \
if [ "$(LINKOBJS)" != "" ]; then \
- echo "making objs ..."; \
- $(MAKE) objs && \
echo "making init code ..." && \
- $(MAKE) $(LIBNAME)Init.o LIBNAME=$(LIBNAME) CC=$(CC) &&\
- $(MAKE) $(PRE_LD_ACTION) && \
- $(MAKE) newobj_prelink LIBNAME=$(LIBNAME) && \
- $(MAKE) $(LINKOBJRULE) LINKOBJS="$(LINKOBJS)" LIBNAME=$(LIBNAME) && \
- $(MAKE) newobj_postlink LIBNAME=$(LIBNAME) && \
- chmod -x,+w $(LIBNAME)$(OBJNAME) && \
- $(MAKE) $(POST_LD_ACTION); \
+ $(MAKE) LINKOBJS="$(LINKOBJS)" LIBNAME=$(LIBNAME) \
+ $(PRE_LD_ACTION) \
+ newobj_prelink \
+ $(LINKOBJRULE) \
+ newobj_postlink \
+ $(POST_LD_ACTION); \
else \
echo " ** $(LIBNAME)$(OBJNAME) not made - no object files (LINKOBJS=) defined"; \
fi \
@@ -1098,9 +1081,11 @@
@chmod -x,+w $(STUBLIBNAME)$(OBJNAME)
@rm -f $(STUBLIBNAME)Stub.o $(STUBLIBNAME)Stub.c
-newobj_link::
+newobj_link:: $(LIBNAME)$(OBJNAME)
+
+$(LIBNAME)$(OBJNAME): $(LIBNAME)Init.o $(LINKOBJS)
@echo "linking class object ..."
- $(CLASSLIB_LD) $(LD_REL_FLAG) $(LD_OBJ_FLAGS) $(LIBNAME)Init.o $(LINKOBJS) $(LD_OBJ_LIBS) $(LD_REL_OBJ_LIBS) -o $(LIBNAME)$(OBJNAME)
+ $(CLASSLIB_LD) $(LD_REL_FLAG) $(LD_OBJ_FLAGS) $^ $(LD_OBJ_LIBS) $(LD_REL_OBJ_LIBS) -o $@
newobj_staticLink::
@echo "linking static classLib object ..."
@@ -2354,8 +2339,8 @@
#
# generate a libXXXInit.c file from classList/modulList.stc
#
-$(LIBNAME)Init.c: Make.proto Make.spec libInit.cc
- @cp libInit.cc $(LIBNAME)Init.c
+$(LIBNAME)Init.o: libInit.cc Make.proto Make.spec
+ $(CC) $(CFLAGS) -x c -c $< -o $@
ntLibInit.c: $(LIBNAME)Init.c
mv $(LIBNAME)Init.c ntLibInit.c