105 lines
4.6 KiB
Bash
Executable File
105 lines
4.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# per-engine static archives for mag/elec/heat/curr with internal symbols localized via ld -exported_symbols_list.
|
|
|
|
set -euo pipefail
|
|
|
|
ROOT=$(cd "$(dirname "$0")/../.." && pwd)
|
|
BUILD=${BUILD:-"$ROOT/build/ffi"}
|
|
|
|
CXX=${CXX:-clang++}
|
|
LD=${LD:-ld}
|
|
AR=${AR:-ar}
|
|
case "${PROFILE:-release}" in
|
|
release) DEFAULT_CXXFLAGS="-std=c++17 -fno-exceptions -fno-rtti -O3 -DNDEBUG -w" ;;
|
|
*) DEFAULT_CXXFLAGS="-std=c++17 -fno-exceptions -fno-rtti -O0 -g -w" ;;
|
|
esac
|
|
CXXFLAGS=${CXXFLAGS:-$DEFAULT_CXXFLAGS}
|
|
|
|
mkdir -p "$BUILD"/{fkn,liblua,belasolv,csolv,hsolv,ffi}
|
|
|
|
compile() {
|
|
local incs="$1"; shift
|
|
local outdir="$1"; shift
|
|
for src in "$@"; do
|
|
local base
|
|
base=$(basename "$src")
|
|
base=${base%.cpp}
|
|
base=${base%.CPP}
|
|
$CXX $CXXFLAGS $incs -c "$src" -o "$outdir/${base}.o"
|
|
done
|
|
}
|
|
|
|
# liblua compiled against fkn's complex.h.
|
|
compile "-I $ROOT/fkn -I $ROOT/liblua -I $ROOT/compat" \
|
|
"$BUILD/liblua" \
|
|
"$ROOT/liblua/lapi.cpp" "$ROOT/liblua/lauxlib.cpp" "$ROOT/liblua/lbaselib.cpp" \
|
|
"$ROOT/liblua/lcode.cpp" "$ROOT/liblua/ldblib.cpp" "$ROOT/liblua/ldebug.cpp" \
|
|
"$ROOT/liblua/ldo.cpp" "$ROOT/liblua/lfunc.cpp" "$ROOT/liblua/lgc.cpp" \
|
|
"$ROOT/liblua/liolib.cpp" "$ROOT/liblua/llex.cpp" "$ROOT/liblua/lmathlib.cpp" \
|
|
"$ROOT/liblua/lmem.cpp" "$ROOT/liblua/lobject.cpp" "$ROOT/liblua/lparser.cpp" \
|
|
"$ROOT/liblua/lstate.cpp" "$ROOT/liblua/lstring.cpp" "$ROOT/liblua/lstrlib.cpp" \
|
|
"$ROOT/liblua/ltable.cpp" "$ROOT/liblua/ltests.cpp" "$ROOT/liblua/ltm.cpp" \
|
|
"$ROOT/liblua/lundump.cpp" "$ROOT/liblua/lvm.cpp" "$ROOT/liblua/lzio.cpp"
|
|
|
|
compile "-I $ROOT/fkn -I $ROOT/compat" \
|
|
"$BUILD/fkn" \
|
|
"$ROOT/fkn/complex.cpp" "$ROOT/fkn/cspars.cpp" "$ROOT/fkn/cuthill.cpp" \
|
|
"$ROOT/fkn/femmedoccore.cpp" "$ROOT/fkn/fullmatrix.cpp" "$ROOT/fkn/matprop.cpp" \
|
|
"$ROOT/fkn/prob1big.cpp" "$ROOT/fkn/prob2big.cpp" "$ROOT/fkn/prob3big.cpp" \
|
|
"$ROOT/fkn/prob4big.cpp" "$ROOT/fkn/spars.cpp"
|
|
|
|
compile "-I $ROOT/belasolv -I $ROOT/compat" \
|
|
"$BUILD/belasolv" \
|
|
"$ROOT/belasolv/cuthill.cpp" "$ROOT/belasolv/femmedoccore.cpp" \
|
|
"$ROOT/belasolv/prob1big.cpp" "$ROOT/belasolv/spars.cpp"
|
|
|
|
compile "-I $ROOT/csolv -I $ROOT/compat" \
|
|
"$BUILD/csolv" \
|
|
"$ROOT/csolv/complex.cpp" "$ROOT/csolv/cspars.cpp" "$ROOT/csolv/CUTHILL.CPP" \
|
|
"$ROOT/csolv/femmedoccore.cpp" "$ROOT/csolv/PROB1BIG.CPP"
|
|
|
|
compile "-I $ROOT/hsolv -I $ROOT/compat" \
|
|
"$BUILD/hsolv" \
|
|
"$ROOT/hsolv/complex.cpp" "$ROOT/hsolv/CUTHILL.CPP" "$ROOT/hsolv/hsolvdoc.cpp" \
|
|
"$ROOT/hsolv/prob1big.cpp" "$ROOT/hsolv/SPARS.CPP"
|
|
|
|
# ffi translation units, one per engine plus the liblua complex-op shim.
|
|
$CXX $CXXFLAGS -I "$ROOT/fkn" -I "$ROOT/compat" -c "$ROOT/ffi/femm_mag.cpp" -o "$BUILD/ffi/femm_mag.o"
|
|
$CXX $CXXFLAGS -I "$ROOT/belasolv" -I "$ROOT/compat" -c "$ROOT/ffi/femm_elec.cpp" -o "$BUILD/ffi/femm_elec.o"
|
|
$CXX $CXXFLAGS -I "$ROOT/hsolv" -I "$ROOT/compat" -c "$ROOT/ffi/femm_heat.cpp" -o "$BUILD/ffi/femm_heat.o"
|
|
$CXX $CXXFLAGS -I "$ROOT/csolv" -I "$ROOT/compat" -c "$ROOT/ffi/femm_curr.cpp" -o "$BUILD/ffi/femm_curr.o"
|
|
$CXX $CXXFLAGS -I "$ROOT/liblua" -I "$ROOT/compat" -c "$ROOT/ffi/femm_lua_complex_ops.cpp" -o "$BUILD/ffi/femm_lua_complex_ops.o"
|
|
|
|
# per-engine exported-symbols lists.
|
|
exports_for() {
|
|
local prefix="$1"
|
|
nm "$BUILD/ffi/femm_${prefix}.o" | awk -v p="$prefix" '
|
|
$2=="T" && $3 ~ ("^_femm_" p "_") { print $3 }
|
|
'
|
|
}
|
|
|
|
mkdir -p "$BUILD/exports"
|
|
exports_for mag > "$BUILD/exports/mag.txt"
|
|
exports_for elec > "$BUILD/exports/elec.txt"
|
|
exports_for heat > "$BUILD/exports/heat.txt"
|
|
exports_for curr > "$BUILD/exports/curr.txt"
|
|
|
|
# merges each engine into a relocatable object and archives it.
|
|
$LD -r "$BUILD"/fkn/*.o "$BUILD"/liblua/*.o "$BUILD"/ffi/femm_mag.o "$BUILD"/ffi/femm_lua_complex_ops.o \
|
|
-exported_symbols_list "$BUILD/exports/mag.txt" -o "$BUILD/femm_mag_merged.o"
|
|
$LD -r "$BUILD"/belasolv/*.o "$BUILD"/ffi/femm_elec.o \
|
|
-exported_symbols_list "$BUILD/exports/elec.txt" -o "$BUILD/femm_elec_merged.o"
|
|
$LD -r "$BUILD"/hsolv/*.o "$BUILD"/ffi/femm_heat.o \
|
|
-exported_symbols_list "$BUILD/exports/heat.txt" -o "$BUILD/femm_heat_merged.o"
|
|
$LD -r "$BUILD"/csolv/*.o "$BUILD"/ffi/femm_curr.o \
|
|
-exported_symbols_list "$BUILD/exports/curr.txt" -o "$BUILD/femm_curr_merged.o"
|
|
|
|
rm -f "$BUILD"/libfemm_*.a
|
|
$AR rcs "$BUILD/libfemm_mag.a" "$BUILD/femm_mag_merged.o"
|
|
$AR rcs "$BUILD/libfemm_elec.a" "$BUILD/femm_elec_merged.o"
|
|
$AR rcs "$BUILD/libfemm_heat.a" "$BUILD/femm_heat_merged.o"
|
|
$AR rcs "$BUILD/libfemm_curr.a" "$BUILD/femm_curr_merged.o"
|
|
|
|
echo "built:"
|
|
ls -lh "$BUILD"/libfemm_*.a
|