diff options
Diffstat (limited to 'mbld')
-rw-r--r-- | mbld/config+plan9-x64.myr | 1 | ||||
-rw-r--r-- | mbld/deps.myr | 13 | ||||
-rw-r--r-- | mbld/libs.myr | 16 |
3 files changed, 21 insertions, 9 deletions
diff --git a/mbld/config+plan9-x64.myr b/mbld/config+plan9-x64.myr index b13fedc..e246d4d 100644 --- a/mbld/config+plan9-x64.myr +++ b/mbld/config+plan9-x64.myr @@ -4,6 +4,7 @@ pkg config = const Sys = "Plan9" const Objsuffix = ".6" const Linkcmd = ["6l", "-l"] + const Dlflags : byte[:][:] = [][:] const Arcmd = ["ar", "u"] const Ascmd = ["6a"] const Directlib = true diff --git a/mbld/deps.myr b/mbld/deps.myr index ab90890..cae46b1 100644 --- a/mbld/deps.myr +++ b/mbld/deps.myr @@ -427,6 +427,8 @@ const arcmd = {b, n, mt, ar } const linkcmd = {b, n, mt, bin, libs, dynlibs, istest + var dynlink + for c : config.Linkcmd std.slpush(&n.cmd, std.sldup(c)) ;; @@ -451,18 +453,21 @@ const linkcmd = {b, n, mt, bin, libs, dynlibs, istest std.slpush(&n.cmd, std.sldup(o)) ;; - addlibs(b, &n.cmd, libs, mt.incpath) + dynlink = addlibs(b, &n.cmd, libs, mt.incpath) || mt.isdyn for l : dynlibs std.slpush(&n.cmd, std.fmt("-l{}", l)) ;; + if dynlink + for f : config.Dlflags + std.slpush(&n.cmd, std.sldup(f)) + ;; + ;; + /* OSX warns if we don't add a version */ if std.sleq(opt_sys, "osx") std.slpush(&n.cmd, std.sldup("-macosx_version_min")) std.slpush(&n.cmd, std.sldup("10.6")) - elif std.sleq(opt_sys, "linux") && mt.isdyn - std.slpush(&n.cmd, std.sldup("-dynamic-linker")) - std.slpush(&n.cmd, std.sldup("/lib64/ld-linux-x86-64.so.2")) ;; } diff --git a/mbld/libs.myr b/mbld/libs.myr index b29becb..9652c15 100644 --- a/mbld/libs.myr +++ b/mbld/libs.myr @@ -9,7 +9,7 @@ pkg bld = const addlibs : (b : build#, \ sl : byte[:][:]#, \ libs : byte[:][:], \ - incs : byte[:][:] -> void) + incs : byte[:][:] -> bool) const builtlib : (b : build#, \ lt : myrtarg#, \ @@ -117,6 +117,7 @@ const openlib = {lib, targ, incs const addlibs = {b, sl, libs, incs var added, diradded, looped + var dynlink var lo added = std.mkht() @@ -124,8 +125,9 @@ const addlibs = {b, sl, libs, incs diradded = std.mkht() lo = sl#.len + dynlink = false for l : libs - addlib(b, sl, l, added, diradded, looped) + dynlink = addlib(b, sl, l, added, diradded, looped, dynlink) ;; for var i = 0; i < sl#[lo:].len/2; i++ std.swap(&sl#[lo+i], &sl#[sl#.len - i - 1]) @@ -134,9 +136,11 @@ const addlibs = {b, sl, libs, incs std.htfree(diradded) std.htfree(looped) std.htfree(added) + + -> dynlink } -const addlib = {b, sl, lib, added, diradded, looped +const addlib = {b, sl, lib, added, diradded, looped, dl var ar if std.hthas(looped, lib) @@ -146,12 +150,13 @@ const addlib = {b, sl, lib, added, diradded, looped match std.htget(b.libs, lib) | `std.None: std.slpush(sl, std.fmt("-l{}", lib)) + dl = true | `std.Some ld: for l : ld.dep - addlib(b, sl, l, added, diradded, looped) + dl = addlib(b, sl, l, added, diradded, looped, dl) ;; for l : ld.dyndep - addlib(b, sl, l, added, diradded, looped) + dl = addlib(b, sl, l, added, diradded, looped, dl) ;; if !std.hthas(added, lib) if config.Directlib @@ -169,6 +174,7 @@ const addlib = {b, sl, lib, added, diradded, looped ;; ;; std.htdel(looped, lib) + -> dl } |