r8936: Use incremental linking. This appeared to be supported on
authorJelmer Vernooij <jelmer@samba.org>
Tue, 2 Aug 2005 19:38:30 +0000 (19:38 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:30:59 +0000 (13:30 -0500)
all systems on the buildfarm when I tested it using smb_build.

It's just a one line change to go back. If this works correctly, we can
simplify the build system quite a bit.
(This used to be commit 6b671fb34a35def9a8d2fdaa8d9a04ff26c9e929)

source4/build/smb_build/input.pm
source4/build/smb_build/makefile.pm
source4/build/smb_build/output.pm

index fc14c1d2e937e572ee6852786e4d351b43cc3bb0..a68d9946dabbc516b71507d7fd2f8460c632d8c8 100644 (file)
@@ -10,7 +10,7 @@
 use strict;
 package smb_build::input;
 
-my $subsystem_default_output_type = "OBJLIST";
+my $subsystem_default_output_type = "MERGEDOBJ";
 my $srcdir = ".";
 
 sub strtrim($)
index a5c97a13da85938ad73e54b80f3133a6653d7f64..d5dbfa1751d6555ecb71692755d7c1fd2a5fa288 100644 (file)
@@ -85,7 +85,7 @@ sub _prepare_compiler_linker($)
 CC=@CC@
 CFLAGS=-Iinclude -I. -I$(srcdir)/include -I$(srcdir) -D_SAMBA_BUILD_ -DHAVE_CONFIG_H -Ilib @CFLAGS@ @CPPFLAGS@
 
-LD=@CC@
+LD=@LD@
 LD_FLAGS=@LDFLAGS@ @CFLAGS@ -Lbin
 
 STLD=ar
@@ -405,6 +405,27 @@ __EOD__
        return $output;
 }
 
+sub _prepare_mergedobj_rule($)
+{
+       my $ctx = shift;
+
+       return "" unless $ctx->{TARGET};
+
+       my $output = "";
+
+       my $tmpdepend = array2oneperline($ctx->{DEPEND_LIST});
+
+       $output .= "$ctx->{TYPE}_$ctx->{NAME}_DEPEND_LIST = $tmpdepend\n";
+
+       $output .= "$ctx->{TARGET}: \$($ctx->{TYPE}_$ctx->{NAME}_DEPEND_LIST) \$($ctx->{TYPE}_$ctx->{NAME}_OBJS)\n";
+
+       $output .= "\t\@echo \"Linking subsystem $ctx->{NAME}\"\n";
+       $output .= "\t@\$(LD) -r \$($ctx->{TYPE}_$ctx->{NAME}_OBJS) -o $ctx->{TARGET}\n";
+       $output .= "\n";
+
+       return $output;
+}
+
 sub _prepare_objlist_rule($)
 {
        my $ctx = shift;
@@ -506,7 +527,7 @@ BINARY_$ctx->{NAME}_LINK_FLAGS =$tmpflag
 #
 bin/$ctx->{BINARY}: bin/.dummy \$(BINARY_$ctx->{NAME}_DEPEND_LIST) \$(BINARY_$ctx->{NAME}_OBJS)
        \@echo Linking \$\@
-       \@\$(LD) \$(LD_FLAGS) -o \$\@ \\
+       \@\$(CC) \$(LD_FLAGS) -o \$\@ \\
                \$\(BINARY_$ctx->{NAME}_LINK_FLAGS) \\
                \$\(BINARY_$ctx->{NAME}_LINK_LIST) \\
                \$\(BINARY_$ctx->{NAME}_LINK_FLAGS)
@@ -579,6 +600,7 @@ distclean: clean
        -rm -f config.status
        -rm -f config.log config.cache
        -rm -f samba4-deps.dot
+       -rm -f config.pm config.mk
        -rm -f lib/registry/winregistry.pc
 __EOD__
 
@@ -795,6 +817,7 @@ sub _prepare_rule_lists($)
        foreach my $key (values %{$depend}) {
                next unless defined $key->{OUTPUT_TYPE};
 
+               ($output .= _prepare_mergedobj_rule($key)) if $key->{OUTPUT_TYPE} eq "MERGEDOBJ";
                ($output .= _prepare_objlist_rule($key)) if $key->{OUTPUT_TYPE} eq "OBJLIST";
                ($output .= _prepare_static_library_rule($key)) if $key->{OUTPUT_TYPE} eq "STATIC_LIBRARY";
                ($output .= _prepare_shared_library_rule($key)) if $key->{OUTPUT_TYPE} eq "SHARED_LIBRARY";
index b863d7e8dcd88af44cc3cb2bac9a11b1a4608b8b..0b7be94dfc01f1e087ef46a6a53b9d1dc33029b7 100644 (file)
 package output;
 use strict;
 
+sub generate_mergedobj($)
+{
+       my $subsys = shift;
+
+       $subsys->{OUTPUT} = $subsys->{TARGET} = "bin/$subsys->{TYPE}_$subsys->{NAME}.o";
+}
+
 sub generate_objlist($)
 {
        my $subsys = shift;
@@ -85,15 +92,23 @@ sub create_output($)
                next if $part->{NAME} eq "ALL_OBJS";
                next if not defined($part->{OUTPUT_TYPE});
 
+               # Combine object lists
+               push(@{$part->{OBJ_LIST}}, @{$part->{INIT_OBJ_FILES}}) if defined($part->{INIT_OBJ_FILES});
+               push(@{$part->{OBJ_LIST}}, @{$part->{ADD_OBJ_FILES}}) if defined($part->{ADD_OBJ_FILES});
+               push(@{$part->{OBJ_LIST}}, @{$part->{OBJ_FILES}}) if defined($part->{OBJ_FILES});
+
+               if ((not defined($part->{OBJ_LIST}) or 
+                       scalar(@{$part->{OBJ_LIST}}) == 0) and 
+                       $part->{OUTPUT_TYPE} eq "MERGEDOBJ") {
+                       $part->{OUTPUT_TYPE} = "OBJLIST";
+               }
+
                generate_binary($part) if $part->{OUTPUT_TYPE} eq "BINARY";
+               generate_mergedobj($part) if $part->{OUTPUT_TYPE} eq "MERGEDOBJ";
                generate_objlist($part) if $part->{OUTPUT_TYPE} eq "OBJLIST";
                generate_shared_library($part) if $part->{OUTPUT_TYPE} eq "SHARED_LIBRARY";
                generate_static_library($part) if $part->{OUTPUT_TYPE} eq "STATIC_LIBRARY";
 
-               # Combine object lists
-               push(@{$part->{OBJ_LIST}}, @{$part->{INIT_OBJ_FILES}}) if defined($part->{INIT_OBJ_FILES});
-               push(@{$part->{OBJ_LIST}}, @{$part->{ADD_OBJ_FILES}}) if defined($part->{ADD_OBJ_FILES});
-               push(@{$part->{OBJ_LIST}}, @{$part->{OBJ_FILES}}) if defined($part->{OBJ_FILES});
 
                push(@{$depend->{ALL_OBJS}->{OBJ_LIST}}, @{$part->{OBJ_LIST}}) if (defined(@{$part->{OBJ_LIST}}));