Compare commits

...

4 Commits

Author SHA1 Message Date
Bartek Kryza
d120bd50ad Added macos build action 2024-07-13 13:21:21 +02:00
Bartek Kryza
3b10885155 Added Makefile option to build with address sanitizer 2024-07-12 16:58:13 +02:00
Bartek Kryza
c0f5d5f64a Added CLANG_UML_ENABLE_BACKTRACE CMake option to enable backtrace in release builds (#292) 2024-06-21 23:52:33 +02:00
Bartek Kryza
2c23627154 Merge pull request #291 from bkryza/v0.5.3
V0.5.3
2024-06-19 21:58:11 +02:00
7 changed files with 109 additions and 7 deletions

View File

@@ -1,4 +1,4 @@
name: build
name: Linux
on:
push:
@@ -8,6 +8,8 @@ on:
- 'util/**'
- 'uml/**'
- '**.md'
- '**.svg'
- '**.png'
branches-ignore:
- 'noactions/*'
pull_request:
@@ -30,6 +32,8 @@ jobs:
uses: actions/checkout@v4
- name: Update package database
run: sudo apt -y update
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
- name: Install deps
run: sudo apt -y install git make pkg-config gcc-11 g++-11 ccache cmake libyaml-cpp-dev llvm-15 clang-15 libclang-15-dev libclang-cpp15-dev clang-format-15 lcov zlib1g-dev libunwind-dev libdw-dev
- name: Select g++ version

49
.github/workflows/macos.yml vendored Normal file
View File

@@ -0,0 +1,49 @@
name: macOS
on:
push:
paths-ignore:
- 'docs/**'
- 'packaging/**'
- 'util/**'
- 'uml/**'
- '**.md'
- '**.svg'
- '**.png'
branches-ignore:
- 'noactions/*'
pull_request:
paths-ignore:
- 'docs/**'
- 'packaging/**'
- 'util/**'
- 'uml/**'
- '**.md'
- '**.svg'
- '**.png'
branches-ignore:
- 'noactions/*'
jobs:
build-macos:
name: Build and test on macos
runs-on: macos-14
steps:
- name: Checkout
uses: actions/checkout@v4
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
- name: Install dependencies using homebrew
run: brew install llvm@18 ninja yaml-cpp cmake ccache
- name: Build and test
run: CC=/opt/homebrew/opt/llvm/bin/clang CXX=/opt/homebrew/opt/llvm/bin/clang++ CMAKE_PREFIX=/opt/homebrew/opt/llvm/lib/cmake/llvm/ CMAKE_GENERATOR=Ninja CMAKE_EXE_LINKER_FLAGS="-L/opt/homebrew/opt/llvm/lib/c++ -Wl,-rpath,/opt/homebrew/opt/llvm/lib/c++" make test
- name: Print build version
run: debug/src/clang-uml --version
- name: Print help
run: debug/src/clang-uml --help

1
.sanitize-blacklist Normal file
View File

@@ -0,0 +1 @@
fun:*SmallVector*

View File

@@ -70,6 +70,23 @@ if(CODE_COVERAGE)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lgcov --coverage")
endif(CODE_COVERAGE)
#
# Setup Address Sanitizer
#
option(ADDRESS_SANITIZER "" OFF)
if(ADDRESS_SANITIZER)
set(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} \
-fno-omit-frame-pointer \
-fsanitize=address \
-fsanitize-blacklist=${CMAKE_CURRENT_SOURCE_DIR}/.sanitize-blacklist")
set(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} \
-fno-omit-frame-pointer \
-fsanitize=address \
-fsanitize-blacklist=${CMAKE_CURRENT_SOURCE_DIR}/.sanitize-blacklist")
endif(ADDRESS_SANITIZER)
#
# Setup LLVM
#
@@ -133,14 +150,25 @@ endif()
link_directories(${LLVM_LIBRARY_DIR} ${YAML_CPP_LIBRARY_DIR})
#
# Setup libdw and libunwind
# Setup backward-cpp, libdw and libunwind
#
if(LINUX AND (CMAKE_BUILD_TYPE MATCHES Debug))
if(CMAKE_BUILD_TYPE MATCHES Debug)
set(CLANG_UML_ENABLE_BACKTRACE_DEFAULT ON)
else()
set(CLANG_UML_ENABLE_BACKTRACE_DEFAULT OFF)
endif()
option(CLANG_UML_ENABLE_BACKTRACE "Enable backtrace on segfault"
${CLANG_UML_ENABLE_BACKTRACE_DEFAULT})
if(LINUX AND CLANG_UML_ENABLE_BACKTRACE)
find_package(PkgConfig REQUIRED)
pkg_check_modules(DW REQUIRED IMPORTED_TARGET libdw)
pkg_check_modules(UNWIND REQUIRED IMPORTED_TARGET libunwind)
set(BACKWARD_CPP_LIBRARIES PkgConfig::DW PkgConfig::UNWIND)
set(ENABLE_BACKWARD_CPP -DENABLE_BACKWARD_CPP)
message(STATUS "Enabling backward-cpp")
else()
message(STATUS "Disabling backward-cpp")
endif()
#

View File

@@ -38,6 +38,7 @@ CMAKE_CXX_FLAGS ?=
CMAKE_EXE_LINKER_FLAGS ?=
CMAKE_GENERATOR ?= Unix Makefiles
CODE_COVERAGE ?= OFF
ADDRESS_SANITIZER ?= OFF
ENABLE_CXX_MODULES_TEST_CASES ?= OFF
ENABLE_CUDA_TEST_CASES ?= OFF
@@ -54,6 +55,7 @@ clean:
rm -rf debug release debug_tidy coverage.info coverage-src.info
debug/CMakeLists.txt:
$(eval CLANG_UML_ENABLE_BACKTRACE ?= ON)
cmake -S . -B debug \
-G"$(CMAKE_GENERATOR)" \
-DGIT_VERSION=$(GIT_VERSION) \
@@ -67,9 +69,12 @@ debug/CMakeLists.txt:
-DCMAKE_PREFIX=${CMAKE_PREFIX} \
-DENABLE_CUDA_TEST_CASES=$(ENABLE_CUDA_TEST_CASES) \
-DENABLE_CXX_MODULES_TEST_CASES=$(ENABLE_CXX_MODULES_TEST_CASES) \
-DCODE_COVERAGE=$(CODE_COVERAGE)
-DCODE_COVERAGE=$(CODE_COVERAGE) \
-DADDRESS_SANITIZER=$(ADDRESS_SANITIZER) \
-DCLANG_UML_ENABLE_BACKTRACE=$(CLANG_UML_ENABLE_BACKTRACE)
release/CMakeLists.txt:
$(eval CLANG_UML_ENABLE_BACKTRACE ?= OFF)
cmake -S . -B release \
-G"$(CMAKE_GENERATOR)" \
-DGIT_VERSION=$(GIT_VERSION) \
@@ -81,8 +86,10 @@ release/CMakeLists.txt:
-DLLVM_CONFIG_PATH=${LLVM_CONFIG_PATH} \
-DLINK_LLVM_SHARED=${LLVM_SHARED} \
-DCMAKE_PREFIX=${CMAKE_PREFIX} \
-DADDRESS_SANITIZER=$(ADDRESS_SANITIZER) \
-DENABLE_CUDA_TEST_CASES=$(ENABLE_CUDA_TEST_CASES) \
-DENABLE_CXX_MODULES_TEST_CASES=$(ENABLE_CXX_MODULES_TEST_CASES)
-DENABLE_CXX_MODULES_TEST_CASES=$(ENABLE_CXX_MODULES_TEST_CASES) \
-DCLANG_UML_ENABLE_BACKTRACE=$(CLANG_UML_ENABLE_BACKTRACE)
debug_tidy/CMakeLists.txt:
cmake -S . -B debug_tidy \

View File

@@ -2,7 +2,8 @@
# C++ UML diagram generator based on Clang
[![Build status](https://github.com/bkryza/clang-uml/actions/workflows/build.yml/badge.svg)](https://github.com/bkryza/clang-uml/actions)
[![Linux build status](https://github.com/bkryza/clang-uml/actions/workflows/build.yml/badge.svg)](https://github.com/bkryza/clang-uml/actions)
[![macos build status](https://github.com/bkryza/clang-uml/actions/workflows/macos.yml/badge.svg)](https://github.com/bkryza/clang-uml/actions)
[![Coverage](https://codecov.io/gh/bkryza/clang-uml/branch/master/graph/badge.svg)](https://codecov.io/gh/bkryza/clang-uml)
[![Version](https://img.shields.io/badge/version-0.5.3-blue)](https://github.com/bkryza/clang-uml/releases)
[![Version](https://img.shields.io/badge/LLVM-12,13,14,15,16,17,18-orange)](https://github.com/bkryza/clang-uml/releases)

View File

@@ -122,8 +122,9 @@ make install DESTDIR=/opt/clang-uml
export PATH=$PATH:$PWD/release
```
#### macos
#### macOS
On Intel-based macOS:
```bash
brew install ccache cmake llvm yaml-cpp
@@ -134,6 +135,17 @@ LLVM_VERSION=16 make release
CMAKE_PREFIX=/usr/local/opt/llvm/lib/cmake/llvm make release
```
On Arm-based macOS:
```bash
brew install ccache cmake llvm yaml-cpp
export CC=/opt/homebrew/opt/llvm/bin/clang
export CXX=/opt/homebrew/opt/llvm/bin/clang++
CMAKE_PREFIX=/usr/local/opt/llvm/lib/cmake/llvm CMAKE_EXE_LINKER_FLAGS="-L/opt/homebrew/opt/llvm/lib/c++ -Wl,-rpath,/opt/homebrew/opt/llvm/lib/c++" make release
```
> These paths will use the latest LLVM version installed by `brew`.
> If you want to use a specific version, you will need to adjust the paths.
#### Windows
##### Visual Studio native build