Author: jelmer Date: 2005-08-02 19:38:30 +0000 (Tue, 02 Aug 2005) New Revision: 8936
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=8936 Log: Use incremental linking. This appeared to be supported on 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. Modified: branches/SAMBA_4_0/source/build/smb_build/input.pm branches/SAMBA_4_0/source/build/smb_build/makefile.pm branches/SAMBA_4_0/source/build/smb_build/output.pm Changeset: Modified: branches/SAMBA_4_0/source/build/smb_build/input.pm =================================================================== --- branches/SAMBA_4_0/source/build/smb_build/input.pm 2005-08-02 19:15:19 UTC (rev 8935) +++ branches/SAMBA_4_0/source/build/smb_build/input.pm 2005-08-02 19:38:30 UTC (rev 8936) @@ -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($) Modified: branches/SAMBA_4_0/source/build/smb_build/makefile.pm =================================================================== --- branches/SAMBA_4_0/source/build/smb_build/makefile.pm 2005-08-02 19:15:19 UTC (rev 8935) +++ branches/SAMBA_4_0/source/build/smb_build/makefile.pm 2005-08-02 19:38:30 UTC (rev 8936) @@ -85,7 +85,7 @@ [EMAIL PROTECTED]@ CFLAGS=-Iinclude -I. -I$(srcdir)/include -I$(srcdir) -D_SAMBA_BUILD_ -DHAVE_CONFIG_H -Ilib @CFLAGS@ @CPPFLAGS@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ @CFLAGS@ -Lbin STLD=ar @@ -405,6 +405,27 @@ 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 .= "[EMAIL PROTECTED] \"Linking subsystem $ctx->{NAME}\"\n"; + $output .= "[EMAIL PROTECTED](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 @@ # bin/$ctx->{BINARY}: bin/.dummy \$(BINARY_$ctx->{NAME}_DEPEND_LIST) \$(BINARY_$ctx->{NAME}_OBJS) [EMAIL PROTECTED] Linking \$\@ - [EMAIL PROTECTED](LD) \$(LD_FLAGS) -o \$\@ \\ + [EMAIL PROTECTED](CC) \$(LD_FLAGS) -o \$\@ \\ \$\(BINARY_$ctx->{NAME}_LINK_FLAGS) \\ \$\(BINARY_$ctx->{NAME}_LINK_LIST) \\ \$\(BINARY_$ctx->{NAME}_LINK_FLAGS) @@ -579,6 +600,7 @@ -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 @@ 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"; Modified: branches/SAMBA_4_0/source/build/smb_build/output.pm =================================================================== --- branches/SAMBA_4_0/source/build/smb_build/output.pm 2005-08-02 19:15:19 UTC (rev 8935) +++ branches/SAMBA_4_0/source/build/smb_build/output.pm 2005-08-02 19:38:30 UTC (rev 8936) @@ -10,6 +10,13 @@ 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 @@ 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}}));
