Skip to content

Commit 09fb839

Browse files
committed
Update integration
Fix sanitizer build
1 parent b4f366b commit 09fb839

File tree

7 files changed

+80
-20
lines changed

7 files changed

+80
-20
lines changed

.github/workflows/linux.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ jobs:
2525
ubuntu-22.04-clang-11,
2626
# ubuntu-22.04-clang-12,
2727
ubuntu-22.04-clang-13,
28-
ubuntu-22.04-clang-14
28+
ubuntu-22.04-clang-14,
29+
ubuntu-22.04-clang-15
2930
]
3031
config: [Debug, Release]
3132
include:
@@ -84,11 +85,18 @@ jobs:
8485
compiler: clang
8586
version: 14
8687

88+
- name: ubuntu-22.04-clang-15
89+
os: ubuntu-22.04
90+
compiler: clang
91+
version: 15
92+
8793
steps:
8894
- uses: actions/checkout@v3
8995

9096
- name: Dependencies
9197
run: |
98+
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
99+
sudo apt-add-repository "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-15 main"
92100
sudo apt update
93101
sudo apt install -y ninja-build
94102
sudo apt install -y libicu-dev

.github/workflows/windows.yml

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,12 @@ jobs:
1616
matrix:
1717
name: [
1818
windows-2019-msvc2019,
19+
windows-2019-msvc2019-win32,
20+
windows-2019-msvc2019-arm64,
1921
# windows-2019-msvc2019-clang,
20-
windows-2022-msvc2022
22+
windows-2022-msvc2022,
23+
windows-2022-msvc2022-win32,
24+
windows-2022-msvc2022-arm64
2125
# windows-2022-msvc2022-clang
2226
]
2327
config: [Debug, Release]
@@ -27,6 +31,18 @@ jobs:
2731
compiler: cl
2832
version: Visual Studio 16 2019
2933

34+
- name: windows-2019-msvc2019-win32
35+
os: windows-2019
36+
compiler: cl
37+
version: Visual Studio 16 2019
38+
architecture: -A Win32
39+
40+
- name: windows-2019-msvc2019-arm64
41+
os: windows-2019
42+
compiler: cl
43+
version: Visual Studio 16 2019
44+
architecture: -A ARM64
45+
3046
# clang-tools are not installed
3147
# - name: windows-2019-msvc2019-clang
3248
# os: windows-2019
@@ -39,6 +55,18 @@ jobs:
3955
compiler: cl
4056
version: Visual Studio 17 2022
4157

58+
- name: windows-2022-msvc2022-win32
59+
os: windows-2022
60+
compiler: cl
61+
version: Visual Studio 17 2022
62+
architecture: -A Win32
63+
64+
- name: windows-2022-msvc2022-arm64
65+
os: windows-2022
66+
compiler: cl
67+
version: Visual Studio 17 2022
68+
architecture: -A ARM64
69+
4270
# clang-tools are not installed
4371
# - name: windows-2022-msvc2022-clang
4472
# os: windows-2022
@@ -72,15 +100,18 @@ jobs:
72100

73101
- name: Configure CMake
74102
working-directory: ${{runner.workspace}}/build
75-
run: cmake $Env:GITHUB_WORKSPACE -G"${{matrix.version}}" ${{matrix.toolchain}} -DCMAKE_BUILD_TYPE:STRING=${{matrix.config}}
103+
run: cmake $Env:GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE:STRING=${{matrix.config}} -G"${{matrix.version}}" ${{matrix.architecture}} ${{matrix.toolchain}}
76104

77105
- name: Build
78106
working-directory: ${{runner.workspace}}/build
79107
run: cmake --build . --config ${{matrix.config}}
80108

81109
- name: Test
82110
working-directory: ${{runner.workspace}}/build
83-
run: ctest --output-on-failure -C ${{matrix.config}}
111+
run: |
112+
if ( "${{matrix.architecture}}" -ne "-A ARM64" ) {
113+
ctest --output-on-failure -C ${{matrix.config}}
114+
}
84115
85116
- name: Perform CodeQL Analysis
86117
uses: github/codeql-action/analyze@v2

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# sqlite_functions
2-
Sqlite3 function extension in most native and modern C++17 or C++20.
2+
Sqlite3 function extension in most native and modern C++23 or C++20 or at least C+17.
33

