Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CI] Add symbols.yml and modules.yml #261

Merged
merged 13 commits into from
Feb 22, 2024
21 changes: 12 additions & 9 deletions .github/julia/check_macros.jl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using Test

global m = 0
global n = 0

excluded_files = ["blas_original.f", "blas_original.f90",
"lapack_original.f", "lapack_original.f90",
"ieeeck_original.f", "noieeeck_original.f"]
Expand All @@ -13,25 +13,27 @@ function file_extension(file::String)
return extension
end

function append_macros!(macros::Vector{Tuple{String,String}}, path::String)
function append_macros!(macros::Dict{String, String}, path::String)
str = read(path, String)
lines = split(str, '\n')
for line in lines
if startswith(line, "#define")
tab = split(line, " ", keepempty=false)
symbol = tab[2]
pp_symbol = tab[3]
push!(macros, (symbol, pp_symbol))
# if length(pp_symbol) > 31
# println("The symbol $(pp_symbol) has more than 31 characters.")
# global m = m+1
# end
if !haskey(macros, symbol)
macros[symbol] = pp_symbol
else
if length(macros[symbol]) < length(pp_symbol)
macros[symbol] = pp_symbol
end
end
end
end
return macros
end

macros = Tuple{String,String}[]
macros = Dict{String, String}()
append_macros!(macros, joinpath(@__DIR__, "..", "..", "include", "galahad_modules.h"))
append_macros!(macros, joinpath(@__DIR__, "..", "..", "include", "galahad_blas.h"))
append_macros!(macros, joinpath(@__DIR__, "..", "..", "include", "galahad_lapack.h"))
Expand Down Expand Up @@ -60,7 +62,8 @@ for (root, dirs, files) in walkdir(joinpath(@__DIR__, "..", "..", "src"))
println("Line $i in the file $file has more than 132 characters.")
global n = n+1
end
for (symbol, pp_symbol) in macros
for symbol in keys(macros)
pp_symbol = macros[symbol]
if occursin(symbol, line) && (file_extension(file) == "f")
line2 = replace(line, symbol => pp_symbol)
if length(line2) > 72
Expand Down
79 changes: 79 additions & 0 deletions .github/julia/check_modules.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
using Test

global n = 0

function exported_modules(path::String)
modules = String[]
files = readdir(path)
for file in files
if endswith(file, ".mod")
push!(modules, file)
end
end
return modules
end

modules_single_int32 = exported_modules(joinpath(@__DIR__, "..", "..", "builddir_int32", "libgalahad_single.so.p"))
modules_double_int32 = exported_modules(joinpath(@__DIR__, "..", "..", "builddir_int32", "libgalahad_double.so.p"))
modules_single_int64 = exported_modules(joinpath(@__DIR__, "..", "..", "builddir_int64", "libgalahad_single.so.p"))
modules_double_int64 = exported_modules(joinpath(@__DIR__, "..", "..", "builddir_int64", "libgalahad_double.so.p"))

modules_combinations = [(modules_single_int32, modules_double_int32, 32, 32, "libgalahad_single.so (Int32) and libgalahad_double.so (Int32)"),
(modules_single_int32, modules_single_int64, 32, 64, "libgalahad_single.so (Int32) and libgalahad_single.so (Int64)"),
(modules_single_int32, modules_double_int64, 32, 64, "libgalahad_single.so (Int32) and libgalahad_double.so (Int64)"),
(modules_double_int32, modules_single_int64, 32, 64, "libgalahad_double.so (Int32) and libgalahad_single.so (Int64)"),
(modules_double_int32, modules_double_int64, 32, 64, "libgalahad_double.so (Int32) and libgalahad_double.so (Int64)"),
(modules_single_int64, modules_double_int64, 64, 64, "libgalahad_single.so (Int64) and libgalahad_double.so (Int64)")]

