{ stdenv, writeText, which, strace }: let hello_c = writeText "hello.c" '' #include #include #include int main() { printf("Hello world!\n"); return 0; } ''; shuffle_c = writeText "shuffle.c" '' #include typedef int v4si __attribute__ ((vector_size (16))); int main(void) { v4si a = {1,2,3,4}; v4si b = {5,6,7,8}; v4si mask1 = {0,1,1,3}; v4si mask2 = {0,4,2,5}; v4si res; #if defined(__GNUC__) && (__GNUC__ >= 7) res = __builtin_shuffle (a, mask1); /* res is {1,2,2,4} */ res = __builtin_shuffle (a, b, mask2); /* res is {1,5,3,6} */ printf("%d %d %d %d\n", res[0], res[1], res[2], res[3]); #endif return 0; } ''; in stdenv.mkDerivation rec { version = "0.0.1"; name = "hello-c"; buildInputs = [ stdenv which strace ]; src = hello_c; dontUnpack = true; dontConfigure = true; NIX_DEBUG = 0; buildPhase = '' set -x echo CC=$CC which $CC $CC -v cp ${hello_c} hello.c $CC -v hello.c -o hello ./hello # Only gcc #cp ${shuffle_c} shuffle.c #$CC shuffle.c -o shuffle #./shuffle set +x ''; installPhase = '' touch $out ''; }