Warning, /graphics/kseexpr/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 # SPDX-FileCopyrightText: 2011-2019 Disney Enterprises, Inc. 0002 # SPDX-License-Identifier: LicenseRef-Apache-2.0 0003 # SPDX-FileCopyrightText: 2020-2021 L. E. Segovia <amy@amyspark.me> 0004 # SPDX-License-Identifier: GPL-3.0-or-later 0005 0006 cmake_minimum_required(VERSION 3.8.0) 0007 0008 # option() honors normal variables. Needed for LLVM 10. 0009 if (POLICY CMP0077) 0010 cmake_policy(SET CMP0077 NEW) 0011 endif() 0012 # Minimum for SeExpr is 11. LLVM (if used) may need 14. 0013 # LLVM with Clang < 8 crashes on compile: https://github.com/andreasfertig/cppinsights/issues/56#issuecomment-408674466 0014 set(CMAKE_CXX_STANDARD 14) 0015 0016 ## project name & version 0017 project(KSeExpr 0018 VERSION "4.0.4.0" 0019 DESCRIPTION "An embeddable expression evaluation engine for Krita" 0020 ) 0021 0022 message(STATUS "Welcome to ${CMAKE_PROJECT_NAME} ${CMAKE_PROJECT_VERSION} !") 0023 0024 enable_testing() 0025 0026 ## Silence installation messages 0027 set(CMAKE_INSTALL_MESSAGE LAZY) 0028 0029 # macros 0030 include(GNUInstallDirs) 0031 include(CMakePackageConfigHelpers) 0032 include(GenerateExportHeader) 0033 LIST (APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") 0034 include(macros) 0035 include(CheckCXXSourceCompiles) 0036 include(FeatureSummary) 0037 0038 # Default installation prefix 0039 if (NOT DEFINED FLAVOR) 0040 set(FLAVOR "optimize" CACHE STRING "Build flavor") 0041 endif() 0042 0043 ## Choose build options 0044 # Disney specific method of choosing variant 0045 if (${FLAVOR} STREQUAL "optimize") 0046 set(CMAKE_BUILD_TYPE "Release" CACHE STRING "type of build" FORCE) 0047 endif() 0048 0049 if (${FLAVOR} STREQUAL "debug") 0050 set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "type of build" FORCE) 0051 endif() 0052 0053 if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) 0054 execute_process( 0055 COMMAND sh -c "echo `uname -s`-`uname -r | cut -d- -f1`-`uname -m`" 0056 OUTPUT_VARIABLE VARIANT_DIRECTORY OUTPUT_STRIP_TRAILING_WHITESPACE) 0057 set(CMAKE_INSTALL_PREFIX 0058 "${CMAKE_SOURCE_DIR}/${VARIANT_DIRECTORY}-${FLAVOR}" 0059 CACHE PATH "Installation prefix" FORCE) 0060 endif() 0061 0062 message(STATUS "CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}") 0063 message(STATUS "CMAKE_INSTALL_LIBDIR = ${CMAKE_INSTALL_LIBDIR}") 0064 0065 # Configuration options 0066 option(ENABLE_LLVM_BACKEND "Whether to build with LLVM backend" FALSE) 0067 add_feature_info(LLVMBackend ENABLE_LLVM_BACKEND "Build the LLVM backend of KSeExpr") 0068 option(ENABLE_QT5 "Whether to use Qt5" TRUE) 0069 add_feature_info(KSeExprUI ENABLE_QT5 "Build the KSeExprUI widget library") 0070 option(BUILD_UTILS "Whether to build the utilities" FALSE) 0071 add_feature_info(Utils BUILD_UTILS "Build the utilities") 0072 option(BUILD_DEMOS "Whether to build the demos" FALSE) 0073 add_feature_info(Demos BUILD_DEMOS "Build the demos") 0074 option(BUILD_DOC "Whether to build the documentation" FALSE) 0075 add_feature_info(Docs BUILD_DOC "Build the documentation") 0076 option(BUILD_TESTS "Whether to build the tests" FALSE) 0077 add_feature_info(Tests BUILD_TESTS "Build the tests") 0078 option(ENABLE_SLOW_TESTS "Whether to enable slow tests" FALSE) 0079 add_feature_info(SlowTests ENABLE_SLOW_TESTS "Enables slow tests") 0080 option(USE_PREGENERATED_FILES "Whether to use the bundled pregenerated parser files" FALSE) 0081 add_feature_info(PregeneratedFiles USE_PREGENERATED_FILES "Build the language parser using the bundled, pregenerated files") 0082 option(ENABLE_PERFORMANCE_STATS "Whether to print performance stats across KSeExpr" FALSE) 0083 add_feature_info(PerformanceStats ENABLE_PERFORMANCE_STATS "Print performance stats across KSeExpr") 0084 0085 # Package lookup 0086 0087 find_package(Doxygen) 0088 set_package_properties(Doxygen PROPERTIES 0089 TYPE OPTIONAL 0090 PURPOSE "Needed to build the documentation") 0091 find_package(ECM 5.52.0 NO_MODULE) 0092 set_package_properties(ECM PROPERTIES 0093 TYPE OPTIONAL 0094 PURPOSE "Enables translations (if bundled) and automatic sanitizer support") 0095 find_package(KF5I18n 5.52.0) 0096 set_package_properties(KF5I18n PROPERTIES 0097 TYPE OPTIONAL 0098 PURPOSE "Enables detection of fallback languages in KDE apps") 0099 find_package(GTest) 0100 set_package_properties(GTest PROPERTIES 0101 TYPE OPTIONAL 0102 PURPOSE "Needed for building the tests") 0103 find_package(PNG) 0104 set_package_properties(PNG PROPERTIES 0105 TYPE OPTIONAL 0106 PURPOSE "Needed to support image file output in demos and tests") 0107 find_package(Python3) 0108 set_package_properties(Python3 PROPERTIES 0109 TYPE OPTIONAL 0110 PURPOSE "Needed for running some tests") 0111 find_package(BISON) 0112 set_package_properties(BISON PROPERTIES 0113 TYPE OPTIONAL 0114 PURPOSE "Needed to build KSeExpr's language parser from source") 0115 find_package(FLEX) 0116 set_package_properties(FLEX PROPERTIES 0117 TYPE OPTIONAL 0118 PURPOSE "Needed to build KSeExpr's language parser from source") 0119 find_program(SED_EXE sed) 0120 set_package_properties(SED_EXE PROPERTIES 0121 TYPE OPTIONAL 0122 PURPOSE "Needed to build KSeExpr's language parser from source") 0123 0124 if (ECM_FOUND) 0125 set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH}) 0126 if (FLAVOR STREQUAL "debug") 0127 message(STATUS "ECM sanitizer support is available.") 0128 include(ECMEnableSanitizers) 0129 endif() 0130 0131 if (IS_DIRECTORY "${CMAKE_SOURCE_DIR}/poqm") 0132 option(BUILD_TRANSLATIONS "Whether to include translations" TRUE) 0133 add_feature_info(i18n BUILD_TRANSLATIONS "Build and embed translations") 0134 endif () 0135 endif () 0136 0137 if (ENABLE_LLVM_BACKEND) 0138 find_package(LLVM) 0139 set_package_properties(LLVM PROPERTIES 0140 TYPE OPTIONAL 0141 PURPOSE "Needed for building the LLVM-based script backend") 0142 if (NOT LLVM_FOUND OR LLVM_VERSION VERSION_LESS 3.8.0) 0143 set(ENABLE_LLVM_BACKEND off) 0144 message(STATUS "Not building with LLVM, version must be >= 3.8.0") 0145 else() 0146 set(SEEXPR_ENABLE_LLVM 1) 0147 0148 message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}") 0149 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${LLVM_DIR}") 0150 include(LLVM-Config) 0151 include(LLVMConfig) 0152 include(HandleLLVMOptions) 0153 0154 message(STATUS "LLVM_DEFINITIONS =" ${LLVM_DEFINITIONS}) 0155 message(STATUS "LLVM_INCLUDE_DIRS =" ${LLVM_INCLUDE_DIRS}) 0156 message(STATUS "LLVM_LIBRARY_DIR =" ${LLVM_LIBRARY_DIR}) 0157 message(STATUS "LLVM_PACKAGE_VERSION =" ${LLVM_PACKAGE_VERSION}) 0158 0159 # construct library names 0160 0161 message(STATUS "Detected processor: ${CMAKE_SYSTEM_PROCESSOR}") 0162 if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*") 0163 set(KSeExpr_PLATFORM_CODEGEN_LIBS 0164 X86CodeGen 0165 X86AsmParser) 0166 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*") 0167 set(KSeExpr_PLATFORM_CODEGEN_LIBS 0168 X86CodeGen 0169 X86AsmParser) 0170 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|arm64.*|ARM64.*)") 0171 set(KSeExpr_PLATFORM_CODEGEN_LIBS 0172 AArch64CodeGen 0173 AArch64AsmParser) 0174 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)") 0175 set(KSeExpr_PLATFORM_CODEGEN_LIBS 0176 ARMCodeGen 0177 ARMAsmParser) 0178 else() 0179 message(ERROR "Unknown processor, unable to set LLVM codegen targets") 0180 endif() 0181 0182 if (LLVM IN_LIST LLVM_AVAILABLE_LIBS) 0183 message(STATUS "Shared libLLVM is available, using it.") 0184 set(LLVM_LIB LLVM) 0185 else() 0186 message(STATUS "Shared libLLVM is not available, falling back to static linkage.") 0187 llvm_map_components_to_libnames(LLVM_LIB 0188 Interpreter 0189 MCJIT 0190 ObjCARCOpts 0191 Passes 0192 ${KSeExpr_PLATFORM_CODEGEN_LIBS} 0193 ) 0194 endif() 0195 0196 message(STATUS "LLVM_LIB = ${LLVM_LIB}") 0197 endif() 0198 endif() 0199 0200 ## Setup platform specific helper defines build variants 0201 if (WIN32) 0202 add_definitions(-DSEEXPR_WIN32) 0203 add_definitions(-D_CRT_SECURE_NO_WARNINGS) 0204 add_compile_definitions(_USE_MATH_DEFINES) 0205 else() 0206 add_definitions(-Wall -Wextra -Wno-unused-parameter) 0207 0208 set(CMAKE_POSITION_INDEPENDENT_CODE ON) 0209 if (APPLE) 0210 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-date-time") 0211 endif() 0212 endif() 0213 0214 # Set to release if nothing else defined 0215 if (NOT CMAKE_BUILD_TYPE) 0216 set(CMAKE_BUILD_TYPE "Release" CACHE STRING 0217 "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." 0218 FORCE) 0219 endif() 0220 0221 if (ENABLE_QT5) 0222 find_package(Qt5 5.9.0 COMPONENTS Core Gui Widgets REQUIRED) 0223 set_package_properties(Qt5 PROPERTIES 0224 TYPE REQUIRED 0225 PURPOSE "Required if you're building KSeExprUI") 0226 message(STATUS "Qt5 Enabled") 0227 endif() 0228 0229 ## Make modules able to see seexpr library 0230 # Setup environment variable to link seexpr 0231 set(SEEXPR_LIBRARIES KSeExpr) 0232 set(SEEXPR_LLVM_LIBRARIES KSeExprLLVM) 0233 set(SEEXPR_EDITOR_LIBRARIES KSeExprUI) 0234 0235 # make it so seexpr can be found 0236 include_directories(BEFORE ${CMAKE_SOURCE_DIR}/src) 0237 0238 if (ENABLE_PERFORMANCE_STATS) 0239 add_definitions(-DSEEXPR_PERFORMANCE) 0240 endif() 0241 0242 ## Traverse subdirectories 0243 add_subdirectory(src/KSeExpr) 0244 if (ENABLE_QT5) 0245 add_subdirectory(src/KSeExprUI) 0246 endif() 0247 if (BUILD_UTILS) 0248 add_subdirectory(src/utils) 0249 endif() 0250 if (BUILD_DEMOS) 0251 add_subdirectory(src/demos) 0252 endif() 0253 if (BUILD_DOC) 0254 add_subdirectory(src/doc) 0255 endif() 0256 if (BUILD_TESTS) 0257 add_subdirectory(src/tests) 0258 endif() 0259 0260 # cmake packaging -- this is done after adding subdirectories so that 0261 # all exported targets are found by export() below. 0262 configure_file("cmake/kseexpr.pc.in" "kseexpr.pc" @ONLY) 0263 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/kseexpr.pc" 0264 COMPONENT devel DESTINATION share/pkgconfig) 0265 0266 write_basic_package_version_file("kseexpr-config-version.cmake" VERSION ${${PROJECT_NAME}_VERSION} COMPATIBILITY SameMajorVersion) 0267 0268 configure_package_config_file( 0269 "cmake/kseexpr-config.cmake" "kseexpr-config.cmake" 0270 INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} 0271 PATH_VARS CMAKE_INSTALL_PREFIX CMAKE_INSTALL_LIBDIR CMAKE_INSTALL_INCLUDEDIR) 0272 install(FILES 0273 "${CMAKE_CURRENT_BINARY_DIR}/kseexpr-config.cmake" 0274 "${CMAKE_CURRENT_BINARY_DIR}/kseexpr-config-version.cmake" 0275 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} 0276 ) 0277 install(EXPORT ${PROJECT_NAME}Targets 0278 NAMESPACE ${PROJECT_NAME}:: 0279 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} 0280 ) 0281 0282 feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)