single_double_modules = ["galahad_blas_interface",
"galahad_lapack_interface",
"spral_ssids_blas_iface",
"spral_ssids_lapack_iface",
"galahad_clock",
"galahad_string",
"galahad_symbols",
"galahad_tools",
"galahad_copyright",
"galahad_hash",
"galahad_common_ciface",
"galahad_hash_ciface",
"galahad_hsl_kb22_long_integer",
"galahad_hsl_mc68_integer",
"galahad_hsl_mc78_integer",
"galahad_hsl_of01_integer",
"galahad_hsl_zb01_integer",
"galahad_hsl_mc68_integer_ciface",
"galahad_kinds",
"galahad_kinds_single",
"galahad_kinds_double",
"spral_kinds",
"spral_kinds_single",
"spral_kinds_double",
"mkl_pardiso",
"mkl_pardiso_private",
"lancelot_hsl_routines",
"spmf_enums",
"pastixf_enums",
"spral_core_analyse",
"spral_hw_topology",
"spral_metis_wrapper",
"spral_pgm",
"spral_ssids_profile"]

for (modules1, modules2, int1, int2, name) in modules_combinations
intersect_modules = intersect(modules1, modules2)
println("---------------------------------------------------------------------------------------------------------------------------")
println("The following modules are generated for both libraries $name:")
for mod in intersect_modules
flag1 = mapreduce(x -> (x * ".mod") == mod, |, single_double_modules) && (int1 == int2 == 32)
flag2 = mapreduce(x -> (x * "_64.mod") == mod, |, single_double_modules) && (int1 == int2 == 64)
if !flag1 && !flag2
println(mod)
global n = n+1
end
end
println("---------------------------------------------------------------------------------------------------------------------------")
println()
end

@test n == 0
46 changes: 46 additions & 0 deletions .github/julia/check_symbols.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using Test

function exported_symbols(path::String)
symbols = String[]
str = read(path, String)
lines = split(str, '\n', keepempty=false)[2:end]
for line in lines
tab = split(line, " ", keepempty=false)
symbol = tab[1]
push!(symbols, symbol)
end
return symbols
end

symbols_single_int32 = exported_symbols(joinpath(@__DIR__, "..", "..", "builddir_int32", "libgalahad_single.so.p", "libgalahad_single.so.symbols"))
symbols_double_int32 = exported_symbols(joinpath(@__DIR__, "..", "..", "builddir_int32", "libgalahad_double.so.p", "libgalahad_double.so.symbols"))
symbols_single_int64 = exported_symbols(joinpath(@__DIR__, "..", "..", "builddir_int64", "libgalahad_single.so.p", "libgalahad_single.so.symbols"))
symbols_double_int64 = exported_symbols(joinpath(@__DIR__, "..", "..", "builddir_int64", "libgalahad_double.so.p", "libgalahad_double.so.symbols"))

symbols_combinations = [(symbols_single_int32, symbols_double_int32, 32, 32, "libgalahad_single.so (Int32) and libgalahad_double.so (Int32)"),
(symbols_single_int32, symbols_single_int64, 32, 64, "libgalahad_single.so (Int32) and libgalahad_single.so (Int64)"),
(symbols_single_int32, symbols_double_int64, 32, 64, "libgalahad_single.so (Int32) and libgalahad_double.so (Int64)"),
(symbols_double_int32, symbols_single_int64, 32, 64, "libgalahad_double.so (Int32) and libgalahad_single.so (Int64)"),
(symbols_double_int32, symbols_double_int64, 32, 64, "libgalahad_double.so (Int32) and libgalahad_double.so (Int64)"),
(symbols_single_int64, symbols_double_int64, 64, 64, "libgalahad_single.so (Int64) and libgalahad_double.so (Int64)")]

single_double_modules = ["hash_MOD", "string_MOD", "clock_MOD", "copyright_MOD", "symbols_MOD", "tools_MOD",
"common_ciface_MOD", "hash_ciface_MOD", "hsl_kb22_long_integer_MOD", "hsl_mc68_integer_ciface_MOD",
"hsl_mc68_integer_MOD", "hsl_mc78_integer_MOD", "hsl_zb01_integer_MOD", "galahad_hsl_of01_integer_MOD_",
"mkl_pardiso_private_MOD", "pastixf_enums_MOD", "pastixf_interfaces_MOD", "spmf_enums_MOD"]

