Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions kernels/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
iPythonWith = callPackage ./ipython;
iRubyWith = callPackage ./iruby;
iNixKernel = callPackage ./inix;
iJuliaWith = callPackage ./ijulia;
cKernelWith = callPackage ./ckernel;
ansibleKernel = callPackage ./ansible-kernel;
xeusCling = callPackage ./xeus-cling;
Expand Down
49 changes: 49 additions & 0 deletions kernels/ijulia/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# JupyterWith IJulia

the nixpkgs doesn't have a package's manager for Julia lang.
So, run command `Install_iJulia` to install `Ijulia` and initialize JULIA_PKGDIR (in your first time of running environment) before you launch `Jupyter notbook`.

- Julia CUDA run Command `/result/bin/Install_Julia_CUDA` to install CUDA environment

the nixpkgs doesn't have an julia package manager support.
So, run command `Install_iJulia` to install `Ijulia` before you launch `Jupyter notbook`.

```nix
## for buildEnv
paths = [
iJulia.InstalliJulia
julia_wrapped
iJulia.Install_JuliaCUDA
];
##or nix-shell BuildInputs
buildInputs = [ iJulia.InstalliJulia julia_wrapped iJulia.Install_JuliaCUDA ]
```

The IJulia kernel can be used as follows:

```nix
{
currentDir = builtins.getEnv "PWD";
iJulia = jupyter.kernels.iJuliaWith {
name = "julia";
##JULIA_PKGDIR and JULIA_DEPOT_PATH which are your realpath(or in current project path).
# EXAMPLE: or echo $(realpath ./.julia_pkgs)
directory = currentDir + "/.julia_pkgs";
##LD_LIBRARY_PATH that is dependence of LIBRARY's ennvironemt.(For Julia packages)
extraPackages = p: with p;[
# GZip.jl # Required by DataFrames.jl
gzip
zlib
# HDF5.jl
hdf5
# Cairo.jl
cairo
];
# enabke multi-threads
NUM_THREADS = 8;
## enable CUDA support (for Flux.jl package)
cuda = true;
cudaVersion = pkgs.cudatoolkit_10_2;
nvidiaVersion = pkgs.linuxPackages.nvidia_x11;
};
```
120 changes: 120 additions & 0 deletions kernels/ijulia/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
{ pkgs
, stdenv
, name ? "nixpkgs"
, packages ? (_:[])
, extraPackages ? (_:[])
, writeScriptBin
, runCommand
, directory
, NUM_THREADS ? 1
, cuda ? false
, cudaVersion ? ""
, nvidiaVersion ? ""
}:

let
extraLibs = with pkgs;[
mbedtls
zeromq3
# ImageMagick.jl
imagemagickBig
# GZip.jl # Required by DataFrames.jl
gzip
zlib
] ++ (extraPackages pkgs) ++ pkgs.lib.optionals cuda
[
cudaVersion
# Flux.jl
libGLU
xorg.libXi xorg.libXmu freeglut
xorg.libXext xorg.libX11 xorg.libXv xorg.libXrandr zlib
ncurses5
stdenv.cc
binutils
git gitRepo gnupg autoconf curl
procps gnumake utillinux m4 gperf unzip
];

julia_wrapped = pkgs.stdenv.mkDerivation rec {
name = "julia_wrapped";
buildInputs = [ pkgs.julia_13 ] ++ extraLibs;
nativeBuildInputs = with pkgs; [ makeWrapper cacert git pkgconfig which ];
phases = [ "installPhase" ];
installPhase = ''
export LD_LIBRARY_PATH=${pkgs.lib.makeLibraryPath extraLibs}
${if cuda then ''
makeWrapper ${pkgs.julia_13}/bin/julia $out/bin/julia_wrapped \
--set JULIA_DEPOT_PATH ${directory} \
--prefix LD_LIBRARY_PATH : "$LD_LIBRARY_PATH" \
--prefix LD_LIBRARY_PATH ":" "${nvidiaVersion}/lib" \
--set JULIA_PKGDIR ${directory} \
--set JULIA_NUM_THREADS ${toString NUM_THREADS} \
--set CUDA_PATH "${cudaVersion}"
''
else ''
makeWrapper ${pkgs.julia_13}/bin/julia $out/bin/julia_wrapped \
--set JULIA_DEPOT_PATH ${directory} \
--prefix LD_LIBRARY_PATH : "$LD_LIBRARY_PATH" \
--set JULIA_NUM_THREADS ${toString NUM_THREADS} \
--set JULIA_PKGDIR ${directory}
''
}
'';
};

kernelFile = {
display_name = "Julia - ${name}";
language = "julia";
argv = [
"${julia_wrapped}/bin/julia_wrapped"
"-i"
"--startup-file=yes"
"--color=yes"
"${directory}/packages/IJulia/DrVMH/src/kernel.jl"
"{connection_file}"
];

logo64 = "logo-64x64.png";

env = {
LD_LIBRARY_PATH = "${pkgs.lib.makeLibraryPath extraLibs}";
JULIA_DEPOT_PATH = "${directory}";
JULIA_PKGDIR = "${directory}";
JULIA_NUM_THREADS= "${toString NUM_THREADS}";
};
};

Install_JuliaCUDA = writeScriptBin "Install_Julia_CUDA" ''
${julia_wrapped}/bin/julia_wrapped -e 'using Pkg; Pkg.add(["CUDAdrv", "CUDAnative", "CuArrays"]); using CUDAdrv, CUDAnative, CuArrays' \
&& ${julia_wrapped}/bin/julia_wrapped -e 'using Pkg; Pkg.test("CUDAnative");'
get_nvdisasm=$(dirname ${directory}/artifacts/*/bin/nvdisasm)
rm -rf $get_nvdisasm/nvdisasm
ln -s ${cudaVersion}/bin/nvdisasm $get_nvdisasm/nvdisasm
'';

InstalliJulia = writeScriptBin "Install_iJulia" ''
if [ ! -d "${directory}/registries/Genera/" ]; then
mkdir -p ${directory}/registries/General && git clone https://github.com/JuliaRegistries/General.git --depth=1 ${directory}/registries/General
fi
${julia_wrapped}/bin/julia_wrapped -e 'using Pkg; Pkg.add("IJulia")'
'';

JuliaKernel = stdenv.mkDerivation {
name = "Julia-${name}";
src = ./julia.png;
phases = "installPhase";
installPhase = ''
mkdir -p $out/kernels/julia_${name}
cp $src $out/kernels/julia_${name}/logo-64x64.png
echo '${builtins.toJSON kernelFile}' > $out/kernels/julia_${name}/kernel.json
'';
};

in
{
spec = JuliaKernel;
runtimePackages = [
julia_wrapped
];
inherit InstalliJulia julia_wrapped Install_JuliaCUDA;
}
Binary file added kernels/ijulia/julia.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.