Size: a a a

2020 April 27

S

Soul in NixOS
теперь разбираюсь почему gcc не хочет понимать -mwindows
источник

АБ

Александр Бантьев in NixOS
Soul
теперь разбираюсь почему gcc не хочет понимать -mwindows
Ты expression-то покажи
источник

S

Soul in NixOS
Александр Бантьев
Ты expression-то покажи
>[me@treeroot:~/rawr]$ cat it.nix 
{
 nixpkgs ? import <nixpkgs> {},
 pkgs ? nixpkgs.pkgsCross.mingwW64,
 stdenv ? pkgs.stdenv
}:
let
 mysdl = pkgs.callPackage ./sdl2.nix {};
in
stdenv.mkDerivation rec {
 name ="it";

 nativeBuildInputs = [
   nixpkgs.meson
   nixpkgs.ninja
   nixpkgs.pkg-config ];
 buildInputs = [
   mysdl ];

 src = ./.;
}
>[me@treeroot:~/rawr]$ cat sdl2.nix
{
 nixpkgs ? import <nixpkgs> {} ,
 pkgs ? nixpkgs.pkgsCross.mingwW64,
 stdenv ? pkgs.stdenv,
 fetchurl ? pkgs.fetchurl,
} :
stdenv.mkDerivation rec {
 pname = "SDL2";
 version = "2.0.12";
 src = fetchurl {
   url = "https://www.libsdl.org/release/${pname}-${version}.tar.gz";
   sha256 = "0qy8wbqvfkb5ps8kxgaaf2zzpkjqbsw712hlp74znbn0jpv6i4il";
 };

 buildInputs = [ ];

 meta = with stdenv.lib; {
   description = "SDL2 for windows";
 };
}
>[me@treeroot:~/rawr]$ cat meson.build
project('itd', 'c')
sdldep = dependency('sdl2')
executable('itd', 'main.c', dependencies: sdldep, install : true)
>[me@treeroot:~/rawr]$ cat
it.nix       main.c       meson.build  result/      sdl2.nix    
>[me@treeroot:~/rawr]$ cat main.c
#include <stdio.h>
#include <stdlib.h>

int main() {
 printf("He\n");
 return 0;
}
источник

S

Soul in NixOS
и билд лог с ошибкой:
источник

S

Soul in NixOS
>[me@treeroot:~/rawr]$ nix build -f it.nix --show-trace --verbose
building '/nix/store/sx5rs338mab2ncw9sl83ijzy2w80lm94-it-x86_64-w64-mingw32.drv'...
builder for '/nix/store/sx5rs338mab2ncw9sl83ijzy2w80lm94-it-x86_64-w64-mingw32.drv' failed with exit code 1; last 10 log lines:
 Build targets in project: 1
 Found ninja-1.9.0 at /nix/store/32s826g956kqlglvnmx7d1vkyfwj69a4-ninja-1.9.0/bin/ninja
 meson: enabled parallel building
 building
 build flags: -j8 -l8
 [2/2] Linking target itd.d@exe/main.c.o'.
 FAILED: itd
 /nix/store/1v0410l20p343l6cvpijz8bi4if2ysh6-gcc-wrapper-9.2.0/bin/cc  -o itd 'itd@exe/main.c.o' -Wl,--as-needed -Wl,--no-undefined -Wl,--start-group /nix/store/vp7rg0im453lrz6m8gj9nf50k724wq2z-SDL2-2.0.12-x86_64-w64-mingw32/lib/libSDL2main.a -mwindows -L/nix/store/vp7rg0im453lrz6m8gj9nf50k724wq2z-SDL2-2.0.12-x86_64-w64-mingw32/lib -lmingw32 -lSDL2 -Wl,--end-group
 gcc: error: unrecognized command line option '-mwindows'
 ninja: build stopped: subcommand failed.
источник

АБ

Александр Бантьев in NixOS
Хмм
источник

АБ

Александр Бантьев in NixOS
Почему-то gcc-wrapper-9.2.0/bin/cc не похож на кросс-компилятор
источник

АБ

Александр Бантьев in NixOS
а
источник

S

Soul in NixOS
делал туда nix-shell, линуксового компилятора там не нашел
источник

S

Soul in NixOS
только всякие x86_64-mingw32-gcc
источник

АБ

Александр Бантьев in NixOS
Попробуй вот так переписатьdefault.nix:

let 
 pkgs = (import <nixpkgs> {}).pkgsCross.mingwW64;
in pkgs.callPackage ./it.nix { sdl2 = pkgs.callPackage ./sdl2.nix { }; }


it.nix:

{ stdenv, meson, ninja, pkg-config, sdl2 }:
stdenv.mkDerivation rec {
 name ="it";

 nativeBuildInputs = [
   meson
   ninja
   pkg-config ];
 buildInputs = [
   sdl2 ];

 src = ./.;
}

sdl2.nix -- как раньше
источник

АБ

Александр Бантьев in NixOS
Soul
делал туда nix-shell, линуксового компилятора там не нашел
Зато meson его отлично нашел
источник

АБ

Александр Бантьев in NixOS
Я думаю, это проблемы из-за за отсутствия сплайсинга, переписал с ним ^ и должно помочь
источник

S

Soul in NixOS
попробую, но meson из pkgsCross.mingwW64 не собирался у меня
источник

АБ

Александр Бантьев in NixOS
Soul
попробую, но meson из pkgsCross.mingwW64 не собирался у меня
Хех
источник

АБ

Александр Бантьев in NixOS
Так он тебе и не нужен будет
источник

АБ

Александр Бантьев in NixOS
Ты же его передаешь в nativeBuildInputs
источник

АБ

Александр Бантьев in NixOS
И сплайсинг корректно выберет тот meson, который собран под linux но знает про gcc для винды
источник

S

Soul in NixOS
что вообще такое сплайсинг?
источник

S

Soul in NixOS
звучит заманчиво но непонятно, как магия
источник