Skip to content

Commit

Permalink
Added cmake-format Makefile target
Browse files Browse the repository at this point in the history
  • Loading branch information
bkryza committed Oct 16, 2024
1 parent 26c8e10 commit e6c5693
Show file tree
Hide file tree
Showing 6 changed files with 196 additions and 137 deletions.
9 changes: 9 additions & 0 deletions .cmake-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
line_width: 80
tab_size: 4
enable_sort: False
dangle_parens: False
dangle_align: 'prefix'
command_case: 'canonical'
keyword_case: 'upper'
line_ending: 'auto'
literal_comment_pattern: '.*'
52 changes: 31 additions & 21 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ set(CLANG_UML_INSTALL_BIN_DIR ${PROJECT_SOURCE_DIR}/bin)
set(UML_HEADERS_DIR ${PROJECT_SOURCE_DIR}/src/uml)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
if(APPLE)
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "arm"
OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "arm64")
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "arm" OR "${CMAKE_SYSTEM_PROCESSOR}"
STREQUAL "arm64")
set(HOMEBREW_PREFIX "/opt/homebrew")
else()
set(HOMEBREW_PREFIX "/usr/local")
Expand Down Expand Up @@ -77,15 +77,17 @@ endif(CODE_COVERAGE)
option(ADDRESS_SANITIZER "" OFF)
if(ADDRESS_SANITIZER)
set(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} \
"${CMAKE_CXX_FLAGS} \
-fno-omit-frame-pointer \
-fsanitize=address \
-fsanitize-blacklist=${CMAKE_CURRENT_SOURCE_DIR}/.sanitize-blacklist")
-fsanitize-blacklist=${CMAKE_CURRENT_SOURCE_DIR}/.sanitize-blacklist"
)
set(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} \
"${CMAKE_EXE_LINKER_FLAGS} \
-fno-omit-frame-pointer \
-fsanitize=address \
-fsanitize-blacklist=${CMAKE_CURRENT_SOURCE_DIR}/.sanitize-blacklist")
-fsanitize-blacklist=${CMAKE_CURRENT_SOURCE_DIR}/.sanitize-blacklist"
)
endif(ADDRESS_SANITIZER)

#
Expand All @@ -94,31 +96,39 @@ endif(ADDRESS_SANITIZER)
include(LLVMSetup)

#
# Setup custom compile options depending on various compiler
# and environment quirks
# Setup custom compile options depending on various compiler and environment
# quirks
#
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "13.0")
# Workaround over Wdangling-reference false positives in libfmt
set(CUSTOM_COMPILE_OPTIONS ${CUSTOM_COMPILE_OPTIONS} -Wno-dangling-reference)
set(CUSTOM_COMPILE_OPTIONS ${CUSTOM_COMPILE_OPTIONS}
-Wno-dangling-reference)
endif()
endif()

if(LLVM_VERSION_MAJOR GREATER_EQUAL 17)
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(CUSTOM_COMPILE_OPTIONS ${CUSTOM_COMPILE_OPTIONS} -Wno-class-memaccess)
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(CUSTOM_COMPILE_OPTIONS ${CUSTOM_COMPILE_OPTIONS}
-Wno-class-memaccess)
endif()
endif()
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(CUSTOM_COMPILE_OPTIONS
${CUSTOM_COMPILE_OPTIONS} -Wno-unused-private-field)
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(CUSTOM_COMPILE_OPTIONS ${CUSTOM_COMPILE_OPTIONS}
-Wno-unused-private-field)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19)
set(CUSTOM_COMPILE_OPTIONS ${CUSTOM_COMPILE_OPTIONS} -Wno-missing-template-arg-list-after-template-kw)
set(CUSTOM_COMPILE_OPTIONS
${CUSTOM_COMPILE_OPTIONS}
-Wno-missing-template-arg-list-after-template-kw)
endif()
if(APPLE)
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "arm" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "arm64")
# Use LLVM bundled unwind on Apple Silicon to fix segfaults on exception throw
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${HOMEBREW_PREFIX}/opt/llvm/lib/unwind -lunwind")
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "arm"
OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "arm64")
# Use LLVM bundled unwind on Apple Silicon to fix segfaults on
# exception throw
set(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} -L${HOMEBREW_PREFIX}/opt/llvm/lib/unwind -lunwind"
)
endif()
endif(APPLE)
endif()
Expand Down Expand Up @@ -154,7 +164,7 @@ else()
set(CLANG_UML_ENABLE_BACKTRACE_DEFAULT OFF)
endif()
option(CLANG_UML_ENABLE_BACKTRACE "Enable backtrace on segfault"
${CLANG_UML_ENABLE_BACKTRACE_DEFAULT})
${CLANG_UML_ENABLE_BACKTRACE_DEFAULT})

if(LINUX AND CLANG_UML_ENABLE_BACKTRACE)
find_package(PkgConfig REQUIRED)
Expand Down Expand Up @@ -208,7 +218,7 @@ endif(ENABLE_CUDA_TEST_CASES)
if(ENABLE_OBJECTIVE_C_TEST_CASES)
enable_language(OBJC)
if(UNIX AND NOT APPLE)
find_package(GNUstep REQUIRED)
find_package(GNUstep REQUIRED)
endif()
endif(ENABLE_OBJECTIVE_C_TEST_CASES)