for (symbols1, symbols2, int1, int2, name) in symbols_combinations
intersect_symbols = intersect(symbols1, symbols2)
println("---------------------------------------------------------------------------------------------------------------------------")
println("The following symbols are exported by both the libraries $name:")
for symbol in intersect_symbols
flag1 = (startswith(symbol, "galahad_") || startswith(symbol, "cutest_")) && endswith(symbol, "_") && (int1 == int2 == 32)
flag2 = (startswith(symbol, "galahad_") || startswith(symbol, "cutest_")) && endswith(symbol, "64_") && (int1 == int2 == 64)
flag3 = mapreduce(x -> contains(symbol, x), |, single_double_modules) && (int1 == int2)
if !flag1 && !flag2 && !flag3
println(symbol)
end
end
println("---------------------------------------------------------------------------------------------------------------------------")
println()
end
2 changes: 1 addition & 1 deletion .github/workflows/meson.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- name: Check out GALAHAD
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v4
Expand Down
49 changes: 49 additions & 0 deletions .github/workflows/modules.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Modules
on:
push:
branches:
- master
pull_request:
types: [opened, synchronize, reopened]
jobs:
build:
name: GALAHAD -- Check modules
runs-on: ubuntu-latest
steps:
- name: Checkout GALAHAD
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.11'

- name: Install Meson and Ninja
run: pip install meson ninja

- name: Install compilers
uses: fortran-lang/setup-fortran@main
with:
compiler: "gcc"
version: "11"

- name: Setup GALAHAD
shell: bash
run: |
meson setup builddir_int32 --buildtype=debug -Dgalahad_int64=false -Dssids=false -Dexamples=false -Dtests=false -Dlibmetis= -Dlibblas= -Dliblapack=
meson setup builddir_int64 --buildtype=debug -Dgalahad_int64=true -Dssids=false -Dexamples=false -Dtests=false -Dlibmetis= -Dlibblas= -Dliblapack=

- name: Build GALAHAD
shell: bash
run: |
meson compile -C builddir_int32
meson compile -C builddir_int64

- name: Install Julia
uses: julia-actions/setup-julia@v1
with:
version: 1
arch: x64

- name: Check the modules
run: julia --color=yes .github/julia/check_modules.jl
49 changes: 49 additions & 0 deletions .github/workflows/symbols.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Symbols
on:
push:
branches:
- master
pull_request:
types: [opened, synchronize, reopened]
jobs:
build:
name: GALAHAD -- Check symbols
runs-on: ubuntu-latest
steps:
- name: Checkout GALAHAD
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.11'

- name: Install Meson and Ninja
run: pip install meson ninja

- name: Install compilers
uses: fortran-lang/setup-fortran@main
with:
compiler: "gcc"
version: "11"

- name: Setup GALAHAD
shell: bash
run: |
meson setup builddir_int32 --buildtype=debug -Dgalahad_int64=false -Dssids=false -Dexamples=false -Dtests=false -Dlibmetis= -Dlibblas= -Dliblapack=
meson setup builddir_int64 --buildtype=debug -Dgalahad_int64=true -Dssids=false -Dexamples=false -Dtests=false -Dlibmetis= -Dlibblas= -Dliblapack=

- name: Build GALAHAD
shell: bash
run: |
meson compile -C builddir_int32
meson compile -C builddir_int64

- name: Install Julia
uses: julia-actions/setup-julia@v1
with:
version: 1
arch: x64

- name: Check the symbols
run: julia --color=yes .github/julia/check_symbols.jl
1 change: 1 addition & 0 deletions include/galahad_cfunctions.h
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,7 @@
#define sbls_solve_system sbls_solve_system_s
#define sbls_information sbls_information_s
#define sbls_terminate sbls_terminate_s
#define scu_initialize scu_initialize_s
#define scu_information scu_information_s
#define scu_terminate scu_terminate_s
#define sec_information sec_information_s
Expand Down
Loading
Loading