#!/bin/bash # UnitCommitment.jl: Optimization Package for Security-Constrained Unit Commitment # Copyright (C) 2020-2021, UChicago Argonne, LLC. All rights reserved. # Released under the modified BSD license. See COPYING.md for more details. if [ ! -e Project.toml ]; then echo "juliaw: Project.toml not found" exit 1 fi if [ ! -e Manifest.toml ]; then julia --project=. -e 'using Pkg; Pkg.instantiate()' || exit 1 fi if [ ! -e build/sysimage.so -o Project.toml -nt build/sysimage.so ]; then echo "juliaw: rebuilding system image..." # Generate temporary project folder rm -rf $HOME/.juliaw mkdir -p $HOME/.juliaw/src cp Project.toml Manifest.toml $HOME/.juliaw NAME=$(julia -e 'using TOML; toml = TOML.parsefile("Project.toml"); "name" in keys(toml) && print(toml["name"])') if [ ! -z $NAME ]; then cat > $HOME/.juliaw/src/$NAME.jl << EOF module $NAME end EOF fi # Add PackageCompiler dependencies to temporary project julia --project=$HOME/.juliaw -e 'using Pkg; Pkg.add(["PackageCompiler", "TOML", "Logging"])' # Generate system image scripts cat > $HOME/.juliaw/sysimage.jl << EOF using PackageCompiler using TOML using Logging Logging.disable_logging(Logging.Info) mkpath("$PWD/build") println("juliaw: generating precompilation statements...") run(\`julia --project="$PWD" --trace-compile="$PWD"/build/precompile.jl \$(ARGS)\`) println("juliaw: finding dependencies...") project = TOML.parsefile("Project.toml") manifest = TOML.parsefile("Manifest.toml") deps = Symbol[] for dep in keys(project["deps"]) if dep in keys(manifest) # Up to Julia 1.6 dep_entry = manifest[dep][1] else # Julia 1.7+ dep_entry = manifest["deps"][dep][1] end if "path" in keys(dep_entry) println(" - \$(dep) [skip]") else println(" - \$(dep)") push!(deps, Symbol(dep)) end end println("juliaw: building system image...") create_sysimage( deps, precompile_statements_file = "$PWD/build/precompile.jl", sysimage_path = "$PWD/build/sysimage.so", ) EOF julia --project=$HOME/.juliaw $HOME/.juliaw/sysimage.jl $* else julia --project=. --sysimage build/sysimage.so $* fi