Expand Down
9 changes: 9 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -220,3 +220,12 @@ fedora/%:
mkdir -p packaging/_BUILD/fedora/$*
git archive --format=tar.gz --prefix=clang-uml-$(PKG_VERSION)/ v$(GIT_VERSION) >packaging/_BUILD/fedora/$*/clang-uml-$(PKG_VERSION).tar.gz
docker run --cpuset-cpus=0-7 -v $(PWD):$(PWD) fedora:$* sh -c "dnf install -y make git && cd ${PWD} && make OS=fedora DIST=$* VERSION=${PKG_VERSION} COMMIT=${GIT_COMMIT} BRANCH=${GIT_BRANCH} -C packaging rpm"

.PHONY: venv
venv:
test -d venv || virtualenv -p /usr/bin/python3 venv;. venv/bin/activate; pip install -Ur dev-requirements.txt


.PHONY: cmake-format
cmake-format:
cmake-format -i CMakeLists.txt src/CMakeLists.txt tests/CMakeLists.txt
5 changes: 5 additions & 0 deletions dev-requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
cmakelang
jinja2
lxml
nicegui
pyyaml
73 changes: 47 additions & 26 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/src/version)
configure_file(${CMAKE_CURRENT_LIST_DIR}/version.h.in
${PROJECT_BINARY_DIR}/src/version/version.h)
${PROJECT_BINARY_DIR}/src/version/version.h)

#
# Generate source list dynamically
Expand All @@ -23,37 +23,58 @@ else(MSVC)
endif(MSVC)

target_compile_features(clang-umllib INTERFACE cxx_std_17)
target_compile_options(clang-umllib PRIVATE
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:GNU>>:
-Werror -Wall -Wextra -Wno-unused-parameter
-Wno-deprecated-declarations ${CUSTOM_COMPILE_OPTIONS}>
$<$<CXX_COMPILER_ID:MSVC>:/MP /MD /W1 /bigobj /wd4291 /wd4624 /wd4244>)
target_compile_definitions(clang-umllib PRIVATE
$<$<CXX_COMPILER_ID:MSVC>:
-DLLVM_FORCE_USE_OLD_TOOLCHAIN
-DTERMCOLOR_USE_WINDOWS_API=1
-DTERMCOLOR_TARGET_WINDOWS=1>)
target_compile_options(
clang-umllib
PRIVATE $<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:GNU>>:
-Werror
-Wall
-Wextra
-Wno-unused-parameter
-Wno-deprecated-declarations
${CUSTOM_COMPILE_OPTIONS}>
$<$<CXX_COMPILER_ID:MSVC>:/MP
/MD
/W1
/bigobj
/wd4291
/wd4624
/wd4244>)
target_compile_definitions(
clang-umllib
PRIVATE $<$<CXX_COMPILER_ID:MSVC>: -DLLVM_FORCE_USE_OLD_TOOLCHAIN
-DTERMCOLOR_USE_WINDOWS_API=1 -DTERMCOLOR_TARGET_WINDOWS=1>)

#
# Define the target executable clang-uml
#
add_executable(clang-uml ${MAIN_SOURCE_FILE})

target_compile_features(clang-uml PUBLIC cxx_std_17)
target_compile_options(clang-uml PRIVATE
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:GNU>>:
-Werror -Wall -Wextra -Wno-unused-parameter
-Wno-deprecated-declarations ${CUSTOM_COMPILE_OPTIONS}>
$<$<CXX_COMPILER_ID:MSVC>:/MP /MD /W1 /bigobj /wd4291 /wd4624 /wd4244>)
target_compile_definitions(clang-uml PRIVATE
${ENABLE_BACKWARD_CPP})
target_link_libraries(clang-uml
${YAML_CPP_LIBRARIES}
${LIBTOOLING_LIBS}
${MSVC_LIBRARIES}
${BACKWARD_CPP_LIBRARIES}
clang-umllib
Threads::Threads)
target_compile_options(
clang-uml
PRIVATE $<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:GNU>>:
-Werror
-Wall
-Wextra
-Wno-unused-parameter
-Wno-deprecated-declarations
${CUSTOM_COMPILE_OPTIONS}>
$<$<CXX_COMPILER_ID:MSVC>:/MP
/MD
/W1
/bigobj
/wd4291
/wd4624
/wd4244>)
target_compile_definitions(clang-uml PRIVATE ${ENABLE_BACKWARD_CPP})
target_link_libraries(
clang-uml
${YAML_CPP_LIBRARIES}
${LIBTOOLING_LIBS}
${MSVC_LIBRARIES}
${BACKWARD_CPP_LIBRARIES}
clang-umllib
Threads::Threads)

#
# Setup install options
Expand All @@ -77,7 +98,7 @@ install(FILES ${PROJECT_SOURCE_DIR}/CHANGELOG.md
set(CPACK_PACKAGE_NAME "clang-uml")
set(CPACK_PACKAGE_VENDOR "Bartek Kryza <[email protected]>")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY
"clang-uml - C++ UML diagram generator based on Clang")
"clang-uml - C++ UML diagram generator based on Clang")
set(CPACK_PACKAGE_VERSION "${GIT_VERSION}")
set(CPACK_PACKAGE_VERSION_MAJOR "${GIT_VERSION_MAJOR}")
set(CPACK_PACKAGE_VERSION_MINOR "${GIT_VERSION_MINOR}")
Expand Down
Loading

0 comments on commit e6c5693

Please sign in to comment.