Reintroduce mergedobj support.
authorJelmer Vernooij <jelmer@samba.org>
Sat, 16 Feb 2008 19:38:21 +0000 (20:38 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Sat, 16 Feb 2008 19:38:21 +0000 (20:38 +0100)
(This used to be commit 1cf23c58411a9b8a9bb97016c27c10a218e73146)

source4/build/smb_build/main.pl
source4/build/smb_build/makefile.pm
source4/build/smb_build/output.pm

index a85eab32de59665a6c54c43ac22c06211de86400..4c09e32422bddfc21f9ebfee192b0abbff48727f 100644 (file)
@@ -20,7 +20,7 @@ my $INPUT = {};
 my $mkfile = smb_build::config_mk::run_config_mk($INPUT, $config::config{srcdir}, $config::config{builddir}, "main.mk");
 
 my $subsys_output_type;
-$subsys_output_type = ["STATIC_LIBRARY"];
+$subsys_output_type = ["MERGED_OBJ"];
 
 my $library_output_type;
 if ($config::config{USESHARED} eq "true") {
@@ -59,6 +59,7 @@ my $shared_libs_used = 0;
 foreach my $key (values %$OUTPUT) {
        next unless defined $key->{OUTPUT_TYPE};
 
+       $mkenv->MergedObj($key) if grep(/MERGED_OBJ/, @{$key->{OUTPUT_TYPE}});
        $mkenv->StaticLibrary($key) if grep(/STATIC_LIBRARY/, @{$key->{OUTPUT_TYPE}});
        if (defined($key->{PC_FILE})) {
                push(@{$mkenv->{pc_files}}, "$key->{BASEDIR}/$key->{PC_FILE}");
index 9c6d52cfef0a84feb57a0f516e718e4b0f4b9a74..6ea3b8d95095ea5cf36431f8b80301583e62f080 100644 (file)
@@ -277,6 +277,24 @@ __EOD__
        $self->output("\n");
 }
 
+sub MergedObj($$)
+{
+       my ($self, $ctx) = @_;
+
+       $self->_prepare_list($ctx, "OBJ_LIST");
+       $self->_prepare_list($ctx, "FULL_OBJ_LIST");
+       push(@{$self->{all_objs}}, "\$($ctx->{NAME}_FULL_OBJ_LIST)");
+       $self->output(<< "__EOD__"
+#
+$ctx->{TARGET_MERGED_OBJ}: \$($ctx->{NAME}_FULL_OBJ_LIST)
+       \@echo Partially linking \$@
+       \@mkdir -p bin/mergedobj
+       \@\$(LD) -r -o \$@ \$($ctx->{NAME}_FULL_OBJ_LIST)
+
+__EOD__
+);
+}
+
 sub StaticLibrary($$)
 {
        my ($self,$ctx) = @_;
index 4350370fbf8a8b8d31a169acd2f9c0f7a1f5697a..0ddb9e4efbe3d127264f49091a1894b25c654d92 100644 (file)
@@ -89,6 +89,17 @@ sub generate_shared_library($)
        $lib->{OUTPUT_SHARED_LIBRARY} = $lib->{TARGET_SHARED_LIBRARY};
 }
 
+sub generate_merged_obj($)
+{
+       my $lib = shift;
+
+       my $link_name = $lib->{NAME};
+       $link_name =~ s/^LIB//;
+
+       $lib->{MERGED_OBJNAME} = lc($link_name).".o";
+       $lib->{TARGET_MERGED_OBJ} = $lib->{OUTPUT_MERGED_OBJ} = "bin/mergedobj/$lib->{MERGED_OBJNAME}";
+}
+
 sub generate_static_library($)
 {
        my $lib = shift;
@@ -153,6 +164,7 @@ sub create_output($$)
                generate_binary($part) if grep(/BINARY/, @{$part->{OUTPUT_TYPE}});
                generate_shared_library($part) if grep(/SHARED_LIBRARY/, @{$part->{OUTPUT_TYPE}});
                generate_static_library($part) if grep(/STATIC_LIBRARY/, @{$part->{OUTPUT_TYPE}});
+               generate_merged_obj($part) if grep(/MERGED_OBJ/, @{$part->{OUTPUT_TYPE}});
                $part->{OUTPUT} = $part->{"OUTPUT_" . @{$part->{OUTPUT_TYPE}}[0]};
                $part->{TARGET} = $part->{"TARGET_" . @{$part->{OUTPUT_TYPE}}[0]};
        }