Skip to content
This repository has been archived by the owner on Nov 30, 2023. It is now read-only.

Commit

Permalink
Add arm64 support to cpp-mariadb container (#1328)
Browse files Browse the repository at this point in the history
  • Loading branch information
dnastrain authored Mar 2, 2022
1 parent 55a1eee commit 5c91b9c
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 16 deletions.
2 changes: 1 addition & 1 deletion containers/cpp-mariadb/.devcontainer/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ ARG REINSTALL_CMAKE_VERSION_FROM_SOURCE="none"
# Optionally install the cmake for vcpkg
COPY ./reinstall-cmake.sh /tmp/
RUN if [ "${REINSTALL_CMAKE_VERSION_FROM_SOURCE}" != "none" ]; then \
/tmp/reinstall-cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \
chmod +x /tmp/reinstall-cmake.sh && /tmp/reinstall-cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \
fi \
&& rm -f /tmp/reinstall-cmake.sh

Expand Down
67 changes: 54 additions & 13 deletions containers/cpp-mariadb/.devcontainer/install-mariadb.sh
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,29 @@ find_os_props() {
esac
}

# Run apt-get if needed.
apt_get_update_if_needed() {
if [ ! -d "/var/lib/apt/lists" ] || [ "$(ls /var/lib/apt/lists/ | wc -l)" = "0" ]; then
echo "Running apt-get update..."
apt-get update
else
echo "Skipping apt-get update."
fi
}

# Check if packages are installed and installs them if not.
check_packages() {
if ! dpkg -s "$@" > /dev/null 2>&1; then
apt_get_update_if_needed
apt-get -y install --no-install-recommends "$@"
fi
}

TMP_DIR=$(mktemp -d -t maria-XXXXXXXXXX)
MARIADB_CONNECTOR=""
SOURCE_INCLUDE_DIR=""
SOURCE_LIB_DIR=""
SOURCE_PLUGIN_DIR=""

cleanup() {
EXIT_CODE=$?
Expand All @@ -57,25 +78,45 @@ cleanup() {
trap cleanup EXIT

#Set up external repository and install C Connector
apt install -y libmariadb3 libmariadb-dev
check_packages libmariadb3 libmariadb-dev

#Depending on the OS, install different C++ connectors
find_os_props
# Instructions are copied and modified from: https://mariadb.com/docs/clients/mariadb-connectors/connector-cpp/install/
MARIADB_CONNECTOR=mariadb-connector-cpp-1.0.1-$OSURL

cd ${TMP_DIR}
curl -Ls https://dlm.mariadb.com/$OSTAG/connectors/cpp/connector-cpp-1.0.1/${MARIADB_CONNECTOR}.tar.gz -o ${MARIADB_CONNECTOR}.tar.gz
tar -xvzf ${MARIADB_CONNECTOR}.tar.gz && cd ${MARIADB_CONNECTOR}
install -d /usr/include/mariadb/conncpp

#Header Files being copied into the necessary directories
cp -R ./include/mariadb/* /usr/include/mariadb/
cp -R ./include/mariadb/conncpp/* /usr/include/mariadb/conncpp
cp -R ./include/mariadb/conncpp/compat/* /usr/include/mariadb/conncpp/compat
if [ "$(dpkg --print-architecture)" = "arm64" ] ; then
# Instructions are copied and modified from: https://github.com/mariadb-corporation/mariadb-connector-cpp/blob/master/BUILD.md
# and from: https://mariadb.com/docs/clients/mariadb-connectors/connector-cpp/install/
check_packages git cmake make gcc libssl-dev
git clone https://github.com/MariaDB-Corporation/mariadb-connector-cpp.git
mkdir build && cd build
cmake ../mariadb-connector-cpp/ -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCONC_WITH_UNIT_TESTS=Off -DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_SSL=OPENSSL
cmake --build . --config RelWithDebInfo
make install

SOURCE_INCLUDE_DIR="../mariadb-connector-cpp/include"
SOURCE_LIB_DIR="."
SOURCE_PLUGIN_DIR="./libmariadb"
else
# Instructions are copied and modified from: https://mariadb.com/docs/clients/mariadb-connectors/connector-cpp/install/
MARIADB_CONNECTOR=mariadb-connector-cpp-1.0.1-$OSURL
curl -Ls https://dlm.mariadb.com/$OSTAG/connectors/cpp/connector-cpp-1.0.1/${MARIADB_CONNECTOR}.tar.gz -o ${MARIADB_CONNECTOR}.tar.gz
tar -xvzf ${MARIADB_CONNECTOR}.tar.gz && cd ${MARIADB_CONNECTOR}

install -d /usr/lib/mariadb
SOURCE_INCLUDE_DIR="./include/mariadb"
SOURCE_LIB_DIR="lib/mariadb"
SOURCE_PLUGIN_DIR="lib/mariadb/plugin"
fi

install -d /usr/include/mariadb/conncpp/compat
install -d /usr/lib/mariadb/plugin

#Header Files being copied into the necessary directories
cp -R ${SOURCE_INCLUDE_DIR}/* /usr/include/mariadb/
cp -R ${SOURCE_INCLUDE_DIR}/conncpp/* /usr/include/mariadb/conncpp
cp -R ${SOURCE_INCLUDE_DIR}/conncpp/compat/* /usr/include/mariadb/conncpp/compat

#Shared libraries copied into usr/lib
cp lib/mariadb/libmariadbcpp.so /usr/lib
cp -R lib/mariadb/plugin/* /usr/lib/mariadb/plugin
cp ${SOURCE_LIB_DIR}/libmariadbcpp.so /usr/lib
cp ${SOURCE_PLUGIN_DIR}/*.so /usr/lib/mariadb/plugin
2 changes: 1 addition & 1 deletion containers/cpp-mariadb/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
| *Categories* | Core, Languages |
| *Definition type* | Docker Compose |
| *Available image variants* | [See cpp definition](../cpp). |
| *Supported architecture(s)* | x86-64 for `bullseye`, `stretch`, `bionic`, and `hirsute` variants |
| *Supported architecture(s)* | x86-64, aarch64/arm64 for `bullseye`, `stretch`, `bionic`, and `hirsute` variants |
| *Works in Codespaces* | Yes |
| *Container host OS support* | Linux, macOS, Windows |
| *Container OS* | Debian, Ubuntu |
Expand Down
2 changes: 1 addition & 1 deletion containers/cpp/.devcontainer/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ ARG REINSTALL_CMAKE_VERSION_FROM_SOURCE="none"
# Optionally install the cmake for vcpkg
COPY ./reinstall-cmake.sh /tmp/
RUN if [ "${REINSTALL_CMAKE_VERSION_FROM_SOURCE}" != "none" ]; then \
/tmp/reinstall-cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \
chmod +x /tmp/reinstall-cmake.sh && /tmp/reinstall-cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \
fi \
&& rm -f /tmp/reinstall-cmake.sh

Expand Down

0 comments on commit 5c91b9c

Please sign in to comment.