about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/compilers/gcc/common/extra-target-flags.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/gcc/common/extra-target-flags.nix')
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/common/extra-target-flags.nix33
1 files changed, 33 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/compilers/gcc/common/extra-target-flags.nix b/nixpkgs/pkgs/development/compilers/gcc/common/extra-target-flags.nix
new file mode 100644
index 000000000000..0a5a7a1bc1cb
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/gcc/common/extra-target-flags.nix
@@ -0,0 +1,33 @@
+{ stdenv, crossStageStatic, langD ? false, libcCross, threadsCross }:
+
+let
+  inherit (stdenv) lib hostPlatform targetPlatform;
+in
+
+{
+  # For non-cross builds these flags are currently assigned in builder.sh.
+  # It would be good to consolidate the generation of makeFlags
+  # ({C,CXX,LD}FLAGS_FOR_{BUILD,TARGET}, etc...) at some point.
+  EXTRA_FLAGS_FOR_TARGET = let
+      mkFlags = dep: langD: lib.optionals (targetPlatform != hostPlatform && dep != null && !langD) ([
+        "-O2 -idirafter ${lib.getDev dep}${dep.incdir or "/include"}"
+      ] ++ stdenv.lib.optionals (! crossStageStatic) [
+        "-B${lib.getLib dep}${dep.libdir or "/lib"}"
+      ]);
+    in mkFlags libcCross langD
+    ++ lib.optionals (!crossStageStatic) (mkFlags threadsCross langD)
+    ;
+
+  EXTRA_LDFLAGS_FOR_TARGET = let
+      mkFlags = dep: lib.optionals (targetPlatform != hostPlatform && dep != null) ([
+        "-Wl,-L${lib.getLib dep}${dep.libdir or "/lib"}"
+      ] ++ (if crossStageStatic then [
+          "-B${lib.getLib dep}${dep.libdir or "/lib"}"
+        ] else [
+          "-Wl,-rpath,${lib.getLib dep}${dep.libdir or "/lib"}"
+          "-Wl,-rpath-link,${lib.getLib dep}${dep.libdir or "/lib"}"
+      ]));
+    in mkFlags libcCross
+    ++ lib.optionals (!crossStageStatic) (mkFlags threadsCross)
+    ;
+}