From 88b9ecb6b34d268f0761e6e961408871b6e91376 Mon Sep 17 00:00:00 2001 From: danieldg Date: Sun, 17 Jan 2010 03:17:25 +0000 Subject: PURE_STATIC improvements: Allow modules to be reloaded, generate linker arguments git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@12276 e03df62e-2008-0410-955e-edbf42e46eb7 --- make/calcdep.pl | 14 +++++++++++--- make/unit-cc.pl | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 3 deletions(-) (limited to 'make') diff --git a/make/calcdep.pl b/make/calcdep.pl index 1a1963b31..55e0630fc 100755 --- a/make/calcdep.pl +++ b/make/calcdep.pl @@ -120,20 +120,28 @@ bad-target: all: inspircd END - my @deps; + my(@deps, @srcs); for my $file (<*.cpp>, , , , , , "threadengines/threadengine_pthread.cpp") { my $out = find_output $file, 1; + if ($out =~ m#obj/([^/]+)/[^/]+.o$#) { + mkdir "$ENV{BUILDPATH}/obj/$1"; + } dep_cpp $file, $out; next if $file =~ m#^socketengines/# && $file ne "socketengines/$ENV{SOCKETENGINE}.cpp"; push @deps, $out; + push @srcs, $file; } my $core_mk = join ' ', @deps; + my $core_src = join ' ', @srcs; print MAKE < +obj/ld-extra.cmd: $core_src + \@\$(SOURCEPATH)/make/unit-cc.pl -f\$(VERBOSE) \$\@ \$^ \$> + +bin/inspircd: obj/ld-extra.cmd $core_mk + \@\$(SOURCEPATH)/make/unit-cc.pl -l\$(VERBOSE) \$\@ \$^ \$> inspircd: bin/inspircd diff --git a/make/unit-cc.pl b/make/unit-cc.pl index 23a7dfb76..489b46ff9 100755 --- a/make/unit-cc.pl +++ b/make/unit-cc.pl @@ -13,6 +13,14 @@ if ($out =~ /^-/) { $_ = $out; $out = shift; $verbose = /v/; + if (/f/) { + do_static_find(@ARGV); + exit; + } + if (/l/) { + do_static_link(@ARGV); + exit; + } } my $file = shift; @@ -32,3 +40,31 @@ my $execstr = "$ENV{RUNCC} $flags -o $out $file"; print "$execstr\n" if $verbose; exec $execstr; exit 1; + +sub do_static_find { + my @flags; + for my $file (@ARGV) { + push @flags, getlinkerflags($file); + } + open F, '>', $out; + print F join ' ', @flags; + close F; +} + +sub do_static_link { + my $execstr = "$ENV{RUNCC} -o $out $ENV{CORELDFLAGS} $ENV{LDLIBS}"; + for (@ARGV) { + if (/\.cmd$/) { + open F, '<', $_; + my $libs = ; + chomp $libs; + $execstr .= ' '.$libs; + close F; + } else { + $execstr .= ' '.$_; + } + } + print "$execstr\n" if $verbose; + exec $execstr; + exit 1; +} -- cgit v1.2.3