Skip to content

Commit c19dc30

Browse files
committed
Update CIL extractor scripts for new environment variables and platform support
Refactored autobuild.sh and index-files.sh to use CODEQL_EXTRACTOR_CIL_* environment variables instead of CODEQL_EXTRACTOR_CSHARPIL_*. Improved index-files.sh to support platform-specific extractor DLLs and batch extraction using a file list. Updated build-macos.sh to ensure copied tool scripts are executable.
1 parent e4c6fd0 commit c19dc30

3 files changed

Lines changed: 46 additions & 37 deletions

File tree

binary/build-macos.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ build_cil() {
125125
# Copy tool scripts
126126
mkdir -p "${cil_folder}/tools"
127127
cp "${SCRIPT_DIR}/tools/cil/"* "${cil_folder}/tools/"
128+
chmod +x "${cil_folder}/tools/"*.sh
128129

129130
echo "CIL extractor built successfully to ${cil_folder}"
130131
}

binary/tools/cil/autobuild.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
set -eu
44

5-
if [[ -z "${CODEQL_EXTRACTOR_CSHARPIL_ROOT}" ]]; then
6-
export CODEQL_EXTRACTOR_CSHARPIL_ROOT="$(dirname "$(dirname "${BASH_SOURCE[0]}")")"
5+
if [[ -z "${CODEQL_EXTRACTOR_CIL_ROOT:-}" ]]; then
6+
export CODEQL_EXTRACTOR_CIL_ROOT="$(dirname "$(dirname "${BASH_SOURCE[0]}")")"
77
fi
88

99
# For C# IL, autobuild and buildless extraction are the same - just extract the DLLs
10-
exec "${CODEQL_EXTRACTOR_CSHARPIL_ROOT}/tools/index.sh"
10+
exec "${CODEQL_EXTRACTOR_CIL_ROOT}/tools/index-files.sh"

binary/tools/cil/index-files.sh

Lines changed: 42 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2,52 +2,60 @@
22

33
set -eu
44

5-
if [[ -z "${CODEQL_EXTRACTOR_CSHARPIL_ROOT:-}" ]]; then
6-
export CODEQL_EXTRACTOR_CSHARPIL_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5+
# Get the extractor root directory
6+
if [[ -z "${CODEQL_EXTRACTOR_CIL_ROOT:-}" ]]; then
7+
export CODEQL_EXTRACTOR_CIL_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
78
fi
89

910
# Get the trap directory from CodeQL environment
10-
TRAP_DIR="${CODEQL_EXTRACTOR_CSHARPIL_TRAP_DIR}"
11-
SRC_ARCHIVE="${CODEQL_EXTRACTOR_CSHARPIL_SOURCE_ARCHIVE_DIR}"
11+
TRAP_DIR="${CODEQL_EXTRACTOR_CIL_TRAP_DIR}"
12+
SRC_ARCHIVE="${CODEQL_EXTRACTOR_CIL_SOURCE_ARCHIVE_DIR}"
1213

1314
echo "C# IL Extractor: Starting extraction"
1415
echo "Source root: $(pwd)"
1516
echo "TRAP directory: ${TRAP_DIR}"
17+
echo "Extractor root: ${CODEQL_EXTRACTOR_CIL_ROOT}"
1618

1719
# Ensure TRAP directory exists
1820
mkdir -p "${TRAP_DIR}"
21+
mkdir -p "${SRC_ARCHIVE}"
22+
23+
# Determine the platform-specific extractor path
24+
case "$(uname -s)-$(uname -m)" in
25+
Darwin-arm64)
26+
PLATFORM_DIR="osx-arm64"
27+
;;
28+
Darwin-x86_64)
29+
PLATFORM_DIR="osx-x64"
30+
;;
31+
Linux-x86_64)
32+
PLATFORM_DIR="linux-x64"
33+
;;
34+
*)
35+
PLATFORM_DIR="win64"
36+
;;
37+
esac
38+
39+
EXTRACTOR_DLL="${CODEQL_EXTRACTOR_CIL_ROOT}/tools/${PLATFORM_DIR}/Semmle.Extraction.CSharp.IL.dll"
40+
41+
if [[ ! -f "${EXTRACTOR_DLL}" ]]; then
42+
echo "ERROR: Extractor not found at ${EXTRACTOR_DLL}"
43+
exit 1
44+
fi
45+
46+
# Create a temporary file list
47+
FILE_LIST=$(mktemp)
48+
trap "rm -f ${FILE_LIST}" EXIT
1949

2050
# Find all DLL and EXE files in the source root
21-
EXTRACTOR_PATH="${CODEQL_EXTRACTOR_CSHARPIL_ROOT}/extractor/Semmle.Extraction.CSharp.IL/bin/Debug/net8.0/Semmle.Extraction.CSharp.IL"
51+
find . -type f \( -name "*.dll" -o -name "*.exe" \) > "${FILE_LIST}"
2252

23-
if [[ ! -f "${EXTRACTOR_PATH}" ]]; then
24-
echo "ERROR: Extractor not found at ${EXTRACTOR_PATH}"
25-
echo "Please build the extractor first with: dotnet build extractor/Semmle.Extraction.CSharp.IL"
26-
exit 1
53+
FILE_COUNT=$(wc -l < "${FILE_LIST}" | tr -d ' ')
54+
echo "Found ${FILE_COUNT} assemblies to extract"
55+
56+
if [[ "${FILE_COUNT}" -gt 0 ]]; then
57+
# Run the extractor with the file list
58+
dotnet "${EXTRACTOR_DLL}" "${FILE_LIST}"
2759
fi
2860

29-
# Extract all DLL and EXE files
30-
FILE_COUNT=0
31-
find . -type f \( -name "*.dll" -o -name "*.exe" \) | while read -r assembly; do
32-
echo "Extracting: ${assembly}"
33-
34-
# Normalize the assembly path (remove leading ./)
35-
normalized_path="${assembly#./}"
36-
37-
# Create a unique trap file name based on the assembly path
38-
TRAP_FILE="${TRAP_DIR}/$(echo "${assembly}" | sed 's/[^a-zA-Z0-9]/_/g').trap"
39-
40-
# Run the extractor
41-
"${EXTRACTOR_PATH}" "${assembly}" "${TRAP_FILE}" || echo "Warning: Failed to extract ${assembly}"
42-
43-
# Copy the assembly to the source archive
44-
ARCHIVE_PATH="${SRC_ARCHIVE}/${normalized_path}"
45-
ARCHIVE_DIR="$(dirname "${ARCHIVE_PATH}")"
46-
mkdir -p "${ARCHIVE_DIR}"
47-
cp "${assembly}" "${ARCHIVE_PATH}"
48-
echo "Archived: ${assembly} -> ${ARCHIVE_PATH}"
49-
50-
FILE_COUNT=$((FILE_COUNT + 1))
51-
done
52-
53-
echo "C# IL Extractor: Completed extraction of ${FILE_COUNT} assemblies"
61+
echo "C# IL Extractor: Completed extraction"

0 commit comments

Comments
 (0)