From 0c37778c2c17fb40407f6432ff009cd7ae5b17b1 Mon Sep 17 00:00:00 2001 From: John Ericson Date: Mon, 17 Jul 2017 23:36:17 -0400 Subject: cc-wrapper: WIP linking hack for mac OS Probably best to override Haskell packages set, or anything else linking a lot of libraries, with this. --- pkgs/test/macos-sierra-shared/default.nix | 43 +++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 pkgs/test/macos-sierra-shared/default.nix (limited to 'pkgs/test/macos-sierra-shared/default.nix') diff --git a/pkgs/test/macos-sierra-shared/default.nix b/pkgs/test/macos-sierra-shared/default.nix new file mode 100644 index 00000000000..8d7b9fc9384 --- /dev/null +++ b/pkgs/test/macos-sierra-shared/default.nix @@ -0,0 +1,43 @@ +{ lib, clangStdenv, clang-sierraHack-stdenv }: + +let + makeBigExe = stdenv: prefix: rec { + + sillyLibs = lib.genList (i: stdenv.mkDerivation rec { + name = "${prefix}-fluff-${toString i}"; + unpackPhase = '' + src=$PWD + echo 'int asdf${toString i}(void) { return ${toString i}; }' > ${name}.c + ''; + buildPhase = '' + $CC -shared ${name}.c -o lib${name}.dylib -Wl,-install_name,$out/lib/lib${name}.dylib + ''; + installPhase = '' + mkdir -p "$out/lib" + mv lib${name}.dylib "$out/lib" + ''; + }) 500 + ; + + finalExe = stdenv.mkDerivation rec { + name = "${prefix}-final-asdf"; + unpackPhase = '' + src=$PWD + echo 'int main(int argc, char **argv) { return argc; }' > main.c; + ''; + buildPhase = '' + $CC main.c ${toString (map (x: "-l${x.name}") sillyLibs)} -o asdf + ''; + buildInputs = sillyLibs; + installPhase = '' + mkdir -p "$out/bin" + mv asdf "$out/bin" + ''; + }; + + }; + +in { + good = makeBigExe clang-sierraHack-stdenv "good"; + bad = makeBigExe clangStdenv "bad"; +} -- cgit 1.4.1 From f671b85fb2c082819ea419ea5b0f5914bc6f26b3 Mon Sep 17 00:00:00 2001 From: John Ericson Date: Wed, 26 Jul 2017 23:28:36 -0400 Subject: cc-wrapper: Beef up sierra tests to actually use functions --- pkgs/test/macos-sierra-shared/default.nix | 34 +++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) (limited to 'pkgs/test/macos-sierra-shared/default.nix') diff --git a/pkgs/test/macos-sierra-shared/default.nix b/pkgs/test/macos-sierra-shared/default.nix index 8d7b9fc9384..ebcf6c62c60 100644 --- a/pkgs/test/macos-sierra-shared/default.nix +++ b/pkgs/test/macos-sierra-shared/default.nix @@ -3,30 +3,52 @@ let makeBigExe = stdenv: prefix: rec { + count = 500; + sillyLibs = lib.genList (i: stdenv.mkDerivation rec { name = "${prefix}-fluff-${toString i}"; unpackPhase = '' src=$PWD - echo 'int asdf${toString i}(void) { return ${toString i}; }' > ${name}.c + cat << 'EOF' > ${name}.c + unsigned int asdf_${toString i}(void) { + return ${toString i}; + } + EOF ''; buildPhase = '' - $CC -shared ${name}.c -o lib${name}.dylib -Wl,-install_name,$out/lib/lib${name}.dylib + $CC -std=c99 -shared ${name}.c -o lib${name}.dylib -Wl,-install_name,$out/lib/lib${name}.dylib ''; installPhase = '' mkdir -p "$out/lib" mv lib${name}.dylib "$out/lib" ''; - }) 500 - ; + }) count; finalExe = stdenv.mkDerivation rec { name = "${prefix}-final-asdf"; unpackPhase = '' src=$PWD - echo 'int main(int argc, char **argv) { return argc; }' > main.c; + cat << 'EOF' > main.cxx + + #include + + ${toString (lib.genList (i: "extern unsigned int asdf_${toString i}(void); ") count)} + + unsigned int (*funs[])(void) = { + ${toString (lib.genList (i: "asdf_${toString i},") count)} + }; + + int main(int argc, char **argv) { + unsigned int i = 0; + for (auto f : funs) { + assert(f() == i++); + } + return 0; + } + EOF ''; buildPhase = '' - $CC main.c ${toString (map (x: "-l${x.name}") sillyLibs)} -o asdf + $CC -std=c++11 main.cxx ${toString (map (x: "-l${x.name}") sillyLibs)} -o asdf ''; buildInputs = sillyLibs; installPhase = '' -- cgit 1.4.1 From 539dcb8e2760ee6cab990ce929a586b050496520 Mon Sep 17 00:00:00 2001 From: John Ericson Date: Thu, 27 Jul 2017 14:15:10 -0400 Subject: cc-wrapper-test: Forgot to `extern "C"` now that main is C++ --- pkgs/test/macos-sierra-shared/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'pkgs/test/macos-sierra-shared/default.nix') diff --git a/pkgs/test/macos-sierra-shared/default.nix b/pkgs/test/macos-sierra-shared/default.nix index ebcf6c62c60..2d52a02affa 100644 --- a/pkgs/test/macos-sierra-shared/default.nix +++ b/pkgs/test/macos-sierra-shared/default.nix @@ -32,7 +32,7 @@ let #include - ${toString (lib.genList (i: "extern unsigned int asdf_${toString i}(void); ") count)} + ${toString (lib.genList (i: "extern \"C\" unsigned int asdf_${toString i}(void); ") count)} unsigned int (*funs[])(void) = { ${toString (lib.genList (i: "asdf_${toString i},") count)} -- cgit 1.4.1 From a9dd855894d426ecc1e32b1b8b72a9db7f8ed913 Mon Sep 17 00:00:00 2001 From: John Ericson Date: Thu, 27 Jul 2017 14:37:24 -0400 Subject: cc-wrapper-test: Don't use assert --- pkgs/test/macos-sierra-shared/default.nix | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'pkgs/test/macos-sierra-shared/default.nix') diff --git a/pkgs/test/macos-sierra-shared/default.nix b/pkgs/test/macos-sierra-shared/default.nix index 2d52a02affa..e96fdb34c05 100644 --- a/pkgs/test/macos-sierra-shared/default.nix +++ b/pkgs/test/macos-sierra-shared/default.nix @@ -30,7 +30,8 @@ let src=$PWD cat << 'EOF' > main.cxx - #include + #include + #include ${toString (lib.genList (i: "extern \"C\" unsigned int asdf_${toString i}(void); ") count)} @@ -39,11 +40,15 @@ let }; int main(int argc, char **argv) { + bool ret; unsigned int i = 0; for (auto f : funs) { - assert(f() == i++); + if (f() != i++) { + std::cerr << "Failed to get expected response from function #" << i << std::endl; + return EXIT_FAILURE; + } } - return 0; + return EXIT_SUCCESS; } EOF ''; -- cgit 1.4.1 From eeed1814dc84121f81fc6214a26f1adffc41581c Mon Sep 17 00:00:00 2001 From: John Ericson Date: Thu, 27 Jul 2017 15:36:51 -0400 Subject: cc-wrapper-test: Use `$CXX` else the C++ std lib won't be on the include path --- pkgs/test/macos-sierra-shared/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'pkgs/test/macos-sierra-shared/default.nix') diff --git a/pkgs/test/macos-sierra-shared/default.nix b/pkgs/test/macos-sierra-shared/default.nix index e96fdb34c05..690d09414fb 100644 --- a/pkgs/test/macos-sierra-shared/default.nix +++ b/pkgs/test/macos-sierra-shared/default.nix @@ -53,7 +53,7 @@ let EOF ''; buildPhase = '' - $CC -std=c++11 main.cxx ${toString (map (x: "-l${x.name}") sillyLibs)} -o asdf + $CXX -std=c++11 main.cxx ${toString (map (x: "-l${x.name}") sillyLibs)} -o asdf ''; buildInputs = sillyLibs; installPhase = '' -- cgit 1.4.1 From 14e05c30e85f0e8bd8f51b49a2ea622df7172ec2 Mon Sep 17 00:00:00 2001 From: John Ericson Date: Mon, 31 Jul 2017 21:02:20 -0400 Subject: macos-sierra-shared: Make live code and add to nascent Darwin channel Also add appropriate `meta.platforms = ...` to each derivation. --- pkgs/test/macos-sierra-shared/default.nix | 27 +++++++++++++++++++++++---- pkgs/top-level/all-packages.nix | 5 +++++ pkgs/top-level/release.nix | 1 + 3 files changed, 29 insertions(+), 4 deletions(-) (limited to 'pkgs/test/macos-sierra-shared/default.nix') diff --git a/pkgs/test/macos-sierra-shared/default.nix b/pkgs/test/macos-sierra-shared/default.nix index 690d09414fb..51e8ae53736 100644 --- a/pkgs/test/macos-sierra-shared/default.nix +++ b/pkgs/test/macos-sierra-shared/default.nix @@ -1,4 +1,4 @@ -{ lib, clangStdenv, clang-sierraHack-stdenv }: +{ lib, clangStdenv, clang-sierraHack-stdenv, stdenvNoCC }: let makeBigExe = stdenv: prefix: rec { @@ -22,6 +22,7 @@ let mkdir -p "$out/lib" mv lib${name}.dylib "$out/lib" ''; + meta.platforms = lib.platforms.darwin; }) count; finalExe = stdenv.mkDerivation rec { @@ -53,18 +54,36 @@ let EOF ''; buildPhase = '' - $CXX -std=c++11 main.cxx ${toString (map (x: "-l${x.name}") sillyLibs)} -o asdf + $CXX -std=c++11 main.cxx ${toString (map (x: "-l${x.name}") sillyLibs)} -o ${prefix}-asdf ''; buildInputs = sillyLibs; installPhase = '' mkdir -p "$out/bin" - mv asdf "$out/bin" + mv ${prefix}-asdf "$out/bin" ''; + meta.platforms = lib.platforms.darwin; }; }; -in { good = makeBigExe clang-sierraHack-stdenv "good"; + bad = makeBigExe clangStdenv "bad"; + +in stdenvNoCC.mkDerivation { + name = "macos-sierra-shared-test"; + buildInputs = [ good.finalExe bad.finalExe ]; + # TODO(@Ericson2314): Be impure or require exact MacOS version of builder? + buildCommand = '' + if bad-asdf + then echo "bad-asdf can succeed on non-sierra, OK" >&2 + else echo "bad-asdf should fail on sierra, OK" >&2 + fi + + # Must succeed on all supported MacOS versions + good-asdf + + touch $out + ''; + meta.platforms = lib.platforms.darwin; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 85573b10321..a1d83e31458 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -19223,4 +19223,9 @@ with pkgs; undaemonize = callPackage ../tools/system/undaemonize {}; houdini = callPackage ../applications/misc/houdini {}; + + # No `recurseIntoAttrs` because there's no need to nix-env these. + tests = { + macOSSierraShared = callPackage ../test/macos-sierra-shared {}; + }; } diff --git a/pkgs/top-level/release.nix b/pkgs/top-level/release.nix index be57b40fca6..0c7c67a0d03 100644 --- a/pkgs/top-level/release.nix +++ b/pkgs/top-level/release.nix @@ -42,6 +42,7 @@ let jobs.python.x86_64-darwin jobs.rustc.x86_64-darwin jobs.go.x86_64-darwin + jobs.tests.macOSSierraShared ]; }; -- cgit 1.4.1