aboutsummaryrefslogtreecommitdiff
path: root/buildfile
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2017-07-19 17:59:44 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2017-07-19 17:59:44 +0200
commitfc94d68a0389e3e9fc4f143e519f527e1770aa8f (patch)
tree3e2a61930ef5748444707674b721f596cbbbaddb /buildfile
parenta0f96b95900108705261881b164d779e2db5b824 (diff)
Make distributable with any compiler
Diffstat (limited to 'buildfile')
-rw-r--r--buildfile82
1 files changed, 49 insertions, 33 deletions
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
+}