-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathbuild-adp-aix.sh
More file actions
executable file
·146 lines (121 loc) · 5.73 KB
/
Copy pathbuild-adp-aix.sh
File metadata and controls
executable file
·146 lines (121 loc) · 5.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/usr/bin/env bash
# Builds agent-data-plane natively on AIX using the known-good IBM Rust SDK and AIX Toolbox GCC toolchain.
set -euo pipefail
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
BUILD_PROFILE="${BUILD_PROFILE:-aix-optimized-release}"
BUILD_FEATURES="${BUILD_FEATURES:-default}"
AIX_RUST_SDK_DIR="${AIX_RUST_SDK_DIR:-/opt/freeware/lib/RustSDK/1.92}"
ADP_AIX_CC="${ADP_AIX_CC:-/opt/freeware/bin/gcc}"
ADP_AIX_CXX="${ADP_AIX_CXX:-/opt/freeware/bin/g++}"
ADP_AIX_AR="${ADP_AIX_AR:-/usr/bin/ar}"
ADP_AIX_RANLIB="${ADP_AIX_RANLIB:-/usr/bin/ranlib}"
CARGO_HOME="${CARGO_HOME:-/opt/cargo-home}"
CARGO_TARGET_DIR="${CARGO_TARGET_DIR:-/opt/saluki/target}"
ADP_AIX_EXPECTED_CARGO_PREFIX="${ADP_AIX_EXPECTED_CARGO_PREFIX:-cargo 1.92.}"
ADP_AIX_EXPECTED_RUSTC_PREFIX="${ADP_AIX_EXPECTED_RUSTC_PREFIX:-rustc 1.92.}"
ADP_AIX_EXPECTED_GCC_PREFIX="${ADP_AIX_EXPECTED_GCC_PREFIX:-gcc (GCC) 13.}"
ADP_AIX_EXPECTED_GXX_PREFIX="${ADP_AIX_EXPECTED_GXX_PREFIX:-g++ (GCC) 13.}"
ADP_AIX_BUILD_DRY_RUN="${ADP_AIX_BUILD_DRY_RUN:-false}"
export PATH="${AIX_RUST_SDK_DIR}/bin:${CARGO_HOME}/bin:/opt/freeware/bin:/usr/sbin:/usr/bin:/bin:${PATH:-}"
export CC="${ADP_AIX_CC}"
export CXX="${ADP_AIX_CXX}"
export AR="${ADP_AIX_AR}"
export RANLIB="${ADP_AIX_RANLIB}"
export CARGO_HOME
export CARGO_TARGET_DIR
ADP_APP_VERSION_AUTO="$(grep -E '^version = "' "${repo_root}/bin/agent-data-plane/Cargo.toml" | head -n 1 | cut -d '"' -f 2)"
APP_GIT_HASH_AUTO="$(git -C "${repo_root}" rev-parse --short HEAD 2>/dev/null || echo not-in-git)"
export APP_FULL_NAME="${APP_FULL_NAME:-${ADP_APP_FULL_NAME:-Agent Data Plane}}"
export APP_SHORT_NAME="${APP_SHORT_NAME:-${ADP_APP_SHORT_NAME:-data-plane}}"
export APP_IDENTIFIER="${APP_IDENTIFIER:-${ADP_APP_IDENTIFIER:-adp}}"
export APP_GIT_HASH="${APP_GIT_HASH:-${ADP_APP_GIT_HASH:-${APP_GIT_HASH_AUTO}}}"
export APP_VERSION="${APP_VERSION:-${ADP_APP_VERSION:-${ADP_APP_VERSION_AUTO}}}"
# Unlike the Makefile, this script defaults APP_DEV_BUILD to "false", so it can't fall back to a placeholder
# timestamp: saluki-metadata rejects placeholder metadata on release builds. Stamp the current time instead.
APP_BUILD_TIME_AUTO="$(date -u '+%Y-%m-%dT%H:%M:%SZ')"
export APP_BUILD_TIME="${APP_BUILD_TIME:-${ADP_APP_BUILD_TIME:-${CI_PIPELINE_CREATED_AT:-${APP_BUILD_TIME_AUTO}}}}"
export APP_DEV_BUILD="${APP_DEV_BUILD:-${ADP_APP_DEV_BUILD:-false}}"
require_executable() {
local path="$1"
local label="$2"
if [[ ! -x "${path}" ]]; then
echo "build-adp-aix: missing ${label} at ${path}" >&2
exit 1
fi
}
require_command() {
local command_name="$1"
if ! command -v "${command_name}" >/dev/null 2>&1; then
echo "build-adp-aix: missing required command '${command_name}' in PATH" >&2
exit 1
fi
}
check_version_prefix() {
local executable="$1"
local label="$2"
local expected_prefix="$3"
local version
if [[ -z "${expected_prefix}" ]]; then
echo "[*] ${label}: version check skipped"
return
fi
version="$(${executable} --version | head -n 1)"
if [[ "${version}" != "${expected_prefix}"* ]]; then
echo "build-adp-aix: ${label} version '${version}' does not match expected prefix '${expected_prefix}'" >&2
echo "build-adp-aix: set the corresponding ADP_AIX_EXPECTED_*_PREFIX variable if this toolchain change is intentional" >&2
exit 1
fi
echo "[*] ${label}: ${version}"
}
print_environment() {
echo "AIX_RUST_SDK_DIR=${AIX_RUST_SDK_DIR}"
echo "CC=${CC}"
echo "CXX=${CXX}"
echo "AR=${AR}"
echo "RANLIB=${RANLIB}"
echo "CARGO_HOME=${CARGO_HOME}"
echo "CARGO_TARGET_DIR=${CARGO_TARGET_DIR}"
echo "ADP_AIX_EXPECTED_CARGO_PREFIX=${ADP_AIX_EXPECTED_CARGO_PREFIX}"
echo "ADP_AIX_EXPECTED_RUSTC_PREFIX=${ADP_AIX_EXPECTED_RUSTC_PREFIX}"
echo "ADP_AIX_EXPECTED_GCC_PREFIX=${ADP_AIX_EXPECTED_GCC_PREFIX}"
echo "ADP_AIX_EXPECTED_GXX_PREFIX=${ADP_AIX_EXPECTED_GXX_PREFIX}"
echo "BUILD_PROFILE=${BUILD_PROFILE}"
echo "BUILD_FEATURES=${BUILD_FEATURES}"
echo "APP_FULL_NAME=${APP_FULL_NAME}"
echo "APP_SHORT_NAME=${APP_SHORT_NAME}"
echo "APP_IDENTIFIER=${APP_IDENTIFIER}"
echo "APP_VERSION=${APP_VERSION}"
echo "APP_GIT_HASH=${APP_GIT_HASH}"
echo "APP_BUILD_TIME=${APP_BUILD_TIME}"
echo "APP_DEV_BUILD=${APP_DEV_BUILD}"
echo "cargo build --profile ${BUILD_PROFILE} --bin agent-data-plane --features ${BUILD_FEATURES}"
}
if [[ "${ADP_AIX_BUILD_DRY_RUN}" == "true" ]]; then
print_environment
exit 0
fi
if [[ "$(uname -s)" != "AIX" ]]; then
echo "build-adp-aix: this script must run on an AIX host." >&2
exit 1
fi
require_executable "${AIX_RUST_SDK_DIR}/bin/cargo" "IBM Open SDK cargo"
require_executable "${AIX_RUST_SDK_DIR}/bin/rustc" "IBM Open SDK rustc"
require_executable "${CC}" "AIX Toolbox GCC C compiler"
require_executable "${CXX}" "AIX Toolbox GCC C++ compiler"
require_executable "${AR}" "AIX system ar"
require_executable "${RANLIB}" "AIX system ranlib"
require_command protoc
check_version_prefix "${AIX_RUST_SDK_DIR}/bin/cargo" "cargo" "${ADP_AIX_EXPECTED_CARGO_PREFIX}"
check_version_prefix "${AIX_RUST_SDK_DIR}/bin/rustc" "rustc" "${ADP_AIX_EXPECTED_RUSTC_PREFIX}"
check_version_prefix "${CC}" "gcc" "${ADP_AIX_EXPECTED_GCC_PREFIX}"
check_version_prefix "${CXX}" "g++" "${ADP_AIX_EXPECTED_GXX_PREFIX}"
mkdir -p "${CARGO_HOME}" "${CARGO_TARGET_DIR}"
cd "${repo_root}"
print_environment
echo "[*] Fetching Cargo dependencies..."
cargo fetch
echo "[*] Building agent-data-plane for AIX..."
# cargo-auditable currently emits ELF/generic Unix linker inputs and flags that AIX's XCOFF
# linker rejects.
cargo build --profile "${BUILD_PROFILE}" --bin agent-data-plane --features "${BUILD_FEATURES}"
echo "[*] AIX ADP binary ready at ${CARGO_TARGET_DIR}/${BUILD_PROFILE}/agent-data-plane"