From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id A48F76ECDB; Thu, 24 Sep 2026 11:49:21 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org A48F76ECDB DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1790239761; bh=hfGGF5z5UMRH1MYyIptMWeLzuj7DBNIuJoZuK5RnZto=; h=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=QmFi1GcwSzlBxLqi5NEiSdVKQfqcYy/RzOndJkweuQCa8ufzb3tvGIhVX1kCusmeo EgbaE5VsP6+agPbTfqeRc/0WOkPF9pzaN8UZGZPlD9RgvtT4zBGme7cJPepBcUhOFJ p4xK/T2hUumtcdOKHF5BXtInpAEMpzuxjXBFu9zU= Received: from send129.i.mail.ru (send129.i.mail.ru [89.221.237.224]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 00DA16ECDB for ; Thu, 24 Sep 2026 11:49:19 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 00DA16ECDB Received: by exim-smtp-7cfc745659-7wndk with esmtpa (envelope-from ) id 1x9f8o-000000000nd-2Yry; Thu, 24 Sep 2026 11:49:19 +0300 Message-ID: <67760a66-15f3-41c2-bc20-16a2f9649a5f@tarantool.org> Date: Thu, 24 Sep 2026 11:49:18 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Sergey Bronnikov References: <9d4e2c67dcc3640a917a649cfcd2f19253ddd2f1.1786019520.git.e.temirgaleev@tarantool.org> <5798e367-3daa-4fe1-b9e0-5fec24d52082@tarantool.org> <1787929924.462961851@f483.i.mail.ru> Content-Language: en-US In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Mailru-Src: smtp X-4EC0790: 10 X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD9F6609298D81718F40BA1C13D6702DE9E76E11074E58BF11A182A05F538085040B33E715914E8BECA3DE06ABAFEAF6705192D44558492D1E4D0E3A7FDEF1DEF14C54459E63A6ECED5 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE783C1FBFE215D363AEA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637FE9EFE935CD7C6AE8638F802B75D45FF914D58D5BE9E6BC1A93B80C6DEB9DEE97C6FB206A91F05B204CE6282849B35D42E070BE324C7D3C4FD9F67648F3162D9F6B57BC7E64490618DEB871D839B73339E8FC8737B5C22498424CA1AAF98A6958941B15DA834481FCF19DD082D7633A0EF3E4896CB9E6436389733CBF5DBD5E9D5E8D9A59859A8B601F8F2FECC0250C8CC7F00164DA146DA6F5DAA56C3B73B237318B6A418E8EAB8090A508E0FED6299176DF2183F8FC7C02B18751C8956EF1CCD04E86FAF290E2DB606B96278B59C421DD303D21008E29813377AFFFEAFD269A417C69337E82CC2E827F84554CEF50127C277FBC8AE2E8BA83251EDC214901ED5E8D9A59859A8B691A3BB6A1257C390089D37D7C0E48F6C5571747095F342E88FB05168BE4CE3AF X-C1DE0DAB: 0D63561A33F958A5B410C1D500F162295002B1117B3ED6966FB6D2F2C857F655715D9AB585B0EB04823CB91A9FED034534781492E4B8EEAD86106675DE625196BDAD6C7F3747799A X-C8649E89: 1C3962B70DF3F0AD73CAD6646DEDE1918E10F71CB4DF9F96AB70F9BE574AE9C625B6776AC983F447FC0B9F89525902EE6F57B2FD27647F25E66C117BDB76D6591CBC8F3B589AA52482E5D4A6A1FF612DDADDCFE6EF024332853E7C5E20BB1BE243674C4F918CC59AB8341EE9D5BE9A0A56FB67A966AFD6FA8AFAB8B5ACCF40103CDBB33381B813A26536EB022892E5344C41F94D744909CEEF9E35A692215F79327F81E6EEE0AEB67A0F9F91F029B6AF33F2C28C22F508233FCF178C6DD14203 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu53w8ahmwBjZKM/YPHZyZHvz5uv+WouB9+ObcCpyrx6l7KImUglyhkEat/+ysWwi0gdhEs0JGjl6ggRWTy1haxBpVdbIX1nthFXOcIETfglQORZ0zpDET4Zrk3igikrdHlWERTUgNQk6HMOphDQ8QPJMA= X-Mailru-Sender: 6A96D93AFACA56590B5AE8E3A1251F74741CF2FD1DDB6A0D8BD48BD36611AD34CE31DA76BD08B36206B0621E20A3B51A8C34D365DA2E1307B60569B44082A3A3197AF8DA6C69D34BA7BD66BEAC8CCB0C4198E0F3ECE9B5443453F38A29522196 X-Mras: Ok Subject: Re: [Tarantool-patches] [PATCH luajit v3 2/3] ci: enabled sanitizer tests for macOS X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Evgeniy Temirgaleev via Tarantool-patches Reply-To: Evgeniy Temirgaleev Cc: tarantool-patches@dev.tarantool.org Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" Hi, Sergey! Thanks for review. Please see my answers and fixes. The branch is force pushed. 23.09.2026 17:14, Sergey Bronnikov wrote: > Hi, Evgeniy! > > > Thanks for the fixes! > > Please consider the following comments: > > 1. please fix an action name in the .github/actions/setup-sanitizers- > linux/README.md > > s/setup-sanitizers/setup-sanitizers-linux/ Thanks! Fixed. Also the README is extended with the cc_name optional input description (as for macOS) and with mentioning of CMAKE_PREFIX_PATH and CMAKE_C_COMPILER which are defined by the action. > > should we set CMAKE_PREFIX_PATH in .github/actions/setup-sanitizers- > linux/action.yml like we do in the macos version. Added with the description. > > the comment "# Try to install" is obvious and excess Removed. > > 2. there is inconsistency in the .github/actions/setup-sanitizers-macos/ > README.md and implementation: > > README says: "Requires input: cc_name" but the current implementation > has a default (and `required: false`). Fixed. > > In action.yml, `CMAKE_C_COMPILER=clang-21` (the name, not the full path) > and `CMAKE_PREFIX_PATH` are set, > > and `-DCMAKE_C_COMPILER=clang-21` is passed to the workflow. CMake looks > for the compiler in the `PATH` to > > detect it - `CMAKE_PREFIX_PATH` has no effect on this. Either the > required compiler is already in the runner's `PATH` > > (in which case `.github/actions/setup-macos` is unnecessary, as it > doesn't add anything to the `PATH`), > > or the configuration will fail. You should explicitly add `$(brew -- > prefix llvm@21)/bin` to the `PATH`. CMAKE_PREFIX_PATH is a project aware path to search the tools, includes, libraries, etc [1]. It is set to `brew --prefix ...` in the line 44. CMAKE_C_COMPILER with a name only and the CMAKE_PREFIX_PATH defined is ok to CMake's success of a search for the specified compiler on the first configuration run (in the clear environment). 1. https://cmake.org/cmake/help/v3.18/variable/CMAKE_PREFIX_PATH.html > > 3. I don't like that we have three copies of ASAN_OPTIONS in the same > workflow. It is better to fix this. Fixed. > > 4. .github/actions/setup-sanitizers-linux/action.yml: > > why CC was renamed to CMAKE_C_COMPILER? I would leave CC env var. > CMAKE_C_COMPILER is a CMake option name name, GH action > > knows nothing about CMake. The action defines CMAKE_C_COMPILER and CMAKE_PREFIX_PATH to pass to CMake's corresponding variables (the note is added to both action description). I think, it's easy to connect this in mind if names are same. > > Also, please fix CMake name: s/cmake/CMake/ I checked the `cmake` names in a patchset. Seems nothing to replace. > > > Sergey > > On 8/28/26 18:12, Evgeniy Temirgaleev wrote: >> Hi, Sergey! Thanks for review! >> Please, see my answers below. >> Fixes applied and the branch is force pushed. >> >> From: Sergey Bronnikov >> To: Evgeniy Temirgaleev , Sergey >> Kaplun >> Cc:tarantool-patches@dev.tarantool.org >> Date: Thursday, August 27, 2026 3:07 PM +03:00 >> >> Hi, Evgeniy, >> >> thanks for the patch! See my comments below. >> >> Sergey >> >> On 8/6/26 15:47, Evgeniy Temirgaleev wrote: >>> From: Temir Galeev >>> >>> The arm64 and x86_64 architectures with clang/gcc compiler were added >>> to the matrix. >>> --- >>> .../README.md | 0 >>> .../action.yml | 8 +- >>> .../actions/setup-sanitizers-macos/README.md | 15 +++ >>> .../actions/setup-sanitizers-macos/action.yml | 73 +++++++++++++ >>> .github/workflows/sanitizers-testing.yml | 101 ++++++++++++++++-- >>> 5 files changed, 186 insertions(+), 11 deletions(-) >>> rename .github/actions/{setup-sanitizers => setup-sanitizers-linux}/README.md (100%) >>> rename .github/actions/{setup-sanitizers => setup-sanitizers-linux}/action.yml (76%) >>> create mode 100644 .github/actions/setup-sanitizers-macos/README.md >>> create mode 100644 .github/actions/setup-sanitizers-macos/action.yml >>> >>> diff --git a/.github/actions/setup-sanitizers/README.md b/.github/actions/setup-sanitizers-linux/README.md >>> similarity index 100% >>> rename from .github/actions/setup-sanitizers/README.md >>> rename to .github/actions/setup-sanitizers-linux/README.md >>> diff --git a/.github/actions/setup-sanitizers/action.yml b/.github/actions/setup-sanitizers-linux/action.yml >>> similarity index 76% >>> rename from .github/actions/setup-sanitizers/action.yml >>> rename to .github/actions/setup-sanitizers-linux/action.yml >>> index 8642d553..18f5a75d 100644 >>> --- a/.github/actions/setup-sanitizers/action.yml >>> +++ b/.github/actions/setup-sanitizers-linux/action.yml >>> @@ -20,13 +20,17 @@ runs: >>> - name: Install build and test dependencies >>> run: | >>> apt -y update >>> + echo Available compilers: >>> + export CC_FAMILY=`echo ${CC_NAME} | sed 's/-.*$//'` >>> + apt list | grep -Pe "^${CC_FAMILY}-[0-9]+/" >>> + # Try to install >> >> Honestly, I don't get why we should available compilers on each run. >> >> I think this information is important for some cases to have it on >> hand. The example was present in the thread above: https:// >> lists.tarantool.org/pipermail/tarantool-patches/2026-August/030774.html >> >> Why we cannot >> >> hardcode compiler here? >> >> This patch is not intended to refactor linux sanitizers action, so the >> existing solution is used. >> Only info about available compilers was added: >> «Also, the 'setup-sanitizers-macos' action supplied with >> the 'list available compilers' commands in one of it's job. >> It helps to get the answer to the question: >> 'Which compiler we can select just now with our current environment?' >> The 'setup-sanitizers-linux' build job extended with such commands also.» >> >>> apt -y install ${CC_NAME} libstdc++-10-dev cmake ninja-build make perl >>> shell: bash >>> env: >>> CC_NAME: ${{ inputs.cc_name }} >>> - - name: Set specific C compiler as a default toolchain >>> + - name: Set specific C compiler as a default toolchain for cmake >> s/cmake/CMake/? >> >> Fixed. >> >>> run: | >>> - echo CC=${CC_NAME} | tee -a $GITHUB_ENV >>> + echo CMAKE_C_COMPILER=${CC_NAME} | tee -a $GITHUB_ENV >> s/tee -a/>>/ (feel free to ignore, previously tee was used) >> >> The ‘tee -a’ method allows the programmer to see the step’s result of >> the env definition. It’s used in the ‘setup’, ‘setup-linux’, ‘setup- >> macos’ actions and some workflows already. I think it’s a good >> approach to use. Also, there is an empty grep for the ‘>> $GITHUB_ENV’ >> method in our scripts. >> If there are the strong reasons to change it, I think it must be done >> in all places and in the separate refactoring patch. > Agree, let's keep as is. >> >>> shell: bash >>> env: >>> CC_NAME: ${{ inputs.cc_name }} >>> diff --git a/.github/actions/setup-sanitizers-macos/README.md b/.github/actions/setup-sanitizers-macos/README.md >>> new file mode 100644 >>> index 00000000..9ac5eb38 >>> --- /dev/null >>> +++ b/.github/actions/setup-sanitizers-macos/README.md >>> @@ -0,0 +1,15 @@ >>> +# Setup environment for sanitizers on macOS >>> + >>> +Action setups the environment on macOS runners (install requirements, setup the >>> +workflow environment, etc) for testing with sanitizers enabled. >>> + >>> +Requires input: >>> +- cc_name as versioned C compiler: gcc-ver or clang-ver. >>> + >>> +## How to use Github Action from Github workflow >>> + >>> +Add the following code to the running steps before LuaJIT configuration: >>> +``` >>> +- uses: ./.github/actions/setup-sanitizers-macos >>> + if: ${{ matrix.OS == 'macOS' }} >>> +``` >>> diff --git a/.github/actions/setup-sanitizers-macos/action.yml b/.github/actions/setup-sanitizers-macos/action.yml >>> new file mode 100644 >>> index 00000000..9836ea03 >>> --- /dev/null >>> +++ b/.github/actions/setup-sanitizers-macos/action.yml >>> @@ -0,0 +1,73 @@ >>> +name: Setup CI environment for testing with sanitizers on macOS >>> +description: Common part to tweak macOS CI runner environment for sanitizers >>> +inputs: >>> + cc_name: >>> + description: C compiler name (for example, gcc-12) >>> + required: false >>> + default: clang-21 >>> +runs: >>> + using: composite >>> + steps: >>> + - name: Get compiler version from cc_name >>> + shell: bash >>> + env: >>> + CC_NAME: ${{ inputs.cc_name }} >>> + run: | >>> + echo CC_VERSION=`echo ${CC_NAME} | sed 's/.*-//'` | tee -a $GITHUB_ENV >>> + - name: Get brew formula from cc_name >>> + shell: bash >>> + env: >>> + CC_FORMULA_NAME: |- >>> + ${{ case( >>> + startsWith(inputs.cc_name, 'gcc'), 'gcc', >>> + startsWith(inputs.cc_name, 'clang'), 'llvm', >>> + 'MISCONFIG' >>> + ) }} >>> + run: | >>> + echo CC_FORMULA=${CC_FORMULA_NAME}@${CC_VERSION} | tee -a $GITHUB_ENV >>> + echo Available formulas: `brew search ${CC_FORMULA_NAME}` >>> + - name: Setup CI environment >>> + uses: ./.github/actions/setup >>> + - name: Set CMAKE_BUILD_PARALLEL_LEVEL >>> + shell: bash >>> + run: | >>> + # Set CMAKE_BUILD_PARALLEL_LEVEL environment variable to >>> + # limit the number of parallel jobs for build/test step. >>> + NPROC=$(sysctl -n hw.logicalcpu 2>/dev/null) >>> + echo CMAKE_BUILD_PARALLEL_LEVEL=$(($NPROC + 1)) | tee -a $GITHUB_ENV >>> + - name: Set MACOSX_DEPLOYMENT_TARGERT >>> + shell: bash >>> + run: | >>> + # Set required MACOSX_DEPLOYMENT_TARGERT environment >>> + # variable for Makefile.original build. >>> + # Seehttps://github.com/LuaJIT/LuaJIT/issues/484, >>> + #https://github.com/LuaJIT/LuaJIT/issues/653. >>> + echo MACOSX_DEPLOYMENT_TARGET=$(sw_vers -productVersion) | tee -a $GITHUB_ENV >>> + - name: Install build and test dependencies >>> + shell: bash >>> + run: | >>> + # Install brew using the command from Homebrew repository >>> + # instructions:https://github.com/Homebrew/install. >>> + # XXX: 'echo' command below is required since brew >>> + # installation script obliges the one to enter a newline >>> + # for confirming the installation via Ruby script. >>> + brew update || >>> + echo | /usr/bin/ruby -e "$(curl -fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)" >>> + # Try to install the packages either upgrade it to avoid >>> + # of fails if the package already exists with the previous >>> + # version. >>> + brew install --force ${CC_FORMULA} cmake make ninja perl || >>> + brew upgrade ${CC_FORMULA} cmake make ninja perl >>> + - name: Set specific C compiler as a default toolchain for cmake >>> + shell: bash >>> + env: >>> + CC_NAME: ${{ inputs.cc_name }} >>> + run: | >>> + echo CMAKE_C_COMPILER=${CC_NAME} | tee -a $GITHUB_ENV >>> + echo CMAKE_PREFIX_PATH="`brew --prefix ${CC_FORMULA}`" | tee -a $GITHUB_ENV >>> + - name: Log installed compilers >>> + shell: bash >>> + run: | >>> + echo default clang: `clang --version` >>> + echo default gcc: `gcc --version` >>> + echo cmake compiler: `${CMAKE_PREFIX_PATH}/bin/${CMAKE_C_COMPILER} --version` >>> diff --git a/.github/workflows/sanitizers-testing.yml b/.github/workflows/sanitizers-testing.yml >>> index 4bf7d023..fe550b81 100644 >>> --- a/.github/workflows/sanitizers-testing.yml >>> +++ b/.github/workflows/sanitizers-testing.yml >>> @@ -31,17 +31,41 @@ jobs: >>> strategy: >>> fail-fast: false >>> matrix: >>> - # XXX: Let's start with only Linux/x86_64 >>> + ARCH: [ARM64, x86_64] >>> BUILDTYPE: [Debug, Release] >>> - CC: [gcc-10, clang-11] >>> + OS: [Linux, macOS] >>> + # There are different top-level versions available for Linux and macOS runners. >>> + CC: [gcc-10, clang-11, gcc-15, clang-21] >>> include: >>> - BUILDTYPE: Debug >>> CMAKEFLAGS: -DCMAKE_BUILD_TYPE=Debug -DLUA_USE_ASSERT=ON -DLUA_USE_APICHECK=ON >>> - BUILDTYPE: Release >>> CMAKEFLAGS: -DCMAKE_BUILD_TYPE=RelWithDebInfo >>> - runs-on: [self-hosted, regular, Linux, x86_64] >>> + exclude: >>> + # On current runners with Linux/ARM64 environment and >>> + # with LUAJIT_USE_SYSMALLOC=ON the system allocator returns addresses >>> + # with 48-bit set. Thus checkptrGC() fails with new Lua state pointer >>> + # and luajit fails to start with 'cannot create state: not enough memory' >>> + # error. So, we exclude these cases. >>> + - ARCH: ARM64 >>> + OS: Linux >>> + # Exclude nonsuitable OS/compiler pairs. >>> + - OS: macOS >>> + CC: gcc-10 >>> + - OS: macOS >>> + CC: clang-11 >>> + - OS: Linux >>> + CC: gcc-15 >>> + - OS: Linux >>> + CC: clang-21 >>> + # Exclude macOS/ARM64/gcc case due to some tests are failed. >>> + # Details:https://github.com/tarantool/tarantool/issues/13018 >>> + - ARCH: ARM64 >>> + OS: macOS >>> + CC: gcc-15 >>> + runs-on: [self-hosted, regular, '${{ matrix.OS }}', '${{ matrix.ARCH }}'] >>> name: > >>> - LuaJIT with ASan and UBSan (Linux/x86_64) >>> + LuaJIT with ASan and UBSan (${{ matrix.OS }}/${{ matrix.ARCH }}) >>> ${{ matrix.BUILDTYPE }} >>> CC:${{ matrix.CC }} >>> GC64:ON SYSMALLOC:ON >>> @@ -51,7 +75,13 @@ jobs: >>> fetch-depth: 0 >>> submodules: recursive >>> - name: setup Linux for sanitizers >>> - uses: ./.github/actions/setup-sanitizers >>> + if: ${{ matrix.OS == 'Linux' }} >>> + uses: ./.github/actions/setup-sanitizers-linux >>> + with: >>> + cc_name: ${{ matrix.CC }} >>> + - name: setup macOS for sanitizers >>> + if: ${{ matrix.OS == 'macOS' }} >>> + uses: ./.github/actions/setup-sanitizers-macos >>> with: >>> cc_name: ${{ matrix.CC }} >>> - name: configure >>> @@ -70,18 +100,46 @@ jobs: >>> cmake -S . -B ${{ env.BUILDDIR }} >>> -G Ninja >>> ${{ matrix.CMAKEFLAGS }} >>> + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} >>> + -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} >>> -DLUAJIT_ENABLE_GC64=ON >>> -DLUAJIT_USE_ASAN=ON >>> -DLUAJIT_USE_SYSMALLOC=ON >>> -DLUAJIT_USE_UBSAN=ON >>> + - name: Check for possible compiler misconfig >>> + working-directory: ${{ env.BUILDDIR }} >>> + env: >>> + CC_NAME: ${{ matrix.CC }} >>> + run: grep CMakeCache.txt -e CMAKE_C_COMPILER:STRING | grep ${CC_NAME} >>> - name: build >>> run: cmake --build . --parallel >>> working-directory: ${{ env.BUILDDIR }} >>> - - name: test >>> + >>> + # Enable as much checks as possible. See more info here: >> >> You say about enabling ASAN features, but some features are >> disabled below, >> >> please explain why these features are disabled. >> >>> + #https://github.com/google/sanitizers/wiki/AddressSanitizerFlags, >>> + #https://github.com/google/sanitizers/wiki/SanitizerCommonFlags. >>> + - name: setup sanitizer options for Linux >>> + if: ${{ matrix.OS == 'Linux' }} >>> + env: >>> + ASAN_OPTIONS: " \ >>> + detect_invalid_pointer_pairs=1: \ >>> + detect_leaks=1: \ >> already enabled by default >>> + detect_stack_use_after_return=1: \ >>> + dump_instruction_bytes=1: \ >>> + heap_profile=0: \ >> disabled by default >>> + print_suppressions=0: \ >> Why disabled? >>> + symbolize=1: \ >> enabled by default >> >> The patch doesn’t enable ASAN for Linux, so this part isn’t changed: >> the ASAN options for Linux is used as is. >> The ASAN options for macOS is just a copy of the Linux options with >> one exception. The detect_leaks was disabled with the explanation in a >> comment. >> The full option investigation and selection in not the main goal of >> the patch. The patch enables ASAN for macOS and it’s truly enabled for >> the options selected. >> I agree that the actualization of options for both Linux and macOS is >> a valuable job. I suggest to make a ticket for it. >> >>> + unmap_shadow_on_exit=1: \ >>> + " >>> + UBSAN_OPTIONS: " >>> + print_stacktrace=1 \ >>> + " >>> + run: | >>> + echo ASAN_OPTIONS=${ASAN_OPTIONS} | tee -a $GITHUB_ENV >>> + echo UBSAN_OPTIONS=${UBSAN_OPTIONS} | tee -a $GITHUB_ENV >> s/tee -a/>>/ (the same thing but usually used in Github documentation) >> >> Answered above. >> >>> + - name: setup sanitizer options for macOS (common) >>> + if: ${{ matrix.OS == 'macOS' && matrix.ARCH != 'ARM64' && matrix.CC != 'clang-21' }} >>> env: >>> - # Enable as much checks as possible. See more info here: >>> - #https://github.com/google/sanitizers/wiki/AddressSanitizerFlags, >>> - #https://github.com/google/sanitizers/wiki/SanitizerCommonFlags. >>> ASAN_OPTIONS: " \ >>> detect_invalid_pointer_pairs=1: \ >>> detect_leaks=1: \ >>> @@ -95,5 +153,30 @@ jobs: >>> UBSAN_OPTIONS: " >>> print_stacktrace=1 \ >>> " >>> + run: | >>> + echo ASAN_OPTIONS=${ASAN_OPTIONS} | tee -a $GITHUB_ENV >>> + echo UBSAN_OPTIONS=${UBSAN_OPTIONS} | tee -a $GITHUB_ENV >> s/tee -a/>>/ >> >> The same. >> >>> + - name: setup sanitizer options for macOS (ARM64/clang-21) >>> + if: ${{ matrix.OS == 'macOS' && matrix.ARCH == 'ARM64' && matrix.CC == 'clang-21' }} >>> + # detect_leaks is disabled due to some tests build is failed. >>> + # Details:https://github.com/tarantool/tarantool/issues/13019 >>> + env: >>> + ASAN_OPTIONS: " \ >>> + detect_invalid_pointer_pairs=1: \ >>> + detect_leaks=0: \ >>> + detect_stack_use_after_return=1: \ >>> + dump_instruction_bytes=1: \ >>> + heap_profile=0: \ >>> + print_suppressions=0: \ >>> + symbolize=1: \ >>> + unmap_shadow_on_exit=1: \ >> the same questions as above. Also, can we avoid duplication? >> >> May be we can use the file to accumulate the options and to update it >> in a specific steps. I suggest this task to the new >> ticket ‘ci: actualization of the ASAN options for Linux and macOS’ also. >> >>> + " >>> + UBSAN_OPTIONS: " >>> + print_stacktrace=1 \ >>> + " >>> + run: | >>> + echo ASAN_OPTIONS=${ASAN_OPTIONS} | tee -a $GITHUB_ENV >>> + echo UBSAN_OPTIONS=${UBSAN_OPTIONS} | tee -a $GITHUB_ENV >> s/tee -a/>>/ >> >> Answered above. >> >>> + - name: test >>> run: cmake --build . --parallel --target LuaJIT-test >>> working-directory: ${{ env.BUILDDIR }} >> >> The changes applied: >> ------------------------------------------------------------------------ >> diff --git a/.github/actions/setup-sanitizers-linux/action.yml >> b/.github/actions/setup-sanitizers-linux/action.yml >> index 9744e5dd..19314dca 100644 >> --- a/.github/actions/setup-sanitizers-linux/action.yml >> +++ b/.github/actions/setup-sanitizers-linux/action.yml >> @@ -28,7 +28,7 @@ runs: >>        shell: bash >>        env: >>          CC_NAME: ${{ inputs.cc_name }} >> -    - name: Set specific C compiler as a default toolchain for cmake >> +    - name: Set specific C compiler as a default toolchain for CMake. >>        run: | >>          echo CMAKE_C_COMPILER=${CC_NAME} | tee -a $GITHUB_ENV >>        shell: bash >> diff --git a/.github/actions/setup-sanitizers-macos/action.yml >> b/.github/actions/setup-sanitizers-macos/action.yml >> index d2160faa..740943af 100644 >> --- a/.github/actions/setup-sanitizers-macos/action.yml >> +++ b/.github/actions/setup-sanitizers-macos/action.yml >> @@ -35,7 +35,7 @@ runs: >>          # of fails if the package already exists with the previous >>          # version. >>          brew install --force ${CC_FORMULA} || brew upgrade ${CC_FORMULA} >> -    - name: Set specific C compiler as a default toolchain for cmake >> +    - name: Set specific C compiler as a default toolchain for CMake. >>        shell: bash >>        env: >>          CC_NAME: ${{ inputs.cc_name }} >> -- >> Best regards, >> Evgeniy Temirgaleev -- diff --git a/.github/actions/setup-sanitizers-linux/README.md b/.github/actions/setup-sanitizers-linux/README.md index 3aa9e214..853550c4 100644 --- a/.github/actions/setup-sanitizers-linux/README.md +++ b/.github/actions/setup-sanitizers-linux/README.md @@ -3,10 +3,19 @@ Action setups the environment on Linux runners (install requirements, setup the workflow environment, etc) for testing with sanitizers enabled. +Optional input: +- cc_name as versioned C compiler: gcc-ver or clang-ver. + ## How to use Github Action from Github workflow Add the following code to the running steps before LuaJIT configuration: ``` -- uses: ./.github/actions/setup-sanitizers +- uses: ./.github/actions/setup-sanitizers-linux if: ${{ matrix.OS == 'Linux' }} ``` + +Pass `CMAKE_PREFIX_PATH` and `CMAKE_C_COMPILER` to CMake: +``` + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} +``` diff --git a/.github/actions/setup-sanitizers-linux/action.yml b/.github/actions/setup-sanitizers-linux/action.yml index 19314dca..530b45a7 100644 --- a/.github/actions/setup-sanitizers-linux/action.yml +++ b/.github/actions/setup-sanitizers-linux/action.yml @@ -23,14 +23,18 @@ runs: echo Available compilers: export CC_FAMILY=`echo ${CC_NAME} | sed 's/-.*$//'` apt list | grep -Pe "^${CC_FAMILY}-[0-9]+/" - # Try to install apt -y install ${CC_NAME} libstdc++-10-dev cmake ninja-build make perl shell: bash env: CC_NAME: ${{ inputs.cc_name }} - name: Set specific C compiler as a default toolchain for CMake. + # CMAKE_PREFIX_PATH is set to empty string (it's default value [1]) + # explicitly to conform the action description. Special prefix is not + # needed due to the system wide installed tools is used. + # 1. https://cmake.org/cmake/help/v3.18/variable/CMAKE_PREFIX_PATH.html run: | echo CMAKE_C_COMPILER=${CC_NAME} | tee -a $GITHUB_ENV + echo CMAKE_PREFIX_PATH= | tee -a $GITHUB_ENV shell: bash env: CC_NAME: ${{ inputs.cc_name }} diff --git a/.github/actions/setup-sanitizers-macos/README.md b/.github/actions/setup-sanitizers-macos/README.md index 9ac5eb38..a97f533c 100644 --- a/.github/actions/setup-sanitizers-macos/README.md +++ b/.github/actions/setup-sanitizers-macos/README.md @@ -3,7 +3,7 @@ Action setups the environment on macOS runners (install requirements, setup the workflow environment, etc) for testing with sanitizers enabled. -Requires input: +Optional input: - cc_name as versioned C compiler: gcc-ver or clang-ver. ## How to use Github Action from Github workflow @@ -13,3 +13,9 @@ Add the following code to the running steps before LuaJIT configuration: - uses: ./.github/actions/setup-sanitizers-macos if: ${{ matrix.OS == 'macOS' }} ``` + +Pass `CMAKE_PREFIX_PATH` and `CMAKE_C_COMPILER` to CMake: +``` + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} +``` diff --git a/.github/workflows/sanitizers-testing.yml b/.github/workflows/sanitizers-testing.yml index fe550b81..713434c0 100644 --- a/.github/workflows/sanitizers-testing.yml +++ b/.github/workflows/sanitizers-testing.yml @@ -118,27 +118,7 @@ jobs: # Enable as much checks as possible. See more info here: # https://github.com/google/sanitizers/wiki/AddressSanitizerFlags, # https://github.com/google/sanitizers/wiki/SanitizerCommonFlags. - - name: setup sanitizer options for Linux - if: ${{ matrix.OS == 'Linux' }} - env: - ASAN_OPTIONS: " \ - detect_invalid_pointer_pairs=1: \ - detect_leaks=1: \ - detect_stack_use_after_return=1: \ - dump_instruction_bytes=1: \ - heap_profile=0: \ - print_suppressions=0: \ - symbolize=1: \ - unmap_shadow_on_exit=1: \ - " - UBSAN_OPTIONS: " - print_stacktrace=1 \ - " - run: | - echo ASAN_OPTIONS=${ASAN_OPTIONS} | tee -a $GITHUB_ENV - echo UBSAN_OPTIONS=${UBSAN_OPTIONS} | tee -a $GITHUB_ENV - - name: setup sanitizer options for macOS (common) - if: ${{ matrix.OS == 'macOS' && matrix.ARCH != 'ARM64' && matrix.CC != 'clang-21' }} + - name: setup common sanitizer options env: ASAN_OPTIONS: " \ detect_invalid_pointer_pairs=1: \ @@ -156,27 +136,14 @@ jobs: run: | echo ASAN_OPTIONS=${ASAN_OPTIONS} | tee -a $GITHUB_ENV echo UBSAN_OPTIONS=${UBSAN_OPTIONS} | tee -a $GITHUB_ENV - - name: setup sanitizer options for macOS (ARM64/clang-21) + - name: update sanitizer options for macOS (ARM64/clang-21) if: ${{ matrix.OS == 'macOS' && matrix.ARCH == 'ARM64' && matrix.CC == 'clang-21' }} # detect_leaks is disabled due to some tests build is failed. # Details: https://github.com/tarantool/tarantool/issues/13019 env: - ASAN_OPTIONS: " \ - detect_invalid_pointer_pairs=1: \ - detect_leaks=0: \ - detect_stack_use_after_return=1: \ - dump_instruction_bytes=1: \ - heap_profile=0: \ - print_suppressions=0: \ - symbolize=1: \ - unmap_shadow_on_exit=1: \ - " - UBSAN_OPTIONS: " - print_stacktrace=1 \ - " + ASAN_OPTIONS_FIX: ":detect_leaks=0:" run: | - echo ASAN_OPTIONS=${ASAN_OPTIONS} | tee -a $GITHUB_ENV - echo UBSAN_OPTIONS=${UBSAN_OPTIONS} | tee -a $GITHUB_ENV + echo ASAN_OPTIONS=${{ env.ASAN_OPTIONS }}${ASAN_OPTIONS_FIX} | tee -a $GITHUB_ENV - name: test run: cmake --build . --parallel --target LuaJIT-test working-directory: ${{ env.BUILDDIR }} -- Best regards, Evgeniy Temirgaleev