LD={- $target{ld} || "link" -}
LDFLAGS={- $target{lflags} -}
LDOUTFLAG={- $target{loutflag} || "/out:" -}
-EX_LIBS={- $config{ex_libs} -}
-SHARED_CFLAGS={- $target{shared_cflag} || "" -}
+EX_LIBS={- $target{ex_libs} -}
+LIB_CFLAGS={- join(" ", $target{lib_cflags}, $target{shared_cflag}) || "" -}
SHARED_LDFLAGS={- $target{shared_ldflag} || "" -}
-DSO_CFLAGS={- $target{shared_cflag} || "" -}
+DSO_CFLAGS={- join(" ", $target{dso_cflags}, $target{shared_cflag}) || "" -}
+DSO_LDFLAGS={- join(" ", $target{dso_lflags}, $target{shared_ldflag}) || "" -}
BIN_CFLAGS={- $target{bin_cflags} -}
+BIN_LDFLAGS={- $target{bin_lflags} -}
PERL={- $config{perl} -}
# The main targets ###################################################
-all: configdata.pm build_libs_nodep build_engines_nodep build_apps_nodep \
- depend link-utils
+all: configdata.pm build_libs_nodep build_engines_nodep build_apps_nodep depend
build_libs: configdata.pm build_libs_nodep depend
build_libs_nodep: $(LIBS)
build_tests: configdata.pm build_tests_nodep depend
build_tests_nodep: $(TESTPROGS)
-test tests: build_tests_nodep build_apps_nodep build_engines_nodep depend rehash
+test tests: build_tests_nodep build_apps_nodep build_engines_nodep depend
set SRCTOP=$(SRCDIR)
set BLDTOP=$(BLDDIR)
set PERL=$(PERL)
return map { shlib_import($_) } @_;
}
+ sub generatesrc {
+ my %args = @_;
+ (my $target = $args{src}) =~ s/\.[sS]$/.asm/;
+ my $generator = join(" ", @{$args{generator}});
+
+ if ($target !~ /\.asm$/) {
+ return <<"EOF";
+$target: $args{generator}->[0]
+ \$(PERL) $generator > \$@
+EOF
+ } else {
+ if ($args{generator}->[0] =~ /\.pl$/) {
+ $generator = '$(PERL) '.$generator;
+ } elsif ($args{generator}->[0] =~ /\.S$/) {
+ $generator = undef;
+ } else {
+ die "Generator type for $src unknown: $generator\n";
+ }
+
+ if (defined($generator)) {
+ # If the target is named foo.S in build.info, we want to
+ # end up generating foo.s in two steps.
+ if ($args{src} =~ /\.S$/) {
+ return <<"EOF";
+$target: $args{generator}->[0]
+ set ASM=\$(AS)
+ set CC=\$(CC)
+ $generator \$@.S
+ \$(CC) \$(CFLAGS) /EP /C \$@.S > \$@
+ del /Q \$@.S
+EOF
+ }
+ # Otherwise....
+ return <<"EOF";
+$target: $args{generator}->[0]
+ set ASM=\$(AS)
+ set CC=\$(CC)
+ $generator \$@
+EOF
+ }
+ return <<"EOF";
+$target: $args{generator}->[0]
+ \$(CC) \$(CFLAGS) /EP /C \$< > \$@
+EOF
+ }
+ }
+
sub src2obj {
my %args = @_;
my $obj = $args{obj};
my $srcs = join(" ", @srcs);
my $deps = join(" ", @srcs, @{$args{deps}});
my $incs = join("", map { " /I ".$_ } @{$args{incs}});
- my $ecflags = { lib => '$(SHARED_CFLAGS)',
+ my $ecflags = { lib => '$(LIB_CFLAGS)',
dso => '$(DSO_CFLAGS)',
bin => '$(BIN_CFLAGS)' } -> {$args{intent}};
my $makedepprog = $config{makedepprog};
return <<"EOF"
$target: $deps $ordinalsfile
\$(PERL) $mkdef_pl "$mkdef_key" 32 > $shlib.def
- \$(LD) \$(LDFLAGS) \\
- /dll /implib:$target \$(LDOUTFLAG)$shlib$shlibext /def:$shlib.def @<<
+ \$(LD) \$(LDFLAGS) \$(SHARED_LDFLAGS) \\
+ /implib:$target \$(LDOUTFLAG)$shlib$shlibext /def:$shlib.def @<<
$objs$linklibs \$(EX_LIBS)
<<
EOF
sub obj2dso {
my %args = @_;
my $dso = $args{lib};
+ my $dso_n = basename($dso);
my $objs = join("\n", map { $_.$objext } @{$args{objs}});
my $linklibs = join("",
map { "\n$_" } compute_lib_depends(@{$args{deps}}));
compute_lib_depends(@{$args{deps}}));
return <<"EOF";
$dso$dsoext: $deps
- \$(LD) \$(LDFLAGS) /dll \$(LDOUTFLAG)$dso$dsoext /def:<< @<<
-LIBRARY $dso
+ \$(LD) \$(LDFLAGS) \$(DSO_LDFLAGS) \$(LDOUTFLAG)$dso$dsoext /def:<< @<<
+LIBRARY $dso_n
EXPORTS
bind_engine @1
v_check @2
compute_lib_depends(@{$args{deps}}));
return <<"EOF";
$bin$exeext: $deps
- \$(LD) \$(LDFLAGS) \$(LDOUTFLAG)$bin$exeext @<<
+ \$(LD) \$(LDFLAGS) \$(BIN_LDFLAGS) \$(LDOUTFLAG)$bin$exeext @<<
$objs setargv.obj$linklibs \$(EX_LIBS)
<<
EOF