diff --git a/default.nix b/default.nix index dd3acef7..d7484899 100644 --- a/default.nix +++ b/default.nix @@ -84,7 +84,10 @@ let # xo-userenv = self.callPackage pkgs/xo-userenv.nix {}; -# xo-userenv-slow = self.callPackage pkgs/xo-userenv-slow.nix {}; + xo-userenv-slow = self.callPackage pkgs/xo-userenv-slow.nix { stdenv = customStdenv; + #clang = llvmPackages.clang; + llvm = llvmPackages.llvm; + }; }; in diff --git a/pkgs/xo-userenv-slow.nix b/pkgs/xo-userenv-slow.nix new file mode 100644 index 00000000..bf4b1435 --- /dev/null +++ b/pkgs/xo-userenv-slow.nix @@ -0,0 +1,145 @@ + +# builds environment with all xo packages, +# using combined output directory for each. +# +# parallels github actions build on stock ubuntu, +# except that we use nixpkgs for toolchain +# +# For xo development, probably prefer xo-userenv.nix instead of this xo-userenv-slow.nix: +# 1. xo-userenv.nix allows parallel build +# 2. xo-userenv.nix only rebuilds xo packages that have changed + +{ + # nixpkgs dependencies + stdenv, + cmake, + catch2, + eigen, + libwebsockets, + jsoncpp, + doxygen, + sphinx, + python3Packages, + llvm, + + # xo dependencies + xo-cmake, xo-indentlog, xo-subsys, xo-refcnt, xo-randomgen, xo-ordinaltree, xo-flatstring, xo-reflectutil, + xo-ratio, xo-pyutil, + xo-reflect, xo-pyreflect, + xo-unit, xo-pyunit, + xo-printjson, xo-pyprintjson, xo-callback, xo-webutil, xo-pywebutil, xo-reactor, xo-pyreactor, xo-simulator, + xo-pysimulator, xo-distribution, xo-pydistribution, xo-process, xo-pyprocess, xo-statistics, xo-kalmanfilter, + xo-pykalmanfilter, xo-websock, xo-pywebsock, xo-tokenizer, xo-expression, xo-pyexpression, xo-reader, + xo-jit, xo-pyjit, + + # other args + + # someconfigurationoption ? false +} : + +stdenv.mkDerivation (finalattrs: + { + name = "xo-userenv"; + + xo_cmake_src = xo-cmake.src; + xo_indentlog_src = xo-indentlog.src; + xo_subsys_src = xo-subsys.src; + xo_refcnt_src = xo-refcnt.src; + xo_randomgen_src = xo-randomgen.src; + xo_ordinaltree_src = xo-ordinaltree.src; + xo_flatstring_src = xo-flatstring.src; + xo_reflectutil_src = xo-reflectutil.src; + xo_ratio_src = xo-ratio.src; + xo_pyutil_src = xo-pyutil.src; + xo_reflect_src = xo-reflect.src; + xo_pyreflect_src = xo-pyreflect.src; + xo_unit_src = xo-unit.src; + xo_pyunit_src = xo-pyunit.src; + xo_printjson_src = xo-printjson.src; + xo_pyprintjson_src = xo-pyprintjson.src; + xo_callback_src = xo-callback.src; + xo_webutil_src = xo-webutil.src; + xo_pywebutil_src = xo-pywebutil.src; + xo_reactor_src = xo-reactor.src; + xo_pyreactor_src = xo-pyreactor.src; + xo_simulator_src = xo-simulator.src; + xo_pysimulator_src = xo-pysimulator.src; + xo_distribution_src = xo-distribution.src; + xo_pydistribution_src = xo-pydistribution.src; + xo_process_src = xo-process.src; + xo_pyprocess_src = xo-pyprocess.src; + xo_statistics_src = xo-statistics.src; + xo_kalmanfilter_src = xo-kalmanfilter.src; + xo_pykalmanfilter_src = xo-pykalmanfilter.src; + xo_websock_src = xo-websock.src; + xo_pywebsock_src = xo-pywebsock.src; + xo_tokenizer_src = xo-tokenizer.src; + xo_expression_src = xo-expression.src; + xo_pyexpression_src = xo-pyexpression.src; + xo_reader_src = xo-reader.src; + xo_jit_src = xo-jit.src; + xo_pyjit_src = xo-pyjit.src; + + # instead of this probably want to override phases. + buildCommand = '' + + mkdir $out + PREFIX=$out + PATH=$out/bin:$PATH + + mkdir -p build/xo-cmake + + cmake -DCMAKE_INSTALL_PREFIX=$out -B build/xo-cmake -S $xo_cmake_src + cmake --build build/xo-cmake + cmake --install build/xo-cmake + + # xo-build doesn't support the pattern here, maybe fix it + xo-build --configure -S $xo_indentlog_src -B build/xo-indentlog --build --install xo-indentlog + xo-build --configure -S $xo_subsys_src -B build/xo-subsys --build --install xo-subsys + xo-build --configure -S $xo_refcnt_src -B build/xo-refcnt --build --install xo-refcnt + xo-build --configure -S $xo_randomgen_src -B build/xo-randomgen --build --install xo-randomgen + xo-build --configure -S $xo_ordinaltree_src -B build/xo-ordinaltree --build --install xo-randomgen + xo-build --configure -S $xo_flatstring_src -B build/xo-flatstring --build --install xo-flatstring + xo-build --configure -S $xo_reflectutil_src -B build/xo-reflectutil --build --install xo-reflectutil + xo-build --configure -S $xo_ratio_src -B build/xo-ratio --build --install xo-ratio + xo-build --configure -S $xo_pyutil_src -B build/xo-pyutil --build --install xo-pyutil + xo-build --configure -S $xo_reflect_src -B build/xo-reflect --build --install xo-reflect + xo-build --configure -S $xo_pyreflect_src -B build/xo-pyreflect --build --install xo-pyreflect + xo-build --configure -S $xo_unit_src -B build/xo-unit --build --install xo-unit + xo-build --configure -S $xo_pyunit_src -B build/xo-pyunit --build --install xo-pyunit + xo-build --configure -S $xo_printjson_src -B build/xo-printjson --build --install xo-printjson + xo-build --configure -S $xo_pyprintjson_src -B build/xo-pyprintjson --build --install xo-pyprintjson + xo-build --configure -S $xo_callback_src -B build/xo-callback --build --install xo-callback + xo-build --configure -S $xo_webutil_src -B build/xo-webutil --build --install xo-webutil + xo-build --configure -S $xo_pywebutil_src -B build/xo-pywebutil --build --install xo-pywebutil + xo-build --configure -S $xo_reactor_src -B build/xo-reactor --build --install xo-reactor + xo-build --configure -S $xo_pyreactor_src -B build/xo-pyreactor --build --install xo-pyreactor + xo-build --configure -S $xo_simulator_src -B build/xo-simulator --build --install xo-simulator + xo-build --configure -S $xo_pysimulator_src -B build/xo-pysimulator --build --install xo-pysimulator + xo-build --configure -S $xo_distribution_src -B build/xo-distribution --build --install xo-distribution + xo-build --configure -S $xo_pydistribution_src -B build/xo-pydistribution --build --install xo-pydistribution + xo-build --configure -S $xo_process_src -B build/xo-process --build --install xo-process + xo-build --configure -S $xo_pyprocess_src -B build/xo-pyprocess --build --install xo-pyprocess + xo-build --configure -S $xo_statistics_src -B build/xo-statistics --build --install xo-statistics + xo-build --configure -S $xo_kalmanfilter_src -B build/xo-kalmanfilter --build --install xo-kalmanfilter + xo-build --configure -S $xo_pykalmanfilter_src -B build/xo-pykalmanfilter --build --install xo-pykalmanfilter + xo-build --configure -S $xo_websock_src -B build/xo-websock --build --install xo-websock + xo-build --configure -S $xo_pywebsock_src -B build/xo-pywebsock --build --install xo-pywebsock + xo-build --configure -S $xo_tokenizer_src -B build/xo-tokenizer --build --install xo-tokenizer + xo-build --configure -S $xo_expression_src -B build/xo-expression --build --install xo-expression + xo-build --configure -S $xo_pyexpression_src -B build/xo-pyexpression --build --install xo-pyexpression + xo-build --configure -S $xo_reader_src -B build/xo-reader --build --install xo-reader + xo-build --configure -S $xo_jit_src -B build/xo-jit --build --install xo-jit + xo-build --configure -S $xo_pyjit_src -B build/xo-pyjit --build --install xo-pyjit + +''; + + nativeBuildInputs = [ cmake catch2 eigen libwebsockets jsoncpp doxygen sphinx + llvm.dev + python3Packages.pybind11 + python3Packages.sphinx-rtd-theme + ]; + + # runScript = ...; + # profile = ...; + })