Merge pull request #1755 from kinke/ldc
Improve user experience with ldc2, incl. cross-compilation
merged-on-behalf-of: Nicholas Wilson <thewilsonator@users.noreply.github.com>
commit 8ffc09ed6fb9625837161ffbbda2d926f490196c
2 parents 4c97343 + cfb281e
@The Dlang Bot The Dlang Bot authored on 25 Aug 2019
GitHub committed on 25 Aug 2019
Showing 11 changed files
View
2
■■■
source/dub/compilers/compiler.d
BuildPlatform determinePlatform(ref BuildSettings settings, string compiler_binary, string arch_override = null);
 
/// Replaces high level fields with low level fields and converts
/// dmd flags to compiler-specific flags
void prepareBuildSettings(ref BuildSettings settings, BuildSetting supported_fields = BuildSetting.all) const;
void prepareBuildSettings(ref BuildSettings settings, in ref BuildPlatform platform, BuildSetting supported_fields = BuildSetting.all) const;
 
/// Removes any dflags that match one of the BuildOptions values and populates the BuildSettings.options field.
void extractBuildOptions(ref BuildSettings settings) const;
 
View
32
source/dub/compilers/dmd.d
arch_override
);
}
 
void prepareBuildSettings(ref BuildSettings settings, BuildSetting fields = BuildSetting.all) const
void prepareBuildSettings(ref BuildSettings settings, in ref BuildPlatform platform, BuildSetting fields = BuildSetting.all) const
{
enforceBuildRequirements(settings);
 
if (!(fields & BuildSetting.options)) {
settings.stringImportPaths = null;
}
 
if (!(fields & BuildSetting.libs)) {
resolveLibs(settings);
version(Windows) settings.addSourceFiles(settings.libs.map!(l => l~".lib")().array());
else settings.addLFlags(settings.libs.map!(l => "-l"~l)().array());
resolveLibs(settings, platform);
if (platform.platform.canFind("windows"))
settings.addSourceFiles(settings.libs.map!(l => l~".lib")().array());
else
settings.addLFlags(settings.libs.map!(l => "-l"~l)().array());
}
 
if (!(fields & BuildSetting.sourceFiles)) {
settings.addDFlags(settings.sourceFiles);
settings.addDFlags(lflagsToDFlags(settings.lflags));
settings.lflags = null;
}
 
version (Posix) {
if (settings.options & BuildOption.pic)
settings.addDFlags("-fPIC");
}
if (platform.platform.canFind("posix") && (settings.options & BuildOption.pic))
settings.addDFlags("-fPIC");
 
assert(fields & BuildSetting.dflags);
assert(fields & BuildSetting.copyFiles);
}
case TargetType.staticLibrary:
settings.addDFlags("-lib");
break;
case TargetType.dynamicLibrary:
version (Windows) settings.addDFlags("-shared");
else version (OSX) settings.addDFlags("-shared");
else settings.prependDFlags("-shared", "-defaultlib=libphobos2.so");
if (platform.compiler != "dmd" || platform.platform.canFind("windows") || platform.platform.canFind("osx"))
settings.addDFlags("-shared");
else
settings.prependDFlags("-shared", "-defaultlib=libphobos2.so");
break;
case TargetType.object:
settings.addDFlags("-c");
break;
auto tpath = NativePath(settings.targetPath) ~ getTargetFileName(settings, platform);
auto args = ["-of"~tpath.toNativeString()];
args ~= objects;
args ~= settings.sourceFiles;
version(linux) args ~= "-L--no-as-needed"; // avoids linker errors due to libraries being specified in the wrong order by DMD
if (platform.platform.canFind("linux"))
args ~= "-L--no-as-needed"; // avoids linker errors due to libraries being specified in the wrong order by DMD
args ~= lflagsToDFlags(settings.lflags);
args ~= settings.dflags.filter!(f => isLinkerDFlag(f)).array;
 
auto res_file = getTempFile("dub-build", ".lnk");
View
source/dub/compilers/gdc.d
View
source/dub/compilers/ldc.d
View
source/dub/compilers/utils.d
View
source/dub/dub.d
View
source/dub/generators/build.d
View
source/dub/generators/generator.d
View
source/dub/generators/visuald.d
View
source/dub/platform.d
View
source/dub/project.d