Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 25 additions & 3 deletions .github/actions/build-lib/action.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
name: Build OS
description: Build for the current OS
inputs:
build-type:
description: 'Build type: normal, asan, or all'
required: false
default: 'normal'
enable-asan:
description: 'Enable Address Sanitizer build (deprecated: use build-type instead)'
required: false
default: 'false'
runs:
using: composite
steps:
Expand All @@ -9,14 +18,27 @@ runs:
registry-url: "https://npm.pkg.github.com"
scope: "@mvrdevelopment"

# Normal builds (when build-type is 'normal' or 'all')
- name: Build Linux
if: runner.os == 'Linux'
if: runner.os == 'Linux' && (inputs.build-type == 'normal' || inputs.build-type == 'all')
uses: ./libMvrGdtf/.github/actions/build-ubuntu

- name: Build Windows
if: runner.os == 'Windows'
if: runner.os == 'Windows' && (inputs.build-type == 'normal' || inputs.build-type == 'all')
uses: ./libMvrGdtf/.github/actions/build-windows

- name: Build macOS
if: runner.os == 'macOS'
if: runner.os == 'macOS' && (inputs.build-type == 'normal' || inputs.build-type == 'all')
uses: ./libMvrGdtf/.github/actions/build-macos

- name: Build Windows with ASAN
if: runner.os == 'Windows' && (inputs.build-type == 'asan' || inputs.build-type == 'all' || inputs.enable-asan == 'true')
uses: ./libMvrGdtf/.github/actions/build-windows-asan

- name: Build macOS ARM64 with ASAN
if: runner.os == 'macOS' && (inputs.build-type == 'asan' || inputs.build-type == 'all' || inputs.enable-asan == 'true')
uses: ./libMvrGdtf/.github/actions/build-macos-arm-asan

- name: Build Linux with ASAN
if: runner.os == 'Linux' && (inputs.build-type == 'asan' || inputs.build-type == 'all' || inputs.enable-asan == 'true')
uses: ./libMvrGdtf/.github/actions/build-ubuntu
101 changes: 101 additions & 0 deletions .github/actions/build-macos-arm-asan/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
name: 'Build macOS ARM64 with ASAN'
description: 'Build the package for macOS ARM64 with Address Sanitizer using Clang'
runs:
using: "composite"
steps:
# Cache Xerces-C to avoid rebuilding (saves ~5-8 minutes on cache hit)
- name: Cache Xerces-C ARM64 ASAN build
uses: actions/cache@v4
id: cache-xerces
with:
path: xerces-c/_build_mac_arm_asan
key: xerces-c-3.3.0-macos-arm64-asan-${{ runner.os }}-v1
restore-keys: |
xerces-c-3.3.0-macos-arm64-asan-${{ runner.os }}-

- name: Xerces-C - prepare
if: steps.cache-xerces.outputs.cache-hit != 'true'
shell: bash
run: |
mkdir -p xerces-c
cd xerces-c
curl -sL -o xerces-c.zip https://dlcdn.apache.org/xerces/c/3/sources/xerces-c-3.3.0.zip
tar -xf xerces-c.zip --strip-components=1

- name: Xerces-C - build arm64 with ASAN
if: steps.cache-xerces.outputs.cache-hit != 'true'
shell: bash
working-directory: xerces-c
run: |
./configure --disable-shared --prefix=$(pwd)/_build_mac_arm_asan CFLAGS="-arch arm64 -fsanitize=address -g -O2" CXXFLAGS="-arch arm64 -fsanitize=address -g -O2" LDFLAGS="-fsanitize=address" --enable-xmlch-uint16_t
make -j$(sysctl -n hw.ncpu)
make install

# Note: BUILD_MVR_XCHANGE is disabled - Boost not needed for ASAN builds

# Boost - prepare (needed for MVR_XCHANGE)
- name: Boost - prepare
shell: bash
run: |
mkdir boost
cd boost
curl -o boost.zip https://archives.boost.io/release/1.86.0/source/boost_1_86_0.zip
tar -xf boost.zip --strip-components=1

- name: libMVRGdtf - build ARM64 with ASAN [NO-MZ]
shell: bash
working-directory: libMvrGdtf
run: |
mkdir build_mac_arm_asan_no_mz
cd build_mac_arm_asan_no_mz
cmake .. \
-DCMAKE_C_FLAGS="-arch arm64 -fsanitize=address -g -O2" \
-DCMAKE_CXX_FLAGS="-arch arm64 -fsanitize=address -g -O2" \
-DCMAKE_EXE_LINKER_FLAGS="-fsanitize=address" \
-DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=address" \
-DENABLE_ASAN=TRUE \
-DDO_NOT_INCLUDE_MINI_ZIP=true \
-DCMAKE_INSTALL_PREFIX:PATH=libs \
-DXERCES_INCLUDE_PATH="../xerces-c/_build_mac_arm_asan/include;../xerces/src" \
-DXERCES_LIB_PATH="../xerces/_build_mac_arm_asan/lib" \
-DXERCES_ROOT_PATH="../xerces-c/_build_mac_arm_asan" \
-DLIB_OUTPUT_NAME="MvrGdtf_ASAN"
make -j$(sysctl -n hw.ncpu)
make install
echo "Built library with ASAN for ARM64"
lipo -archs ../libs/libMvrGdtf_ASAN_NO_MZ.a
libtool -static -o ../libs/libMvrGdtf_ASAN_NO_MZ-all.a ../libs/libMvrGdtf_ASAN_NO_MZ.a ./libs/lib/libmdns_cpp.a ../../xerces-c/_build_mac_arm_asan/lib/libxerces-c.a
mv -f ../libs/libMvrGdtf_ASAN_NO_MZ-all.a ../libs/libMvrGdtf_ASAN_NO_MZ.a

- name: libMVRGdtf - build ARM64 with ASAN
shell: bash
working-directory: libMvrGdtf
run: |
mkdir build_mac_arm_asan
cd build_mac_arm_asan
cmake .. \
-DCMAKE_C_FLAGS="-arch arm64 -fsanitize=address -g -O2" \
-DCMAKE_CXX_FLAGS="-arch arm64 -fsanitize=address -g -O2" \
-DCMAKE_EXE_LINKER_FLAGS="-fsanitize=address" \
-DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=address" \
-DENABLE_ASAN=TRUE \
-DCMAKE_INSTALL_PREFIX:PATH=libs \
-DXERCES_INCLUDE_PATH="../xerces-c/_build_mac_arm_asan/include;../xerces/src" \
-DXERCES_LIB_PATH="../xerces/_build_mac_arm_asan/lib" \
-DXERCES_ROOT_PATH="../xerces-c/_build_mac_arm_asan" \
-DLIB_OUTPUT_NAME="MvrGdtf_ASAN"
make -j$(sysctl -n hw.ncpu)
make install
echo "Built library with ASAN for ARM64"
lipo -archs ../libs/libMvrGdtf_ASAN.a
libtool -static -o ../libs/libMvrGdtf_ASAN-all.a ../libs/libMvrGdtf_ASAN.a ./libs/lib/libmdns_cpp.a ../../xerces-c/_build_mac_arm_asan/lib/libxerces-c.a
mv -f ../libs/libMvrGdtf_ASAN-all.a ../libs/libMvrGdtf_ASAN.a

- name: Prepare package
shell: bash
working-directory: libMvrGdtf
run: |
mkdir -p output/include
cp -r src/include/* output/include/
mkdir -p output/lib
cp -r libs/* output/lib/
Loading
Loading