|
1 | 1 | #!/bin/bash |
| 2 | +# Copyright (c) 2026 VillageSQL Contributors |
| 3 | +# Configure and build the VillageSQL server for CI. |
| 4 | +# |
| 5 | +# Env vars: |
| 6 | +# BUILD_DIR - build output directory (default: <source>/../build) |
| 7 | +# SOURCE_DIR - source root (default: parent of script dir) |
| 8 | +# BUILD_TYPE - debug or release (default: release, uses RelWithDebInfo) |
| 9 | +# PARALLEL_JOBS - parallel make jobs (default: auto-detected) |
| 10 | +# CMAKE_EXTRA_FLAGS - additional cmake flags appended verbatim |
2 | 11 |
|
3 | | -# VillageSQL CI Build Script |
4 | | -# Performs a clean build and basic validation for CI environments |
| 12 | +set -euo pipefail |
5 | 13 |
|
6 | | -set -e |
| 14 | +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| 15 | +SOURCE_DIR="${SOURCE_DIR:-$(cd "$SCRIPT_DIR/.." && pwd)}" |
| 16 | +source "$SCRIPT_DIR/vsql_script_utils.sh" |
7 | 17 |
|
8 | | -# Determine build type (default to debug) |
9 | | -BUILD_TYPE="${BUILD_TYPE:-debug}" |
| 18 | +BUILD_DIR="${BUILD_DIR:-$(cd "$SOURCE_DIR/.." && pwd)/build}" |
| 19 | +BUILD_TYPE="${BUILD_TYPE:-release}" |
| 20 | +PARALLEL_JOBS="${PARALLEL_JOBS:-$(getconf _NPROCESSORS_ONLN 2>/dev/null || echo "4")}" |
10 | 21 |
|
11 | | -echo "=== VillageSQL CI Build ===" |
12 | | -echo "Build type: ${BUILD_TYPE}" |
13 | | -echo "Available CPUs: $(nproc)" |
14 | | -echo "Parallel jobs: ${PARALLEL_JOBS}" |
15 | | -echo "Working directory: $(pwd)" |
| 22 | +log_step "VillageSQL CI Build" |
| 23 | +echo "" |
16 | 24 |
|
17 | | -# Use SOURCE_DIR from environment, fallback to current directory |
18 | | -SOURCE_DIR="${SOURCE_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}" |
19 | | - |
20 | | -# Use BUILD_DIR from environment, fallback to ../build relative to source |
21 | | -BUILD_DIR="${BUILD_DIR:-${SOURCE_DIR}/../build}" |
| 25 | +if [[ ! -d "$SOURCE_DIR" ]]; then |
| 26 | + die "Source directory not found: $SOURCE_DIR" |
| 27 | +fi |
| 28 | +if [[ ! -f "$SOURCE_DIR/CMakeLists.txt" ]]; then |
| 29 | + die "Source directory doesn't appear to be valid (no CMakeLists.txt): $SOURCE_DIR" |
| 30 | +fi |
22 | 31 |
|
23 | | -# Create build directory |
24 | | -echo "Creating build directory: ${BUILD_DIR}" |
25 | 32 | mkdir -p "$BUILD_DIR" |
| 33 | + |
| 34 | +log_info "Source Directory: $SOURCE_DIR" |
| 35 | +log_info "Build Directory: $BUILD_DIR" |
| 36 | +log_info "Build Type: $BUILD_TYPE" |
| 37 | +log_info "Parallel Jobs: $PARALLEL_JOBS" |
| 38 | +echo "" |
| 39 | + |
| 40 | +log_step "Step 1: Configuring build with CMake..." |
26 | 41 | cd "$BUILD_DIR" |
27 | 42 |
|
28 | | -# Configure CMake |
29 | | -echo "=== CMake Configuration ===" |
| 43 | +CMAKE_FLAGS=( |
| 44 | + "-DWITH_SSL=system" |
| 45 | +) |
30 | 46 |
|
31 | | -# Set debug flag based on build type |
32 | | -if [ "$BUILD_TYPE" = "debug" ]; then |
33 | | - WITH_DEBUG_FLAG="-DWITH_DEBUG=1" |
| 47 | +if [[ "$BUILD_TYPE" == "debug" ]]; then |
| 48 | + CMAKE_FLAGS+=("-DCMAKE_BUILD_TYPE=Debug" "-DWITH_DEBUG=1") |
34 | 49 | else |
35 | | - WITH_DEBUG_FLAG="" |
| 50 | + CMAKE_FLAGS+=("-DCMAKE_BUILD_TYPE=RelWithDebInfo") |
| 51 | +fi |
| 52 | + |
| 53 | +if [[ -n "${CMAKE_EXTRA_FLAGS:-}" ]]; then |
| 54 | + CMAKE_FLAGS+=($CMAKE_EXTRA_FLAGS) |
| 55 | +fi |
| 56 | + |
| 57 | +log_info "CMake flags: ${CMAKE_FLAGS[*]}" |
| 58 | +cmake "$SOURCE_DIR" "${CMAKE_FLAGS[@]}" || die "CMake configuration failed" |
| 59 | +log_info "CMake configuration complete" |
| 60 | + |
| 61 | +log_step "Step 2: Building binaries..." |
| 62 | +log_info "Building with $PARALLEL_JOBS parallel jobs..." |
| 63 | +make -j"${PARALLEL_JOBS}" || die "Build failed" |
| 64 | + |
| 65 | +if [[ ! -x "$BUILD_DIR/runtime_output_directory/mysqld" ]]; then |
| 66 | + die "mysqld not found in $BUILD_DIR/runtime_output_directory/ after build" |
36 | 67 | fi |
| 68 | +log_info "Build complete" |
| 69 | + |
| 70 | +log_step "Step 3: Building unit tests..." |
| 71 | +make -j"${PARALLEL_JOBS}" villagesql-unit-tests || die "Unit test build failed" |
| 72 | +log_info "Unit tests built" |
37 | 73 |
|
38 | | -cmake "$SOURCE_DIR" \ |
39 | | - -DCMAKE_INSTALL_PREFIX=/tmp/villagesql-install \ |
40 | | - $WITH_DEBUG_FLAG \ |
41 | | - -DWITH_SSL=system \ |
42 | | - -DMYSQL_MAINTAINER_MODE=OFF \ |
43 | | - -DDOWNLOAD_BOOST=1 \ |
44 | | - -DWITH_BOOST=/tmp/boost \ |
45 | | - -DCMAKE_C_COMPILER_LAUNCHER=ccache \ |
46 | | - -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ |
47 | | - ${CMAKE_EXTRA_FLAGS} |
48 | | - |
49 | | -echo "=== Build Information ===" |
50 | | - |
51 | | -# Build the project |
52 | | -echo "=== Building VillageSQL ===" |
53 | | -echo "Starting build with ${PARALLEL_JOBS} parallel jobs..." |
54 | | -make -j"${PARALLEL_JOBS}" |
55 | | - |
56 | | -echo "=== Building VillageSQL Unit Tests ===" |
57 | | -make -j"${PARALLEL_JOBS}" villagesql-unit-tests |
58 | | - |
59 | | -echo "=== Build Success ===" |
60 | | -echo "VillageSQL built successfully!" |
| 74 | +log_step "Build succeeded: $BUILD_DIR/runtime_output_directory/mysqld" |
0 commit comments