From fc94d68a0389e3e9fc4f143e519f527e1770aa8f Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 19 Jul 2017 17:59:44 +0200 Subject: Make distributable with any compiler --- buildfile | 82 ++++++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 49 insertions(+), 33 deletions(-) (limited to 'buildfile') diff --git a/buildfile b/buildfile index 0efdd29..26bd1b8 100644 --- a/buildfile +++ b/buildfile @@ -17,49 +17,65 @@ doc{version}: dist = true dir{tests/}: install = false doc{INSTALL}@./: install = false -# Building of the modules gets rather compiler-specific. -# -if ($cxx.id.type == 'clang') +if! $cxx.features.modules { - # Use the naming scheme expected by -fprebuilt-module-path=. Can also be - # specified with -fmodule-file=. + # List sources as files so that we can prepare a distribution with any + # compiler. # - core = std.core.pcm - io = std.io.pcm + ./: {mxx cxx}{*} } -elif ($cxx.id.type == 'msvc') +else { - # Use the naming scheme expected by /module:stdIfcDir. Note that IFCPATH - # would require an extra directory (x64 or x86; e.g., x64/Release/). + # We only do the static library since this is what we would have gotten + # should we have used headers (i.e., whatever object code generated from + # those headers would have ended up in each executable/library). # - # @@ Currently VC looks in Release regardless of /MD or /MDd. + ./: liba{std-modules} + + # Building of the modules gets rather compiler-specific. # - dir = release/ - core = $dir/std.core.ifc - io = $dir/std.io.ifc + if ($cxx.id.type == 'clang') + { + # Use the naming scheme expected by -fprebuilt-module-path=. Can also be + # specified with -fmodule-file=. + # + core = std.core.pcm + io = std.io.pcm + } + elif ($cxx.id.type == 'msvc') + { + # Use the naming scheme expected by /module:stdIfcDir. Note that IFCPATH + # would require an extra directory (x64 or x86; e.g., x64/Release/). + # + # @@ Currently VC looks in Release regardless of /MD or /MDd. + # + dir = release/ + core = $dir/std.core.ifc + io = $dir/std.io.ifc - bmia{$core $io}: fsdir{$dir} + bmia{$core $io}: fsdir{$dir} - # VC expects to find std.lib next to the .ifc's. Make it a dummy one. - # - liba{std-modules}: $dir/liba{std} - $dir/liba{std}: cxx{dummy.cxx} -} + # VC expects to find std.lib next to the .ifc's. Make it a dummy one. + # + liba{std-modules}: $dir/liba{std} + $dir/liba{std}: cxx{dummy.cxx} + } -# @@ TMP: use utility library instead? -# -if ($cxx.target.class == 'linux' || $cxx.target.class == 'bsd') - cxx.coptions += -fPIC + # @@ TMP: use utility library instead? + # + if ($cxx.target.class == 'linux' || $cxx.target.class == 'bsd') + cxx.coptions += -fPIC -# Clang 5.0 with libc++ (sometimes) needs it -- go figure. -# -if ($cxx.target.class != "windows") - cxx.libs += -lpthread + # Clang 5.0 with libc++ (sometimes) needs it -- go figure. + # + if ($cxx.target.class != "windows") + cxx.libs += -lpthread -liba{std-modules}: bmia{$core $io} + liba{std-modules}: bmia{$core $io} -bmia{$core}: mxx{std-core} -bmia{$io}: mxx{std-io} bmia{$core} + bmia{$core}: mxx{std-core} + bmia{$io}: mxx{std-io} bmia{$core} -mxx{std-core}@./: cc.module_name = std.core -mxx{std-io}@./: cc.module_name = std.io + mxx{std-core}@./: cc.module_name = std.core + mxx{std-io}@./: cc.module_name = std.io +} -- cgit v1.1