Jacques Pienaar | 1273af2 | 2019-03-30 05:10:12 | [diff] [blame] | 1 | # MLIR project. |
Michał Górny | 2aa1af9 | 2021-02-02 19:09:45 | [diff] [blame] | 2 | |
| 3 | # Check if MLIR is built as a standalone project. |
| 4 | if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) |
| 5 | project(mlir) |
John Ericson | df31ff1 | 2022-01-19 06:45:07 | [diff] [blame] | 6 | set(MLIR_STANDALONE_BUILD TRUE) |
| 7 | endif() |
| 8 | |
| 9 | # Must go below project(..) |
| 10 | include(GNUInstallDirs) |
| 11 | |
| 12 | if(MLIR_STANDALONE_BUILD) |
Michał Górny | 2aa1af9 | 2021-02-02 19:09:45 | [diff] [blame] | 13 | cmake_minimum_required(VERSION 3.13.4) |
| 14 | |
| 15 | find_package(LLVM CONFIG REQUIRED) |
| 16 | set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${LLVM_CMAKE_DIR}) |
| 17 | include(HandleLLVMOptions) |
| 18 | include(AddLLVM) |
| 19 | include(TableGen) |
| 20 | |
| 21 | include_directories(${LLVM_INCLUDE_DIRS}) |
| 22 | |
| 23 | set(LLVM_MAIN_SRC_DIR ${CMAKE_SOURCE_DIR}/../llvm CACHE PATH |
| 24 | "Path to LLVM source tree") |
| 25 | set(UNITTEST_DIR ${LLVM_MAIN_SRC_DIR}/utils/unittest) |
| 26 | if(EXISTS ${UNITTEST_DIR}/googletest/include/gtest/gtest.h) |
| 27 | add_subdirectory(${UNITTEST_DIR} utils/unittest) |
| 28 | endif() |
| 29 | |
| 30 | set(CMAKE_LIBRARY_OUTPUT_DIRECTORY |
| 31 | "${CMAKE_CURRENT_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}") |
| 32 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin") |
| 33 | endif() |
| 34 | |
John Ericson | 07b7498 | 2022-06-11 06:11:59 | [diff] [blame] | 35 | set(MLIR_TOOLS_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH |
| 36 | "Path for binary subdirectory (defaults to '${CMAKE_INSTALL_BINDIR}')") |
| 37 | mark_as_advanced(MLIR_TOOLS_INSTALL_DIR) |
| 38 | |
Ehud Katz | 3e8de2e | 2020-04-12 06:29:07 | [diff] [blame] | 39 | set(MLIR_MAIN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR} ) |
| 40 | set(MLIR_MAIN_INCLUDE_DIR ${MLIR_MAIN_SRC_DIR}/include ) |
Jacques Pienaar | 1273af2 | 2019-03-30 05:10:12 | [diff] [blame] | 41 | |
Ehud Katz | 3e8de2e | 2020-04-12 06:29:07 | [diff] [blame] | 42 | set(MLIR_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) |
| 43 | set(MLIR_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) |
| 44 | set(MLIR_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/include) |
Michał Górny | 2aa1af9 | 2021-02-02 19:09:45 | [diff] [blame] | 45 | set(MLIR_TOOLS_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) |
Jacques Pienaar | 1273af2 | 2019-03-30 05:10:12 | [diff] [blame] | 46 | |
John Ericson | 44e3365 | 2022-01-03 02:25:06 | [diff] [blame] | 47 | if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS) |
| 48 | set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake) |
| 49 | endif() |
| 50 | |
| 51 | # Make sure that our source directory is on the current cmake module path so |
| 52 | # that we can include cmake files from this directory. |
| 53 | list(INSERT CMAKE_MODULE_PATH 0 |
| 54 | "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" |
| 55 | "${LLVM_COMMON_CMAKE_UTILS}/Modules" |
| 56 | ) |
Jacques Pienaar | 1273af2 | 2019-03-30 05:10:12 | [diff] [blame] | 57 | |
Mehdi Amini | 5114d55 | 2020-01-22 00:44:17 | [diff] [blame] | 58 | include(AddMLIR) |
| 59 | |
Mehdi Amini | c3aed0d | 2021-09-25 17:24:55 | [diff] [blame] | 60 | # -BSymbolic is incompatible with TypeID |
| 61 | if("${CMAKE_SHARED_LINKER_FLAGS}" MATCHES "-Bsymbolic[^-]") |
| 62 | message(FATAL_ERROR " MLIR does not support `-Bsymbolic` (see http://llvm.org/pr51420 )," |
| 63 | " try `-Bsymbolic-functions` instead.") |
| 64 | endif() |
| 65 | |
Mehdi Amini | 065047a | 2020-11-04 00:06:28 | [diff] [blame] | 66 | # Forbid implicit function declaration: this may lead to subtle bugs and we |
| 67 | # don't have a reason to support this. |
Fangrui Song | bf14685 | 2020-11-05 02:33:51 | [diff] [blame] | 68 | check_c_compiler_flag("-Werror=implicit-function-declaration" C_SUPPORTS_WERROR_IMPLICIT_FUNCTION_DECLARATION) |
| 69 | append_if(C_SUPPORTS_WERROR_IMPLICIT_FUNCTION_DECLARATION "-Werror=implicit-function-declaration" CMAKE_C_FLAGS) |
Mehdi Amini | 065047a | 2020-11-04 00:06:28 | [diff] [blame] | 70 | |
Mehdi Amini | 3bed2a7 | 2021-12-08 05:14:01 | [diff] [blame] | 71 | # Forbid mismatch between declaration and definition for class vs struct. This is |
| 72 | # harmless on Unix systems, but it'll be a ticking bomb for MSVC/Windows systems |
| 73 | # where it creeps into the ABI. |
| 74 | check_c_compiler_flag("-Werror=mismatched-tags" C_SUPPORTS_WERROR_MISMATCHED_TAGS) |
| 75 | append_if(C_SUPPORTS_WERROR_MISMATCHED_TAGS "-Werror=mismatched-tags" CMAKE_C_FLAGS) |
| 76 | append_if(C_SUPPORTS_WERROR_MISMATCHED_TAGS "-Werror=mismatched-tags" CMAKE_CXX_FLAGS) |
| 77 | |
Stella Laurenzo | 7d82d20 | 2020-01-01 00:32:41 | [diff] [blame] | 78 | # Installing the headers and docs needs to depend on generating any public |
| 79 | # tablegen'd targets. |
Stephen Neuendorffer | 7add6b6 | 2020-04-24 23:42:07 | [diff] [blame] | 80 | # mlir-generic-headers are dialect-independent. |
| 81 | add_custom_target(mlir-generic-headers) |
| 82 | set_target_properties(mlir-generic-headers PROPERTIES FOLDER "Misc") |
| 83 | # mlir-headers may be dialect-dependent. |
Stella Laurenzo | 7d82d20 | 2020-01-01 00:32:41 | [diff] [blame] | 84 | add_custom_target(mlir-headers) |
| 85 | set_target_properties(mlir-headers PROPERTIES FOLDER "Misc") |
Stephen Neuendorffer | 7add6b6 | 2020-04-24 23:42:07 | [diff] [blame] | 86 | add_dependencies(mlir-headers mlir-generic-headers) |
Mehdi Amini | 5e67950 | 2019-12-02 17:17:51 | [diff] [blame] | 87 | add_custom_target(mlir-doc) |
| 88 | |
Stephan Herhut | c72c6c3 | 2019-06-26 12:16:11 | [diff] [blame] | 89 | # Build the CUDA conversions and run according tests if the NVPTX backend |
| 90 | # is available |
| 91 | if ("NVPTX" IN_LIST LLVM_TARGETS_TO_BUILD) |
Uday Bondhugula | 9c21ddb | 2021-05-22 14:25:38 | [diff] [blame] | 92 | set(MLIR_ENABLE_CUDA_CONVERSIONS 1) |
Stephan Herhut | c72c6c3 | 2019-06-26 12:16:11 | [diff] [blame] | 93 | else() |
Uday Bondhugula | 9c21ddb | 2021-05-22 14:25:38 | [diff] [blame] | 94 | set(MLIR_ENABLE_CUDA_CONVERSIONS 0) |
Stephan Herhut | c72c6c3 | 2019-06-26 12:16:11 | [diff] [blame] | 95 | endif() |
Mehdi Amini | 850cb13 | 2020-02-14 09:12:41 | [diff] [blame] | 96 | # TODO: we should use a config.h file like LLVM does |
Uday Bondhugula | 9c21ddb | 2021-05-22 14:25:38 | [diff] [blame] | 97 | add_definitions(-DMLIR_CUDA_CONVERSIONS_ENABLED=${MLIR_ENABLE_CUDA_CONVERSIONS}) |
Stephan Herhut | c72c6c3 | 2019-06-26 12:16:11 | [diff] [blame] | 98 | |
Wen-Heng (Jack) Chung | 061fb8e | 2020-05-22 21:25:00 | [diff] [blame] | 99 | # Build the ROCm conversions and run according tests if the AMDGPU backend |
| 100 | # is available |
| 101 | if ("AMDGPU" IN_LIST LLVM_TARGETS_TO_BUILD) |
Uday Bondhugula | 9c21ddb | 2021-05-22 14:25:38 | [diff] [blame] | 102 | set(MLIR_ENABLE_ROCM_CONVERSIONS 1) |
Wen-Heng (Jack) Chung | 061fb8e | 2020-05-22 21:25:00 | [diff] [blame] | 103 | else() |
Uday Bondhugula | 9c21ddb | 2021-05-22 14:25:38 | [diff] [blame] | 104 | set(MLIR_ENABLE_ROCM_CONVERSIONS 0) |
Wen-Heng (Jack) Chung | 061fb8e | 2020-05-22 21:25:00 | [diff] [blame] | 105 | endif() |
Uday Bondhugula | 9c21ddb | 2021-05-22 14:25:38 | [diff] [blame] | 106 | add_definitions(-DMLIR_ROCM_CONVERSIONS_ENABLED=${MLIR_ENABLE_ROCM_CONVERSIONS}) |
Wen-Heng (Jack) Chung | 061fb8e | 2020-05-22 21:25:00 | [diff] [blame] | 107 | |
Uday Bondhugula | 587408c | 2021-05-24 03:20:17 | [diff] [blame] | 108 | set(MLIR_ENABLE_CUDA_RUNNER 0 CACHE BOOL "Enable building the mlir CUDA runner") |
Uday Bondhugula | 9c21ddb | 2021-05-22 14:25:38 | [diff] [blame] | 109 | set(MLIR_ENABLE_ROCM_RUNNER 0 CACHE BOOL "Enable building the mlir ROCm runner") |
| 110 | set(MLIR_ENABLE_SPIRV_CPU_RUNNER 0 CACHE BOOL "Enable building the mlir SPIR-V cpu runner") |
| 111 | set(MLIR_ENABLE_VULKAN_RUNNER 0 CACHE BOOL "Enable building the mlir Vulkan runner") |
Stephan Herhut | e8b21a7 | 2019-07-04 14:49:52 | [diff] [blame] | 112 | |
Stephen Neuendorffer | b0dce6b | 2020-10-04 22:17:34 | [diff] [blame] | 113 | option(MLIR_INCLUDE_TESTS |
| 114 | "Generate build targets for the MLIR unit tests." |
| 115 | ${LLVM_INCLUDE_TESTS}) |
| 116 | |
| 117 | option(MLIR_INCLUDE_INTEGRATION_TESTS |
| 118 | "Generate build targets for the MLIR integration tests.") |
| 119 | |
Stella Laurenzo | a897590 | 2021-10-19 19:22:56 | [diff] [blame] | 120 | set(MLIR_INSTALL_AGGREGATE_OBJECTS 1 CACHE BOOL |
| 121 | "Installs object files needed for add_mlir_aggregate to work out of \ |
| 122 | tree. Package maintainers can disable this to exclude these assets if \ |
| 123 | not desired. Enabling this will result in object files being written \ |
| 124 | under lib/objects-{CMAKE_BUILD_TYPE}.") |
| 125 | |
Stella Laurenzo | c265170 | 2021-11-12 05:18:16 | [diff] [blame] | 126 | set(MLIR_BUILD_MLIR_C_DYLIB 0 CACHE BOOL "Builds libMLIR-C shared library.") |
| 127 | |
Stella Laurenzo | 722475a | 2020-07-07 06:05:46 | [diff] [blame] | 128 | #------------------------------------------------------------------------------- |
| 129 | # Python Bindings Configuration |
| 130 | # Requires: |
| 131 | # The pybind11 library can be found (set with -DPYBIND_DIR=...) |
Stella Laurenzo | 15481bb | 2020-11-24 17:50:18 | [diff] [blame] | 132 | # The python executable is correct (set with -DPython3_EXECUTABLE=...) |
Stella Laurenzo | 722475a | 2020-07-07 06:05:46 | [diff] [blame] | 133 | #------------------------------------------------------------------------------- |
| 134 | |
Uday Bondhugula | 587408c | 2021-05-24 03:20:17 | [diff] [blame] | 135 | set(MLIR_ENABLE_BINDINGS_PYTHON 0 CACHE BOOL |
Stella Laurenzo | 722475a | 2020-07-07 06:05:46 | [diff] [blame] | 136 | "Enables building of Python bindings.") |
rkayaith | d75ac58 | 2022-03-01 22:51:25 | [diff] [blame] | 137 | set(MLIR_DETECT_PYTHON_ENV_PRIME_SEARCH 1 CACHE BOOL |
| 138 | "Prime the python detection by searching for a full 'Development' \ |
| 139 | component first (temporary while diagnosing environment specific Python \ |
| 140 | detection issues)") |
Uday Bondhugula | 9c21ddb | 2021-05-22 14:25:38 | [diff] [blame] | 141 | if(MLIR_ENABLE_BINDINGS_PYTHON) |
Stella Laurenzo | f4f8a67 | 2020-11-21 01:57:46 | [diff] [blame] | 142 | include(MLIRDetectPythonEnv) |
Stella Laurenzo | 3d92722 | 2021-10-13 02:32:48 | [diff] [blame] | 143 | mlir_configure_python_dev_packages() |
Stella Laurenzo | 722475a | 2020-07-07 06:05:46 | [diff] [blame] | 144 | endif() |
| 145 | |
Will Dietz | 02db3cf | 2022-03-19 21:53:59 | [diff] [blame] | 146 | set(CMAKE_INCLUDE_CURRENT_DIR ON) |
| 147 | |
Jacques Pienaar | 1273af2 | 2019-03-30 05:10:12 | [diff] [blame] | 148 | include_directories( "include") |
| 149 | include_directories( ${MLIR_INCLUDE_DIR}) |
| 150 | |
Isuru Fernando | 103678d | 2020-03-14 18:41:12 | [diff] [blame] | 151 | # Adding tools/mlir-tblgen here as calling add_tablegen sets some variables like |
| 152 | # MLIR_TABLEGEN_EXE in PARENT_SCOPE which gets lost if that folder is included |
| 153 | # from another directory like tools |
Stephen Neuendorffer | b0dce6b | 2020-10-04 22:17:34 | [diff] [blame] | 154 | add_subdirectory(tools/mlir-tblgen) |
Vladislav Vinogradov | aca240b | 2021-01-18 10:54:06 | [diff] [blame] | 155 | add_subdirectory(tools/mlir-linalg-ods-gen) |
River Riddle | 597fde5 | 2022-04-20 05:46:34 | [diff] [blame] | 156 | add_subdirectory(tools/mlir-pdll) |
Isuru Fernando | 103678d | 2020-03-14 18:41:12 | [diff] [blame] | 157 | |
Jacques Pienaar | 1273af2 | 2019-03-30 05:10:12 | [diff] [blame] | 158 | add_subdirectory(include/mlir) |
| 159 | add_subdirectory(lib) |
Alex Zinenko | 75f239e | 2020-08-05 12:36:16 | [diff] [blame] | 160 | # C API needs all dialects for registration, but should be built before tests. |
| 161 | add_subdirectory(lib/CAPI) |
Alex Zinenko | 14c9207 | 2021-10-14 15:18:28 | [diff] [blame] | 162 | |
Alexandre Rames | 23dc948 | 2020-05-18 16:44:26 | [diff] [blame] | 163 | if (MLIR_INCLUDE_TESTS) |
Stephen Neuendorffer | b0dce6b | 2020-10-04 22:17:34 | [diff] [blame] | 164 | add_definitions(-DMLIR_INCLUDE_TESTS) |
Mehdi Amini | 09cfec6 | 2021-02-11 01:17:24 | [diff] [blame] | 165 | add_custom_target(MLIRUnitTests) |
Isuru Fernando | c95c0db | 2021-02-04 01:59:08 | [diff] [blame] | 166 | if (EXISTS ${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest/include/gtest/gtest.h) |
Michał Górny | 2aa1af9 | 2021-02-02 19:09:45 | [diff] [blame] | 167 | add_subdirectory(unittests) |
| 168 | else() |
| 169 | message(WARNING "gtest not found, unittests will not be available") |
| 170 | endif() |
Alexandre Rames | 23dc948 | 2020-05-18 16:44:26 | [diff] [blame] | 171 | add_subdirectory(test) |
| 172 | endif() |
Valentin Churavy | 7c64f6b | 2020-02-09 03:27:54 | [diff] [blame] | 173 | # Tools needs to come late to ensure that MLIR_ALL_LIBS is populated. |
| 174 | # Generally things after this point may depend on MLIR_ALL_LIBS or libMLIR.so. |
Stephen Neuendorffer | b0dce6b | 2020-10-04 22:17:34 | [diff] [blame] | 175 | add_subdirectory(tools) |
Mehdi Amini | 38b71d6 | 2019-04-02 17:02:07 | [diff] [blame] | 176 | |
Uday Bondhugula | 9c21ddb | 2021-05-22 14:25:38 | [diff] [blame] | 177 | if(MLIR_ENABLE_BINDINGS_PYTHON) |
Stella Laurenzo | 9f3f6d7 | 2021-04-28 20:04:17 | [diff] [blame] | 178 | # Python sources: built extensions come in via lib/Bindings/Python |
| 179 | add_subdirectory(python) |
| 180 | endif() |
| 181 | |
Stephen Neuendorffer | b0dce6b | 2020-10-04 22:17:34 | [diff] [blame] | 182 | if( LLVM_INCLUDE_EXAMPLES ) |
Mehdi Amini | 38b71d6 | 2019-04-02 17:02:07 | [diff] [blame] | 183 | add_subdirectory(examples) |
| 184 | endif() |
Eric Schweitz | 88368a1 | 2019-11-20 05:04:45 | [diff] [blame] | 185 | |
Stephen Neuendorffer | b0dce6b | 2020-10-04 22:17:34 | [diff] [blame] | 186 | option(MLIR_INCLUDE_DOCS "Generate build targets for the MLIR docs." |
| 187 | ${LLVM_INCLUDE_DOCS}) |
Jacques Pienaar | e298e21 | 2020-01-25 17:17:31 | [diff] [blame] | 188 | if (MLIR_INCLUDE_DOCS) |
| 189 | add_subdirectory(docs) |
| 190 | endif() |
| 191 | |
Stephen Neuendorffer | b0dce6b | 2020-10-04 22:17:34 | [diff] [blame] | 192 | if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) |
Eric Schweitz | 88368a1 | 2019-11-20 05:04:45 | [diff] [blame] | 193 | install(DIRECTORY include/mlir include/mlir-c |
John Ericson | 5ad9699 | 2022-01-18 07:03:10 | [diff] [blame] | 194 | DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" |
Eric Schweitz | 88368a1 | 2019-11-20 05:04:45 | [diff] [blame] | 195 | COMPONENT mlir-headers |
| 196 | FILES_MATCHING |
Kern Handa | aab72f8 | 2020-01-06 09:01:59 | [diff] [blame] | 197 | PATTERN "*.def" |
Eric Schweitz | 88368a1 | 2019-11-20 05:04:45 | [diff] [blame] | 198 | PATTERN "*.h" |
| 199 | PATTERN "*.inc" |
Kern Handa | cde071c4 | 2019-12-29 17:04:09 | [diff] [blame] | 200 | PATTERN "*.td" |
Eric Schweitz | 88368a1 | 2019-11-20 05:04:45 | [diff] [blame] | 201 | PATTERN "LICENSE.TXT" |
| 202 | ) |
| 203 | |
| 204 | install(DIRECTORY ${MLIR_INCLUDE_DIR}/mlir ${MLIR_INCLUDE_DIR}/mlir-c |
John Ericson | 5ad9699 | 2022-01-18 07:03:10 | [diff] [blame] | 205 | DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" |
Eric Schweitz | 88368a1 | 2019-11-20 05:04:45 | [diff] [blame] | 206 | COMPONENT mlir-headers |
| 207 | FILES_MATCHING |
Mehdi Amini | 5114d55 | 2020-01-22 00:44:17 | [diff] [blame] | 208 | PATTERN "*.def" |
Eric Schweitz | 88368a1 | 2019-11-20 05:04:45 | [diff] [blame] | 209 | PATTERN "*.h" |
| 210 | PATTERN "*.gen" |
| 211 | PATTERN "*.inc" |
Mehdi Amini | 5114d55 | 2020-01-22 00:44:17 | [diff] [blame] | 212 | PATTERN "*.td" |
Eric Schweitz | 88368a1 | 2019-11-20 05:04:45 | [diff] [blame] | 213 | PATTERN "CMakeFiles" EXCLUDE |
| 214 | PATTERN "config.h" EXCLUDE |
| 215 | ) |
| 216 | |
| 217 | if (NOT LLVM_ENABLE_IDE) |
| 218 | add_llvm_install_targets(install-mlir-headers |
| 219 | DEPENDS mlir-headers |
| 220 | COMPONENT mlir-headers) |
| 221 | endif() |
| 222 | endif() |
Mehdi Amini | 5114d55 | 2020-01-22 00:44:17 | [diff] [blame] | 223 | |
Nathan Lanza | f46ce03 | 2022-06-08 02:55:05 | [diff] [blame] | 224 | # Custom target to install all mlir libraries |
| 225 | add_custom_target(mlir-libraries) |
| 226 | set_target_properties(mlir-libraries PROPERTIES FOLDER "Misc") |
| 227 | |
| 228 | if (NOT LLVM_ENABLE_IDE) |
| 229 | add_llvm_install_targets(install-mlir-libraries |
| 230 | DEPENDS mlir-libraries |
| 231 | COMPONENT mlir-libraries) |
| 232 | endif() |
| 233 | |
| 234 | get_property(MLIR_LIBS GLOBAL PROPERTY MLIR_ALL_LIBS) |
| 235 | if(MLIR_LIBS) |
| 236 | list(REMOVE_DUPLICATES MLIR_LIBS) |
| 237 | foreach(lib ${MLIR_LIBS}) |
| 238 | add_dependencies(mlir-libraries ${lib}) |
| 239 | if(NOT LLVM_ENABLE_IDE) |
| 240 | add_dependencies(install-mlir-libraries install-${lib}) |
| 241 | add_dependencies(install-mlir-libraries-stripped install-${lib}-stripped) |
| 242 | endif() |
| 243 | endforeach() |
| 244 | endif() |
| 245 | |
Mehdi Amini | 5114d55 | 2020-01-22 00:44:17 | [diff] [blame] | 246 | add_subdirectory(cmake/modules) |
Saurabh Jha | fa90c9d | 2022-01-27 21:35:34 | [diff] [blame] | 247 | |
| 248 | if (MLIR_ENABLE_PYTHON_BENCHMARKS) |
| 249 | add_subdirectory(utils/mbr) |
| 250 | endif() |