Skip to content
Merged
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
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,6 @@
path = submodules/minipoa
url = https://github.com/ComparativeGenomicsToolkit/minipoa.git
branch = cactus-integration
[submodule "submodules/last"]
path = submodules/last
url = https://gitlab.com/mcfrith/last.git
20 changes: 19 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ modules = api setup caf bar hal reference pipeline preprocessor
# submodules are in multiple pass to handle dependencies cactus2hal being dependent on
# both cactus and sonLib
# jemalloc is conditionally added based on include.mk settings
submodules1 = sonLib cPecan hal matchingAndOrdering pinchesAndCacti abPOA lastz paffy red collapse-bubble FASTGA FASTAN alntools
submodules1 = sonLib cPecan hal matchingAndOrdering pinchesAndCacti abPOA lastz last paffy red collapse-bubble FASTGA FASTAN alntools
ifeq ($(minipoa),on)
submodules1 += minipoa
endif
Expand Down Expand Up @@ -406,6 +406,24 @@ else
endif
ln -f submodules/lastz/src/lastz bin

# LAST: cactus trains its scoring models with last-train (and lastdb and lastal). Its makefile writes
# "CXXFLAGS = ..." with spaces around the '=': make that line add to ours, rather than replace them, and leave the
# sub-make override on its line 3 alone, since that is how src/makefile receives the value. Checked, as a sed that
# stops matching after an upstream change is silently a no-op. LAST has no LIBS variable either, so add one after
# the objects: a static archive named before them resolves nothing, and lastal would quietly keep glibc's
# allocator. Its -msse4 only suits x86 compilers, and its README has ARM builds go without it too.
ifdef arm
lastSedArm = -e 's/ -msse4//'
endif
suball.last: suball.jemalloc
cd submodules/last && sed -i -e 's/^CXXFLAGS *= */CXXFLAGS += /' ${lastSedArm} makefile && grep -qE '^CXXFLAGS \+= ' makefile \
|| { echo "last: no 'CXXFLAGS =' line in its makefile; check that cactus's CXXFLAGS still reach lastal" >&2; exit 1; }
cd submodules/last && sed -i -e '/LIBS/!s/ -lz$$/ -lz $$(LIBS)/' src/makefile && grep -q -- '-lz $$(LIBS)' src/makefile \
|| { echo "last: no '-lz' link line in src/makefile; check that jemalloc still reaches lastal" >&2; exit 1; }
cd submodules/last && CXXFLAGS="$${CXXFLAGS} ${CACTUS_ARCH_FLAGS}" LIBS="${jemallocSubLibs}" ${MAKE}
ln -f submodules/last/bin/lastal submodules/last/bin/lastdb submodules/last/bin/last-train \
submodules/last/bin/last-postmask ${BINDIR}

suball.paffy:
# paffy carries its own sonLib clone, which is put at the commit cactus pins. That clone has only
# fetched what its own pin needed, so bring the commit over from cactus's checkout first.
Expand Down
50 changes: 1 addition & 49 deletions build-tools/downloadPangenomeTools
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ fi

# CPU baseline. include.mk is the single source of truth; ask make for it rather than
# duplicating the arm/legacy/x86 selection here, where it would silently drift. Without this
# nothing built by this script -- minigraph, minimap2, gfatools, last, samtools/bcftools --
# nothing built by this script -- minigraph, minimap2, gfatools, samtools/bcftools --
# gets an arch flag at all: confirmed against the v3.3.0 tarball, where minigraph carried zero
# AVX2 in its own code, only glibc's runtime-dispatched string routines.
# MAKEFLAGS is cleared because "make binRelease" reaches this from inside a make recipe.
Expand Down Expand Up @@ -427,54 +427,6 @@ then
mkdir -p ${pangenomeBuildDir}
fi

# last
cd ${pangenomeBuildDir}
git clone https://gitlab.com/mcfrith/last.git --recursive
cd last
git checkout 1651
# last writes "CXXFLAGS = ..." with spaces around the '=', so the old
# 's/CXXFLAGS=/CXXFLAGS+=/' never matched line 1. What it did match was the sub-make
# override on line 3 ($(MAKE) CXXFLAGS="$(CXXFLAGS)" -> CXXFLAGS+="$(CXXFLAGS)"), which only
# doubled last's own flags while its line-1 assignment carried on clobbering ours -- so
# nothing cactus sets has ever reached lastal/lastdb. Anchor to the line start and allow the
# spaces; leave line 3 alone, since that override is how src/makefile receives the value.
# Guarded: this sed was silently a no-op for years, which is exactly what we don't want twice.
grep -qE '^CXXFLAGS *=' makefile || {
echo "ERROR: last: no 'CXXFLAGS =' assignment at the start of a line in makefile." >&2
echo " Upstream changed its build; re-check that cactus's CXXFLAGS reach lastal." >&2
exit 1
}
sed -i makefile -e 's/^CXXFLAGS *= */CXXFLAGS += /'
# last has no LIBS variable, so add one after the objects. Order matters: a static archive
# named before the objects resolves nothing and is discarded, and lastal would silently fall
# back to glibc's allocator.
sed -i src/makefile -e '/LIBS/!s/ -lz$/ -lz $(LIBS)/'
LIBS="${jemallocLib}" make -j ${numcpu}
if [[ $STATIC_CHECK -ne 1 || $(ldd bin/lastal | grep so | wc -l) -eq 0 ]]
then
mv bin/lastal ${binDir}
else
exit 1
fi
if [[ $STATIC_CHECK -ne 1 || $(ldd bin/lastdb | grep so | wc -l) -eq 0 ]]
then
mv bin/lastdb ${binDir}
else
exit 1
fi
if [[ $STATIC_CHECK -ne 1 || $(ldd bin/last-train | grep so | wc -l) -eq 0 ]]
then
mv bin/last-train ${binDir}
else
exit 1
fi
if [[ $STATIC_CHECK -ne 1 || $(ldd bin/last-postmask | grep so | wc -l) -eq 0 ]]
then
mv bin/last-postmask ${binDir}
else
exit 1
fi

cd ${CWD}
rm -rf ${pangenomeBuildDir}

Expand Down
1 change: 1 addition & 0 deletions submodules/last
Submodule last added at d20367