Makefiles, UNIX: few optimizations in classlib (re)linking
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 09 Aug 2017 22:22:06 +0100
changeset 146 6a54e7e6592e
parent 145 4ec1c698757a
child 147 00a0379b3f95
Makefiles, UNIX: few optimizations in classlib (re)linking ...by: * reducing a number of sub-make invocations * avoiding linkage when nothing changes
makelib/rules.make
--- 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