Skip to content

Commit

Permalink
Merge pull request #53 from amontoison/ci-julia
Browse files Browse the repository at this point in the history
[CI] Run the tests of AmplNLWriter.jl
  • Loading branch information
cvanaret authored Oct 29, 2024
2 parents 7ebfb5a + 29a0eda commit 9533d28
Show file tree
Hide file tree
Showing 2 changed files with 154 additions and 0 deletions.
104 changes: 104 additions & 0 deletions .github/julia/build_tarballs_yggdrasil.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# Note that this script can accept some limited command-line arguments, run
# `julia build_tarballs.jl --help` to see a usage message.
using BinaryBuilder, Pkg

haskey(ENV, "UNO_RELEASE") || error("The environment variable UNO_RELEASE is not defined.")
haskey(ENV, "UNO_COMMIT") || error("The environment variable UNO_COMMIT is not defined.")
haskey(ENV, "UNO_URL") || error("The environment variable UNO_URL is not defined.")

name = "Uno"
version = VersionNumber(ENV["UNO_RELEASE"])

# Collection of sources required to complete build
sources = [
GitSource(ENV["UNO_URL"], ENV["UNO_COMMIT"])
]

script = raw"""
cd $WORKSPACE/srcdir/Uno
mkdir -p build
cd build
if [[ "${target}" == *mingw* ]]; then
LBT=blastrampoline-5
else
LBT=blastrampoline
fi
if [[ "${target}" == *apple* ]] || [[ "${target}" == *freebsd* ]]; then
OMP=omp
else
OMP=gomp
fi
# FortranCInterface_VERIFY fails on macOS, but it's not actually needed for the current build
sed -i 's/FortranCInterface_VERIFY(CXX)/# FortranCInterface_VERIFY(CXX)/g' ../CMakeLists.txt
cmake \
-DCMAKE_INSTALL_PREFIX=${prefix} \
-DCMAKE_PREFIX_PATH=${libdir} \
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TARGET_TOOLCHAIN} \
-DCMAKE_BUILD_TYPE=Release \
-DAMPLSOLVER=${libdir}/libasl.${dlext} \
-DHSL=${libdir}/libhsl.${dlext} \
-DBLA_VENDOR="libblastrampoline" \
-DMUMPS_INCLUDE_DIR=${includedir} \
-DMETIS_INCLUDE_DIR=${includedir} \
-DMUMPS_LIBRARY="${libdir}/libdmumps.${dlext}" \
-DMUMPS_COMMON_LIBRARY="${libdir}/libmumps_common.${dlext}" \
-DMUMPS_PORD_LIBRARY="${libdir}/libpord.${dlext}" \
-DMUMPS_MPISEQ_LIBRARY="${libdir}/libmpiseq.${dlext}" \
-DBLAS_LIBRARIES="${libdir}/lib${LBT}.${dlext}" \
-DLAPACK_LIBRARIES="${libdir}/lib${LBT}.${dlext}" \
..
make -j${nproc}
# Uno does not support `make install`. Manually copy for now.
install -v -m 755 "uno_ampl${exeext}" -t "${bindir}"
# Currently, Uno does not provide a shared library. This may be useful in the future once it has a C API.
# We just check that we can generate it, but we don't include it in the tarballs.
${CXX} -shared $(flagon -Wl,--whole-archive) libuno.a $(flagon -Wl,--no-whole-archive) -o libuno.${dlext} -L${libdir} -l${OMP} -l${LBT} -ldmumps -lmetis -lhsl
# cp libuno.${dlext} "${libdir}/libuno.${dlext}
"""

platforms = supported_platforms()
filter!(p -> !(Sys.isfreebsd(p) && arch(p) == "aarch64"), platforms)
platforms = expand_cxxstring_abis(platforms)

products = [
# This LibraryProduct may be useful once Uno provides a C API. We omit it for now.
# LibraryProduct("libuno", :libuno),
# We call this amplexe to match the convention of other JLL packages (like Ipopt_jll) that provide AMPL wrappers
ExecutableProduct("uno_ampl", :amplexe),
]

