Skip to content
41 changes: 41 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,49 @@ jobs:
if: matrix.backend == 'dnnl'
run: |
tests/ctranslate2_test tests/data

build-and-test-cpp-x86_64-sanitizer:
runs-on: ubuntu-22.04
env:
CT2_VERBOSE: 1

steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- name: Install Intel oneAPI
run: |
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
sudo apt-key add *.PUB
sudo sh -c 'echo "deb https://apt.repos.intel.com/oneapi all main" > /etc/apt/sources.list.d/oneAPI.list'
sudo apt-get update

- name: Configure with MKL
env:
CT2_USE_MKL: 1
MKL_VERSION: 2023.0.0
run: |
sudo apt-get install -y intel-oneapi-mkl-devel-$MKL_VERSION
cmake -DCMAKE_INSTALL_PREFIX=$PWD/install -DBUILD_TESTS=ON -DENABLE_ADDRESS_SANITIZER=ON -DCMAKE_BUILD_TYPE=Debug .

- name: Build
run: |
make install

- name: Download test data
working-directory: tests/data/models
run: |
wget https://opennmt-models.s3.amazonaws.com/pi_lm_step_5000.pt
wget https://opennmt-models.s3.amazonaws.com/transliteration-aren-all.tar.gz
tar xf transliteration-aren-all.tar.gz

- name: Test AddressSanitizer
env:
CT2_USE_MKL: 1
run: |
ASAN_OPTIONS=detect_leaks=1:print_stats=1 tests/ctranslate2_test tests/data

build-and-test-cpp-arm64:
runs-on: ${{ matrix.os }}
env:
Expand Down
14 changes: 14 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ option(BUILD_TESTS "Compile the tests" OFF)
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
option(WITH_TENSOR_PARALLEL "Compile with NCCL and MPI backend" OFF)
option(WITH_FLASH_ATTN "Compile with Flash Attention 2" OFF)
option(ENABLE_ADDRESS_SANITIZER "ASAN" OFF)

MESSAGE(STATUS "Compiler Id: ${CMAKE_CXX_COMPILER_ID}")
MESSAGE(STATUS "Compiler Version: ${CMAKE_CXX_COMPILER_VERSION}")

if(ENABLE_PROFILING)
message(STATUS "Enable profiling support")
Expand Down Expand Up @@ -476,6 +480,16 @@ if (WITH_RUY)
list(APPEND LIBRARIES ruy)
endif()

IF (ENABLE_ADDRESS_SANITIZER AND (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "DEBUG"))
MESSAGE (STATUS "ENABLE_ADDRESS_SANITIZER: ENABLED")
set(ASAN_FLAGS " -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-common")
string(APPEND CMAKE_C_FLAGS ${ASAN_FLAGS})
string(APPEND CMAKE_CXX_FLAGS ${ASAN_FLAGS})
add_link_options(-fsanitize=address)
ELSEIF (ENABLE_ADDRESS_SANITIZER)
MESSAGE(FATAL_ERROR "SANITIZER requires Debug build type")
ENDIF ()

if (WITH_CUDA)
find_package(CUDA 11.0 REQUIRED)
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
Expand Down