diff --git a/source/dub/compilers/compiler.d b/source/dub/compilers/compiler.d index 0f4fb32..7f39bcf 100644 --- a/source/dub/compilers/compiler.d +++ b/source/dub/compilers/compiler.d @@ -156,12 +156,6 @@ // cmdline option does not lead to the same string being found among // `build_platform.architecture`, as it's brittle and doesn't work with triples. if (build_platform.compiler != "ldc") { - // Hack: see #1059 - // When compiling with --arch=x86_mscoff build_platform.architecture is equal to ["x86"] and canFind below is false. - // This hack prevents unnesessary warning 'Failed to apply the selected architecture x86_mscoff. Got ["x86"]'. - // And also makes "x86_mscoff" available as a platform specifier in the package recipe - if (arch_override == "x86_mscoff") - build_platform.architecture ~= arch_override; if (arch_override.length && !build_platform.architecture.canFind(arch_override)) { logWarn(`Failed to apply the selected architecture %s. Got %s.`, arch_override, build_platform.architecture); diff --git a/source/dub/compilers/dmd.d b/source/dub/compilers/dmd.d index 70df37e..9936713 100644 --- a/source/dub/compilers/dmd.d +++ b/source/dub/compilers/dmd.d @@ -120,6 +120,7 @@ } break; case "x86": arch_flags = ["-m32"]; break; + case "x86_omf": arch_flags = ["-m32"]; break; case "x86_64": arch_flags = ["-m64"]; break; case "x86_mscoff": arch_flags = ["-m32mscoff"]; break; } @@ -131,6 +132,53 @@ arch_override ); } + version (Windows) version (DigitalMars) unittest + { + BuildSettings settings; + auto compiler = new DMDCompiler; + auto bp = compiler.determinePlatform(settings, "dmd", "x86"); + assert(bp.platform.canFind("windows")); + assert(bp.architecture.canFind("x86")); + assert(bp.architecture.canFind("x86_omf")); + assert(!bp.architecture.canFind("x86_mscoff")); + settings = BuildSettings.init; + bp = compiler.determinePlatform(settings, "dmd", "x86_omf"); + assert(bp.platform.canFind("windows")); + assert(bp.architecture.canFind("x86")); + assert(bp.architecture.canFind("x86_omf")); + assert(!bp.architecture.canFind("x86_mscoff")); + settings = BuildSettings.init; + bp = compiler.determinePlatform(settings, "dmd", "x86_mscoff"); + assert(bp.platform.canFind("windows")); + assert(bp.architecture.canFind("x86")); + assert(!bp.architecture.canFind("x86_omf")); + assert(bp.architecture.canFind("x86_mscoff")); + settings = BuildSettings.init; + bp = compiler.determinePlatform(settings, "dmd", "x86_64"); + assert(bp.platform.canFind("windows")); + assert(bp.architecture.canFind("x86_64")); + assert(!bp.architecture.canFind("x86")); + assert(!bp.architecture.canFind("x86_omf")); + assert(!bp.architecture.canFind("x86_mscoff")); + settings = BuildSettings.init; + bp = compiler.determinePlatform(settings, "dmd", ""); + if (!isWow64.isNull && !isWow64.get) assert(bp.architecture.canFind("x86")); + if (!isWow64.isNull && !isWow64.get) assert(bp.architecture.canFind("x86_mscoff")); + if (!isWow64.isNull && !isWow64.get) assert(!bp.architecture.canFind("x86_omf")); + if (!isWow64.isNull && isWow64.get) assert(bp.architecture.canFind("x86_64")); + } + + version (LDC) unittest { + BuildSettings settings; + auto compiler = new DMDCompiler; + auto bp = compiler.determinePlatform(settings, "ldmd2", "x86"); + assert(bp.architecture.canFind("x86")); + assert(!bp.architecture.canFind("x86_omf")); + bp = compiler.determinePlatform(settings, "ldmd2", ""); + version (X86) assert(bp.architecture.canFind("x86")); + version (X86_64) assert(bp.architecture.canFind("x86_64")); + assert(!bp.architecture.canFind("x86_omf")); + } void prepareBuildSettings(ref BuildSettings settings, in ref BuildPlatform platform, BuildSetting fields = BuildSetting.all) const { diff --git a/source/dub/platform.d b/source/dub/platform.d index d908438..39e5557 100644 --- a/source/dub/platform.d +++ b/source/dub/platform.d @@ -54,6 +54,14 @@ enum string archCheck = q{ string[] ret; version(X86) ret ~= "x86"; + // Hack: see #1535 + // Makes "x86_omf" available as a platform specifier in the package recipe + version(X86) version(CRuntime_DigitalMars) ret ~= "x86_omf"; + // Hack: see #1059 + // When compiling with --arch=x86_mscoff build_platform.architecture is equal to ["x86"] and canFind below is false. + // This hack prevents unnesessary warning 'Failed to apply the selected architecture x86_mscoff. Got ["x86"]'. + // And also makes "x86_mscoff" available as a platform specifier in the package recipe + version(X86) version(CRuntime_Microsoft) ret ~= "x86_mscoff"; version(X86_64) ret ~= "x86_64"; version(ARM) ret ~= "arm"; version(AArch64) ret ~= "aarch64";