cmake_minimum_required(VERSION 2.8) project(kms++) include(LTO.cmake) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) include(CheckCXXCompilerFlag) IF(NOT CMAKE_BUILD_TYPE) message(STATUS "Setting build type to 'Release' as none was specified.") SET(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") ENDIF() string(TOUPPER "${CMAKE_BUILD_TYPE}" U_CMAKE_BUILD_TYPE) option(BUILD_SHARED_LIBS "Build shared libs" FALSE) option(TREAT_WARNINGS_AS_ERRORS "Treat warnings as errors" FALSE) set(KMSXX_ENABLE_PYTHON ON CACHE BOOL "Enable Python wrappers") set(KMSXX_PYTHON_VERSION "python3" CACHE STRING "Python pkgconfig package") set(KMSXX_ENABLE_KMSCUBE OFF CACHE BOOL "Enable kmscube") set(KMSXX_ENABLE_THREADING ON CACHE BOOL "Enable threading for parallelized drawing") set(KMSXX_ENABLE_LIBDRMOMAP ON CACHE BOOL "Enable OMAP-specific extensions") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11 -Wall") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wextra -Wno-unused-parameter") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra -Wno-unused-parameter") if (CMAKE_COMPILER_IS_GNUCC) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) # GCC 4.x seems to warn too much set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-missing-field-initializers") endif() endif() # HACK: cmake always adds "-rdynamic", this removes it SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) if (TREAT_WARNINGS_AS_ERRORS) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") endif() # static link libc # set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++") check_lto() if (NOT ${U_CMAKE_BUILD_TYPE} MATCHES DEBUG) if (LTO_WORKS) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flto") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto") set(CMAKE_AR "${LTO_AR}") set(CMAKE_RANLIB "${LTO_RANLIB}") endif() endif() find_package(PkgConfig REQUIRED) pkg_check_modules(LIBDRM libdrm>=2.4.71 REQUIRED) if (KMSXX_ENABLE_LIBDRMOMAP) pkg_check_modules(LIBDRM_OMAP libdrm_omap) else() set(LIBDRM_OMAP_FOUND FALSE) endif() if(LIBDRM_OMAP_FOUND) add_definitions(-DHAS_LIBDRM_OMAP) endif() pkg_check_modules(LIBEVDEV libevdev) enable_testing() add_subdirectory(kms++) add_subdirectory(kms++util) add_subdirectory(utils) add_subdirectory(ext/fmt) if(KMSXX_ENABLE_KMSCUBE) add_subdirectory(kmscube) endif() if(KMSXX_ENABLE_PYTHON) add_subdirectory(py) endif() add_custom_target(docs SOURCES "README.md")