mirror of
https://github.com/NixOS/mobile-nixos.git
synced 2024-12-14 18:21:41 +03:00
67 lines
1.7 KiB
Nix
67 lines
1.7 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
let
|
|
cfg = config.mobile.system;
|
|
inherit (config.nixpkgs) localSystem;
|
|
|
|
# Mapping from system types to config types
|
|
# A simplified view of <nixpkgs/lib/systems/examples.nix>
|
|
config_types = {
|
|
aarch64-linux = "aarch64-unknown-linux-gnu";
|
|
armv7l-linux = "armv7l-unknown-linux-gnueabihf";
|
|
x86_64-linux = "x86_64-unknown-linux-gnu";
|
|
};
|
|
|
|
# Derived from config_types
|
|
target_types = lib.attrNames config_types;
|
|
|
|
# Builds the expected "platform" set for cross-compilation from the given
|
|
# system name.
|
|
selectPlatform = system: {
|
|
inherit system;
|
|
platform = lib.systems.platforms.selectBySystem system;
|
|
config = config_types.${system};
|
|
};
|
|
|
|
# The platform selected by the configuration
|
|
selectedPlatform = selectPlatform cfg.system;
|
|
in
|
|
{
|
|
options.mobile = {
|
|
system.system = mkOption {
|
|
type = types.enum target_types;
|
|
description = ''
|
|
Defines the kind of target architecture system the device is.
|
|
|
|
This will automagically setup cross-compilation where possible.
|
|
'';
|
|
};
|
|
};
|
|
|
|
config = {
|
|
assertions = [
|
|
{
|
|
assertion = pkgs.targetPlatform.system == cfg.system;
|
|
message = "pkgs.targetPlatform.system expected to be `${cfg.system}`, is `${pkgs.targetPlatform.system}`";
|
|
}
|
|
];
|
|
|
|
nixpkgs.crossSystem = lib.mkIf
|
|
(
|
|
let
|
|
result = selectedPlatform.system != localSystem.system;
|
|
in
|
|
builtins.trace
|
|
"Building with crossSystem?: ${selectedPlatform.system} != ${localSystem.system} → ${if result then "we are" else "we're not"}."
|
|
result
|
|
)
|
|
(
|
|
builtins.trace
|
|
" crossSystem: config: ${selectedPlatform.config}"
|
|
selectedPlatform
|
|
)
|
|
;
|
|
};
|
|
}
|