44
## Build
55
```bash

cmake/env.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ set(CMAKE ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
4646

4747
# Force C++23 or C++20 if available
4848
include(CheckCXXCompilerFlag)
49-
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
49+
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" OR CMAKE_CXX_COMPILER_ID MATCHES "[cC][lL][aA][nN][gG]" AND WIN32)
5050
check_cxx_compiler_flag(/std:c++23 HAVE_FLAG_STD_CXX23)
5151
check_cxx_compiler_flag(/std:c++20 HAVE_FLAG_STD_CXX20)
5252
else()

cmake/find_package.cmake

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "[cC][lL][aA][nN][gG]")
3535
set(CMAKE_REQUIRED_FLAGS "-Wno-unreachable-code-return -Wno-zero-as-null-pointer-constant")
3636
endif()
3737
find_package(Threads REQUIRED)
38+
unset(CMAKE_REQUIRED_FLAGS)
3839

3940
if(UNIX AND NOT APPLE)
4041
set(ICU_ROOT /usr/lib/x86_64-linux-gnu/)
@@ -43,4 +44,6 @@ elseif(APPLE)
4344
endif()
4445
find_package(ICU 66 COMPONENTS i18n uc)
4546

46-
find_package(SQLite3)
47+
if(NOT WIN32)
48+
find_package(SQLite3)
49+
endif()

cmake/sanitizer_options.cmake

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ if(SANITIZER_ADDRESS)
3939
endif()
4040
endif()
4141

42-
# gcc needs ignore link order
42+
# gcc needs LD_PRELOAD of libasan and ignore link order
4343
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
4444
get_property(ALL_TESTS DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY TESTS)
4545
set_tests_properties(${ALL_TESTS} PROPERTIES ENVIRONMENT ASAN_OPTIONS=verify_asan_link_order=0)
@@ -51,6 +51,10 @@ if(SANITIZER_ADDRESS)
5151

5252
# copy runtime library
5353
get_filename_component(ASAN_DIR ${CMAKE_CXX_COMPILER} DIRECTORY)
54-
file(COPY ${ASAN_DIR}/clang_rt.asan_dbg_dynamic-x86_64.dll DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
54+
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
55+
file(COPY ${ASAN_DIR}/clang_rt.asan_dbg_dynamic-i386.dll DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
56+
else()
57+
file(COPY ${ASAN_DIR}/clang_rt.asan_dbg_dynamic-x86_64.dll DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
58+
endif()
5559
endif()
5660
endif()

cmake/sanitizers.cmake

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
include(CheckCXXCompilerFlag)
3232

33-
if(UNIX)
33+
if(UNIX OR CMAKE_CXX_COMPILER_ID MATCHES "[cC][lL][aA][nN][gG]")
3434
set(CMAKE_REQUIRED_FLAGS -fsanitize=address)
3535
check_cxx_compiler_flag(-fsanitize=address HAVE_ASAN)
3636

@@ -58,61 +58,75 @@ else()
5858
set(CMAKE_REQUIRED_FLAGS /fsanitize=fuzzer)
5959
check_cxx_compiler_flag(/fsanitize=fuzzer HAVE_FUZZER)
6060
endif()
61+
unset(CMAKE_REQUIRED_FLAGS)
6162

6263
if(HAVE_ASAN)
6364
option(SANITIZER_ADDRESS "Build with address sanitizer" ON)
6465
if(SANITIZER_ADDRESS)
6566
if(UNIX)
66-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fsanitize-address-use-after-scope -fno-optimize-sibling-calls")
67+
set(SANITIZER_ADDRESS_FLAGS "-fsanitize=address -fno-omit-frame-pointer -fsanitize-address-use-after-scope -fno-optimize-sibling-calls")
6768
else()
68-
set(EXTRA_CXX_FLAGS /fsanitize=address)
69-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXX_FLAGS}")
69+
set(SANITIZER_ADDRESS_FLAGS /fsanitize=address)
7070
endif()
71+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_ADDRESS_FLAGS}")
72+
set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} ${SANITIZER_ADDRESS_FLAGS}")
7173
endif()
7274
endif()
7375

7476
if(HAVE_CFI)
7577
option(SANITIZER_CFI "Build with control flow integration" OFF)
7678
if(SANITIZER_CFI)
77-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=cfi")
79+
set(SANITIZER_CFI_FLAGS -fsanitize=cfi)
80+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_CFI_FLAGS}")
81+
set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} ${SANITIZER_CFI_FLAGS}")
7882
endif()
7983
endif()
8084

8185
if(HAVE_FUZZER)
8286
option(SANITIZER_FUZZER "Build with fuzzer" ON)
8387
if(SANITIZER_FUZZER)
8488
if(UNIX)
85-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=fuzzer")
89+
set(SANITIZER_FUZZER_FLAGS -fsanitize=fuzzer)
8690
else()
87-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=fuzzer")
91+
set(SANITIZER_FUZZER_FLAGS /fsanitize=fuzzer)
8892
endif()
93+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_FUZZER_FLAGS}")
94+
set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} ${SANITIZER_FUZZER_FLAGS}")
8995
endif()
9096
endif()
9197

9298
if(HAVE_LSAN)
9399
option(SANITIZER_LEAK "Build with leak sanitizer" OFF)
94100
if(SANITIZER_LEAK)
95-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=leak")
101+
set(SANITIZER_LEAK_FLAGS -fsanitize=leak)
102+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_LEAK_FLAGS}")
103+
set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} ${SANITIZER_LEAK_FLAGS}")
96104
endif()
97105
endif()
98106

99107
if(HAVE_MSAN)
100108
option(SANITIZER_MEMORY "Build with memory sanitizer" OFF)
101109
if(SANITIZER_MEMORY)
102-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=memory -fsanitize-memory-track-origins -fno-optimize-sibling-calls")
110+
set(SANITIZER_MEMORY_FLAGS "-fsanitize=memory -fsanitize-memory-track-origins -fno-optimize-sibling-calls")
111+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_MEMORY_FLAGS}")
112+
set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} ${SANITIZER_MEMORY_FLAGS}")
103113
endif()
104114
endif()
105115

106116
if(HAVE_TSAN)
107117
option(SANITIZER_THREAD "Build with thread sanitizer" OFF)
108118
if(SANITIZER_THREAD)
109-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")
119+
set(SANITIZER_THREAD_FLAGS -fsanitize=thread)
120+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_THREAD_FLAGS}")
121+
set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} ${SANITIZER_THREAD_FLAGS}")
110122
endif()
111123
endif()
112124

113125
if(HAVE_USAN)
114126
option(SANITIZER_UNDEFINED "Build with undefined sanitizer" ON)
115127
if(SANITIZER_UNDEFINED)
116-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
128+
set(SANITIZER_UNDEFINED_FLAGS -fsanitize=undefined)
129+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_UNDEFINED_FLAGS}")
130+
set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} ${SANITIZER_UNDEFINED_FLAGS}")
117131
endif()
118132
endif()

0 commit comments

Comments
 (0)