From 06de7bd1ec3818612752bb7be591baa3c867f128 Mon Sep 17 00:00:00 2001 From: PancakeTAS Date: Mon, 18 May 2026 15:52:13 +0200 Subject: Refactor buildscript --- CMakeLists.txt | 59 ++++++++++++++++--------------------------------- cmake/Diagnostics.cmake | 26 ++++++++++++++++++++++ 2 files changed, 45 insertions(+), 40 deletions(-) create mode 100644 cmake/Diagnostics.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 8ac3bd8..d2d5b7c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,47 +1,26 @@ -cmake_minimum_required(VERSION 4.0) -list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") +cmake_minimum_required(VERSION 3.10) -project(drm++ LANGUAGES CXX) +project(drm++ + DESCRIPTION "C++ wrapper around the Linux DRM API" + VERSION 0.1.0 + LANGUAGES CXX) -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_VISIBILITY_PRESET hidden) +include(cmake/Diagnostics.cmake) -set(CMAKE_POSITION_INDEPENDENT_CODE ON) -set(CMAKE_SKIP_RPATH ON) +add_library(drm++ SHARED + "src/ioctl.cpp" + "src/syncobject.cpp") -if(CMAKE_BUILD_TYPE STREQUAL "Debug") - set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +target_include_directories(drm++ + PUBLIC include) - if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - message(STATUS "Building with clang-specific diagnostics") +target_include_directories(drm++ SYSTEM + PRIVATE uapi) - set(CMAKE_CXX_CLANG_TIDY clang-tidy) # See .clang-tidy files +set_target_properties(drm++ PROPERTIES + CXX_STANDARD 20 + CXX_STANDARD_REQUIRED ON + CXX_VISIBILITY_PRESET hidden) - add_compile_options( - # By default, enable all warnings - -Weverything - # Some warnings are incompatible with each other - -Wno-pre-c++20-compat-pedantic - -Wno-c++98-compat-pedantic - -Wno-switch-default - # Then there's code-style things I don't care about - -Wno-missing-designated-field-initializers - -Wno-shadow - # And functional warning I don't care about either - -Wno-cast-function-type-strict - -Wno-padded - # Due to C/C++ interop - -Wno-unsafe-buffer-usage - ) - endif() -endif() - -set(SOURCES - "src/priv/ioctl.cpp" - "src/syncobject.cpp" - "src/main.cpp") - -add_executable(drm++ ${SOURCES}) -target_include_directories(drm++ PUBLIC include) -target_include_directories(drm++ SYSTEM PRIVATE uapi) +set_target_properties(drm++ PROPERTIES + SKIP_RPATH ON) diff --git a/cmake/Diagnostics.cmake b/cmake/Diagnostics.cmake new file mode 100644 index 0000000..6dcf6bb --- /dev/null +++ b/cmake/Diagnostics.cmake @@ -0,0 +1,26 @@ +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + + if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + message(STATUS "Building with clang-specific diagnostics") + + set(CMAKE_CXX_CLANG_TIDY clang-tidy) # See .clang-tidy files + + add_compile_options( + # By default, enable all warnings + -Weverything + # Some warnings are incompatible with each other + -Wno-pre-c++20-compat-pedantic + -Wno-c++98-compat-pedantic + -Wno-switch-default + # Then there's code-style things I don't care about + -Wno-missing-designated-field-initializers + -Wno-shadow + # And functional warning I don't care about either + -Wno-cast-function-type-strict + -Wno-padded + # Due to C/C++ interop + -Wno-unsafe-buffer-usage + ) + endif() +endif() -- cgit v1.3.1