dependencies = [
Dependency(PackageSpec(name="HSL_jll", uuid="017b0a0e-03f4-516a-9b91-836bbd1904dd")),
Dependency(PackageSpec(name="METIS_jll", uuid="d00139f3-1899-568f-a2f0-47f597d42d70")),
Dependency(PackageSpec(name="ASL_jll", uuid="ae81ac8f-d209-56e5-92de-9978fef736f9"), compat="0.1.3"),
Dependency(PackageSpec(name="MUMPS_seq_jll", uuid="d7ed1dd3-d0ae-5e8e-bfb4-87a502085b8d")),
Dependency(PackageSpec(name="libblastrampoline_jll", uuid="8e850b90-86db-534c-a0d3-1478176c7d93"), compat="5.4.0"),
# For OpenMP we use libomp from `LLVMOpenMP_jll` where we use LLVM as compiler (BSD systems),
# and libgomp from `CompilerSupportLibraries_jll` everywhere else.
Dependency(PackageSpec(name="CompilerSupportLibraries_jll", uuid="e66e0078-7015-5450-92f7-15fbd957f2ae"); platforms=filter(!Sys.isbsd, platforms)),
Dependency(PackageSpec(name="LLVMOpenMP_jll", uuid="1d63c593-3942-5779-bab2-d838dc0a180e"); platforms=filter(Sys.isbsd, platforms)),

# We need at least 3.29 (Ygg version), or 3.30 upstream version for LBT support,
# so always pull the most recent CMake version.
HostBuildDependency(PackageSpec(name="CMake_jll", uuid="3f4e10e2-61f2-5801-8945-23b9d642d0e6")),
]

build_tarballs(
ARGS,
name,
version,
sources,
script,
platforms,
products,
dependencies;
julia_compat = "1.9",
preferred_gcc_version = v"10.2.0",
)
50 changes: 50 additions & 0 deletions .github/workflows/julia-tests-ubuntu.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: CI
on:
push:
branches: [main]
pull_request:
types: [opened, synchronize, reopened]
# needed to allow julia-actions/cache to delete old caches that it has created
permissions:
actions: write
contents: read
jobs:
test:
name: Julia - ${{ github.event_name }}
runs-on: ubuntu-latest
steps:
- name: Checkout Uno
uses: actions/checkout@v4
- name: Install Julia 1.7
uses: julia-actions/setup-julia@v2
with:
version: "1.7"
arch: x64
- name: Set the environment variables BINARYBUILDER_AUTOMATIC_APPLE, UNO_RELEASE, UNO_COMMIT
shell: bash
run: |
echo "BINARYBUILDER_AUTOMATIC_APPLE=true" >> $GITHUB_ENV
echo "UNO_RELEASE=1.1.1" >> $GITHUB_ENV
if [ "${{ github.event_name }}" = "pull_request" ]; then
echo "UNO_COMMIT=${{ github.event.pull_request.head.sha }}" >> $GITHUB_ENV
echo "UNO_URL=${{ github.event.pull_request.head.repo.clone_url }}" >> $GITHUB_ENV
else
echo "UNO_COMMIT=${{ github.sha }}" >> $GITHUB_ENV
echo "UNO_URL=https://github.com/${{ github.repository }}.git" >> $GITHUB_ENV
fi
- name: Generate Uno_jll.jl
run: |
julia --color=yes -e 'using Pkg; Pkg.add("BinaryBuilder")'
julia --color=yes .github/julia/build_tarballs_yggdrasil.jl x86_64-linux-gnu-libgfortran5 --verbose --deploy="local"
- name: Install Julia LTS
uses: julia-actions/setup-julia@v2
with:
version: "1.10"
arch: x64

- name: Test AmplNLWriter.jl
shell: bash
run: |
git clone https://github.com/jump-dev/AmplNLWriter.jl
cd AmplNLWriter.jl/test/MINLPTests/
julia --project --color=yes -e 'using Pkg; Pkg.develop(path="/home/runner/.julia/dev/Uno_jll"); Pkg.develop(path="../.."); Pkg.instantiate(); include("run_minlptests.jl")'

0 comments on commit 9533d28

Please sign in to comment.