Overriding platforms
In the c language the notion of a platform is the same as the notion of a platform in nix with the addition of toolset. In other words linux+clang and linux+gcc are different platforms.
Platforms in the c language controls which targets components generate
when using the mk*
functions.
For example if there is a platform definition for windows
a
component created with for example mkLibrary
will have a windows
target.
Build Systems
Since C and C++ have many different build systems without any clear standard, nedryglot makes no assumptions about which one is used.
Adding support for a custom build system would look something like the factory example.
Examples
Adding a platform definition
base.languages.c.overridePlatforms
(_platforms: {
# This will be accessible as <component>.riscv
riscv = base.languages.c.mkPlatform {
name = "RISC-V";
pkgs = pkgsCross.riscv64;
platformOverrides = attrs {
# This will ensure all derivations created with this platform will
# have the hello example as dependency.
buildInputs = attrs.buildInputs or [] ++ [ pkgsCross.riscv64.hello ];
};
};
linux-clang = base.languages.c.mkPlatform {
name = "Linux-Clang";
inherit pkgs;
stdenv = pkgs.clangStdenv;
# This will be accessible as <component>.clang
output = "clang";
};
})
}
Changing an existing platform definition
Changes the target name by adding the prefix mega.
base.languages.c.overridePlatforms
(builtins.mapAttrs (
platformName: platform:
platform.override {
output = "mega-${platformName}";
}
))
Changing the platforms factory function (mkDerivation
)
In this example we change the default doxygenOutputDir
. The
derivation is modified to add the prefix "sune" to all derivation
names, also adds an extra buildInput.
base.languages.c.overridePlatforms
(builtins.mapAttrs (
_platformName: platform:
platform.overrideFactory {
overrideAttrs = attrs: {
# All derivations will have the name sune
name = "sune-${attrs.name}";
buildInputs = [ platform.pkgs.tbb ] ++ attrs.buildInputs or [];
};
doxygenOutputDir = "special/docs/folder";
}
))