Skip to content

Commit 300dfd1

Browse files
committed
Change the way binaries are copied.
1 parent 5981fb6 commit 300dfd1

File tree

1 file changed

+38
-24
lines changed

1 file changed

+38
-24
lines changed
Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,19 @@
11
#!/bin/bash
2-
# This script builds GTSAM and GTDynamics using a clean prefix-installation strategy.
3-
# This prevents "Double Linking" of Boost and other dependencies.
4-
2+
# Refined Hybrid Build Script: Proven Copy Logic + Clean Prefix Strategy
53
set -e
64
set -x
75

86
PROJECT_DIR="$(cd "$1" && pwd)"
97
INSTALL_PREFIX="/opt/gtdynamics-deps"
108
NUM_CORES=$(nproc)
119

12-
# Source environment from before-all (defines BOOST_ROOT, etc.)
10+
# 1. Setup Environment
1311
source ${INSTALL_PREFIX}/env.sh
14-
15-
# Get the Python executable provided by cibuildwheel
1612
PYTHON_EXE=$(which python)
1713
PYTHON_VERSION=$($PYTHON_EXE -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
1814

1915
echo "Building for Python ${PYTHON_VERSION} at ${PYTHON_EXE}"
2016

21-
# Install Python build-time dependencies
2217
$PYTHON_EXE -m pip install --upgrade pip
2318
$PYTHON_EXE -m pip install numpy pyparsing pybind11 hatchling ninja "cmake>=3.26,<4"
2419

@@ -27,11 +22,12 @@ GTSAM_SOURCE="${INSTALL_PREFIX}/gtsam_source"
2722
GTSAM_BUILD="${INSTALL_PREFIX}/gtsam_build_py${PYTHON_VERSION}"
2823
GTSAM_PREFIX="${INSTALL_PREFIX}/gtsam_py${PYTHON_VERSION}"
2924

30-
# 1. Build and INSTALL GTSAM to a clean prefix
25+
# 2. Build and INSTALL GTSAM to Clean Prefix
3126
echo "Building GTSAM..."
3227
rm -rf ${GTSAM_BUILD} ${GTSAM_PREFIX}
3328
mkdir -p ${GTSAM_BUILD}
3429
cd ${GTSAM_BUILD}
30+
3531
cmake ${GTSAM_SOURCE} \
3632
-DCMAKE_BUILD_TYPE=Release \
3733
-DCMAKE_INSTALL_PREFIX=${GTSAM_PREFIX} \
@@ -50,27 +46,45 @@ cmake ${GTSAM_SOURCE} \
5046
cmake --build . --config Release -j${NUM_CORES}
5147
cmake --install .
5248

53-
# 2. Stage GTSAM Python package for bundling
54-
echo "Staging GTSAM for bundling..."
49+
# 3. Stage GTSAM using your Working Copy Logic
50+
echo "Staging GTSAM Python package for bundling..."
51+
GTSAM_PY_SRC="${GTSAM_BUILD}/python/gtsam"
5552
GTSAM_PY_DST="${PROJECT_DIR}/python/gtsam"
5653
rm -rf ${GTSAM_PY_DST}
5754
mkdir -p ${GTSAM_PY_DST}
5855

59-
# Find where CMake installed the gtsam python package
60-
GTSAM_PKG_SRC=$(find ${GTSAM_PREFIX} -name "gtsam" -type d | grep "site-packages/gtsam" | head -n 1)
61-
if [ -z "$GTSAM_PKG_SRC" ]; then
62-
echo "ERROR: Could not find gtsam package in ${GTSAM_PREFIX}"
63-
exit 1
64-
fi
65-
cp -r "${GTSAM_PKG_SRC}/." "${GTSAM_PY_DST}/"
56+
cp ${GTSAM_PY_SRC}/__init__.py ${GTSAM_PY_DST}/
57+
cp ${GTSAM_PY_SRC}/__init__.pyi ${GTSAM_PY_DST}/ 2>/dev/null || true
58+
cp ${GTSAM_PY_SRC}/*.py ${GTSAM_PY_DST}/
59+
find ${GTSAM_PY_SRC} -maxdepth 1 -name "gtsam*.so" -exec cp {} ${GTSAM_PY_DST}/ \;
60+
61+
for subdir in utils preamble specializations gtsam Data; do
62+
if [ -d "${GTSAM_PY_SRC}/${subdir}" ]; then
63+
cp -r ${GTSAM_PY_SRC}/${subdir} ${GTSAM_PY_DST}/
64+
fi
65+
done
66+
6667
rm -rf ${GTSAM_PY_DST}/tests ${GTSAM_PY_DST}/examples ${GTSAM_PY_DST}/notebooks ${GTSAM_PY_DST}/__pycache__
6768

68-
# 3. Build and INSTALL GTDynamics to its own prefix
69-
echo "Building GTDynamics..."
69+
# 4. Finalize Environment for GTDynamics
70+
export GTSAM_DIR="${GTSAM_PREFIX}/lib/cmake/GTSAM"
71+
export CMAKE_PREFIX_PATH="${GTSAM_PREFIX}:${CMAKE_PREFIX_PATH}"
72+
export LD_LIBRARY_PATH="${GTSAM_PREFIX}/lib:${LD_LIBRARY_PATH}"
73+
74+
rm -f ${INSTALL_PREFIX}/gtsam_current
75+
ln -sf ${GTSAM_PREFIX} ${INSTALL_PREFIX}/gtsam_current
76+
77+
# Patch gtwrap for manylinux compatibility
78+
sed -i 's/Interpreter Development/Interpreter Development.Module/g' \
79+
${GTSAM_PREFIX}/lib/cmake/gtwrap/GtwrapUtils.cmake
80+
81+
# 5. Build and INSTALL GTDynamics
82+
echo "Building GTDynamics C++ extension..."
7083
GTD_BUILD="${INSTALL_PREFIX}/gtd_build_py${PYTHON_VERSION}"
7184
GTD_PREFIX="${INSTALL_PREFIX}/gtd_py${PYTHON_VERSION}"
7285
rm -rf ${GTD_BUILD} ${GTD_PREFIX}
7386
mkdir -p ${GTD_BUILD}
87+
7488
cd ${GTD_BUILD}
7589
cmake ${PROJECT_DIR} \
7690
-DCMAKE_BUILD_TYPE=Release \
@@ -88,13 +102,13 @@ cmake ${PROJECT_DIR} \
88102
cmake --build . --config Release --target gtdynamics_py -j${NUM_CORES}
89103
cmake --install .
90104

91-
# 4. Stage GTDynamics extension for bundling
92-
echo "Staging GTDynamics extension..."
105+
# 6. Stage GTDynamics extension from Clean Prefix
106+
echo "Copying built extension to source tree..."
93107
find "${GTD_PREFIX}" -name "gtdynamics*.so" -exec cp -v {} "${PROJECT_DIR}/python/gtdynamics/" \;
94108

95-
# Finalize Environment for Auditwheel
96-
rm -f ${INSTALL_PREFIX}/gtsam_current ${INSTALL_PREFIX}/gtd_current
97-
ln -sf ${GTSAM_PREFIX} ${INSTALL_PREFIX}/gtsam_current
109+
# Finalize GTDynamics library path
110+
rm -f ${INSTALL_PREFIX}/gtd_current
98111
ln -sf ${GTD_PREFIX} ${INSTALL_PREFIX}/gtd_current
112+
export LD_LIBRARY_PATH="${GTD_PREFIX}/lib:${LD_LIBRARY_PATH}"
99113

100114
echo "before-build completed successfully!"

0 commit comments

Comments
 (0)