diff --git a/source/dub/compilers/buildsettings.d b/source/dub/compilers/buildsettings.d index beebd0f..16de290 100644 --- a/source/dub/compilers/buildsettings.d +++ b/source/dub/compilers/buildsettings.d @@ -277,9 +277,10 @@ deprecationErrors = 1<<19, /// Stop compilation upon usage of deprecated features (-de) property = 1<<20, /// DEPRECATED: Enforce property syntax (-property) profileGC = 1<<21, /// Profile runtime allocations + pic = 1<<22, /// Generate position independent code // for internal usage - _docs = 1<<22, // Write ddoc to docs - _ddox = 1<<23, // Compile docs.json + _docs = 1<<23, // Write ddoc to docs + _ddox = 1<<24 // Compile docs.json } struct BuildOptions { @@ -326,4 +327,5 @@ | BuildOption.noBoundsCheck | BuildOption.profile | BuildOption.ignoreUnknownPragmas | BuildOption.syntaxOnly | BuildOption.warnings | BuildOption.warningsAsErrors | BuildOption.ignoreDeprecations | BuildOption.deprecationWarnings - | BuildOption.deprecationErrors | BuildOption.property | BuildOption.profileGC; + | BuildOption.deprecationErrors | BuildOption.property | BuildOption.profileGC + | BuildOption.pic; diff --git a/source/dub/compilers/dmd.d b/source/dub/compilers/dmd.d index 0295a64..3cbbc3b 100644 --- a/source/dub/compilers/dmd.d +++ b/source/dub/compilers/dmd.d @@ -117,7 +117,7 @@ } version (Posix) { - if (settings.targetType == TargetType.dynamicLibrary) + if (settings.options & BuildOption.pic) settings.addDFlags("-fPIC"); } diff --git a/source/dub/compilers/gdc.d b/source/dub/compilers/gdc.d index 7a20f54..8cae806 100644 --- a/source/dub/compilers/gdc.d +++ b/source/dub/compilers/gdc.d @@ -119,7 +119,7 @@ settings.lflags = null; } - if (settings.targetType == TargetType.dynamicLibrary) + if (settings.options & BuildOption.pic) settings.addDFlags("-fPIC"); assert(fields & BuildSetting.dflags); diff --git a/source/dub/compilers/ldc.d b/source/dub/compilers/ldc.d index 8953e5e..491c86a 100644 --- a/source/dub/compilers/ldc.d +++ b/source/dub/compilers/ldc.d @@ -117,7 +117,7 @@ settings.lflags = null; } - if (settings.targetType == TargetType.dynamicLibrary) + if (settings.options & BuildOption.pic) settings.addDFlags("-relocation-model=pic"); assert(fields & BuildSetting.dflags); diff --git a/source/dub/generators/generator.d b/source/dub/generators/generator.d index 7938cc7..7865d9e 100644 --- a/source/dub/generators/generator.d +++ b/source/dub/generators/generator.d @@ -188,6 +188,10 @@ main_files ~= buildsettings.mainSourceFile; } + // set pic for dynamic library builds. + if (buildsettings.targetType == TargetType.dynamicLibrary) + buildsettings.addOptions(BuildOption.pic); + logDiagnostic("Generate target %s (%s %s %s)", pack.name, buildsettings.targetType, buildsettings.targetPath, buildsettings.targetName); if (is_target) targets[pack.name] = TargetInfo(pack, [pack], configs[pack.name], buildsettings, null);