package output;
use strict;
+sub generate_mergedobj($)
+{
+ my $subsys = shift;
+
+ $subsys->{OUTPUT} = $subsys->{TARGET} = "bin/subsystems/$subsys->{TYPE}_$subsys->{NAME}.o";
+}
+
sub generate_objlist($)
{
my $subsys = shift;
- $subsys->{TARGET} = $subsys->{OUTPUT} = "\$($subsys->{TYPE}_$subsys->{NAME}_OBJS)";
+ $subsys->{TARGET} = "bin/.$subsys->{TYPE}_$subsys->{NAME}";
+ $subsys->{OUTPUT} = "\$($subsys->{TYPE}_$subsys->{NAME}_OBJS)";
}
sub generate_shared_library($)
{
my $lib = shift;
- @{$lib->{DEPEND_LIST}} = ("\$($lib->{TYPE}_$lib->{NAME}\_OBJS)");
+ @{$lib->{DEPEND_LIST}} = ();
@{$lib->{LINK_LIST}} = ("\$($lib->{TYPE}_$lib->{NAME}\_OBJS)");
$lib->{LIBRARY_NAME} = lc($lib->{NAME}).".so";
$lib->{TARGET} = "bin/lib$lib->{LIBRARY_NAME}";
{
my $lib = shift;
- @{$lib->{DEPEND_LIST}} = ("\$($lib->{TYPE}_$lib->{NAME}\_OBJS)");
+ @{$lib->{DEPEND_LIST}} = ();
$lib->{LIBRARY_NAME} = lc($lib->{NAME}).".a";
@{$lib->{LINK_LIST}} = ("\$($lib->{TYPE}_$lib->{NAME}\_OBJS)");
{
my $bin = shift;
- @{$bin->{DEPEND_LIST}} = ("\$($bin->{TYPE}_$bin->{NAME}\_OBJS)");
+ @{$bin->{DEPEND_LIST}} = ();
@{$bin->{LINK_LIST}} = ("\$($bin->{TYPE}_$bin->{NAME}\_OBJS)");
@{$bin->{LINK_FLAGS}} = ();
sub create_output($)
{
my $depend = shift;
- my %output = ();
my $part;
- $depend->{PROTO}{OUTPUT_TYPE} = "OBJLIST";
- $depend->{PROTO}{TYPE} = "PROTO";
- $depend->{PROTO}{NAME} = "PROTO";
-
+ $depend->{PROTO} = {
+ OUTPUT_TYPE => "OBJLIST",
+ TYPE => "PROTO",
+ NAME => "PROTO",
+ OBJ_LIST => []
+ };
+
+ $depend->{ALL_OBJS} = {
+ OUTPUT_TYPE => "OBJLIST",
+ TYPE => "",
+ NAME => "ALL_OBJS",
+ OBJ_LIST => []
+ };
+
foreach $part (values %{$depend}) {
+ next if $part->{NAME} eq "PROTO";
+ 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->{PROTO}{OBJ_LIST}}, @{$part->{OBJ_LIST}}) if ((not defined ($part->{NOPROTO}) or $part->{NOPROTO} eq "NO") and defined(@{$part->{OBJ_LIST}}));
+ push(@{$depend->{ALL_OBJS}->{OBJ_LIST}}, @{$part->{OBJ_LIST}}) if (defined(@{$part->{OBJ_LIST}}));
+
+ if ((not defined ($part->{NOPROTO})) or ($part->{NOPROTO} eq "NO")) {
+ push(@{$depend->{PROTO}->{OBJ_LIST}}, @{$part->{OBJ_LIST}}) if (defined(@{$part->{OBJ_LIST}}));
+ }
}
foreach $part (values %{$depend}) {
next if not defined($part->{OUTPUT_TYPE});
+ foreach (@{$part->{DEPENDENCIES}}) {
+ my $elem = $$_;
+ push(@{$part->{DEPEND_LIST}}, $elem->{TARGET}) if defined($elem->{TARGET});
+ }
+
# Always import the CFLAGS and CPPFLAGS of the unique dependencies
foreach my $elem (values %{$part->{UNIQUE_DEPENDENCIES}}) {
next if $elem == $part;
push(@{$part->{CPPFLAGS}}, @{$elem->{CPPFLAGS}}) if defined(@{$elem->{CPPFLAGS}});
push(@{$part->{CFLAGS}}, @{$elem->{CFLAGS}}) if defined(@{$elem->{CFLAGS}});
- push(@{$part->{DEPEND_LIST}}, $elem->{TARGET}) if defined($elem->{TARGET});
push(@{$part->{LINK_LIST}}, $elem->{OUTPUT}) if defined($elem->{OUTPUT});
push(@{$part->{LINK_FLAGS}}, @{$elem->{LIBS}}) if defined($elem->{LIBS});
push(@{$part->{LINK_FLAGS}},@{$elem->{LDFLAGS}}) if defined($elem->{LDFLAGS});