1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-Microsoft-ell

Клонировать/Скачать
CMakeLists.txt 11 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 09.06.2025 00:21 002f49e
#
# Файл CMake для подпроектов Embedded Learning Library
#
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
# Политика для ошибки при несуществующей зависимости в add_dependencies.
cmake_policy(SET CMP0046 NEW)
# Включение модулей в директории CMake.
set(ELL_ROOT "${CMAKE_CURRENT_SOURCE_DIR}")
list(APPEND CMAKE_MODULE_PATH "${ELL_ROOT}/CMake")
include(CompilerCache)
project(ELL CXX ASM)
if(MSVC)
enable_language(ASM_MASM)
endif()
file(STRINGS "VERSION" ELL_VERSION)
message(STATUS "Версия ELL: ${ELL_VERSION}")
# Определение пользовательских конфигурационных типов для Visual Studio
if(CMAKE_CONFIGURATION_TYPES)
# Копирование важной информации конфигурации из конфигурации Release в новую конфигурацию Documentation
list(APPEND CMAKE_CONFIGURATION_TYPES Documentation)
set(CMAKE_CXX_FLAGS_DOCUMENTATION ${CMAKE_CXX_FLAGS_RELEASE})
set(CMAKE_C_FLAGS_DOCUMENTATION ${CMAKE_C_FLAGS_RELEASE})
set(CMAKE_EXE_LINKER_FLAGS_DOCUMENTATION ${CMAKE_EXE_LINKER_FLAGS_RELEASE})
set(CMAKE_SHARED_LINKER_FLAGS_DOCUMENTATION ${CMAKE_SHARED_LINKER_FLAGS_RELEASE})
set(CMAKE_MODULE_LINKER_FLAGS_DOCUMENTATION ${CMAKE_MODULE_LINKER_FLAGS_RELEASE})
endif()
# Попытка создания базы данных компиляции, которая полезна при работе с инструментами clang
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)# Опции
# Чтобы установить опцию:
# cmake -DMyOption=ON|OFF buildDirectory
# (так что если мы запускаем cmake из директории 'build' внутри основной директории, выполните это:
# cmake -DBUILD_DOC=OFF .. )
option(BUILD_DOC "Сборка документации Doxygen" ON)
option(STRICT_MODE "Сборка с 'предупреждения как ошибки'" OFF)
option(PROFILING "Включение тестов профилирования производительности" OFF)
option(DISABLE_PYTHON "Явное отключение сборки модулей Python" OFF)
option(CNTK "Включение импортера CNTK и связанных юнит-тестов (требует модуля CNTK Python)" OFF)
option(ONNX "Включение импортера ONNX и связанных юнит-тестов (требует модулей PyTorch и ONNX Python)" OFF)```cmake
set(FLAKE8_CONFIG "${ELL_ROOT}/.flake8")
set(TEST_MODELS_REPO "https://github.com/Microsoft/ell-test-models" CACHE STRING "URL к репозиторию git, содержащему тестовые модели")
message(STATUS "Настройка тестов для использования TEST_MODELS_REPO по адресу: ${TEST_MODELS_REPO}")
if(NOT ELL_EXTERNAL_DIR)
set(ELL_EXTERNAL_DIR "${ELL_ROOT}/external" CACHE STRING "Директория для установки внешних зависимостей")
endif()
set(RPI_PASSWORD "$ENV{RPI_PASSWORD}")
set(RPI_CLUSTER "$ENV{RPI_CLUSTER}")
set(RPI_KEY "$ENV{RPI_APIKEY}")
if(DISABLE_PYTHON)
message(STATUS "Python был явно отключен")
set(PYTHON_ENABLED OFF)
else()
foreach(PYTHON_VERSION 3.7 3.6)
find_package(PythonInterp ${PYTHON_VERSION} QUIET)
find_package(PythonLibs ${PYTHON_VERSION} QUIET)
message(STATUS "Поиск python ${PYTHON_VERSION}: PYTHONINTERP_FOUND=${PYTHONINTERP_FOUND}, PYTHONLIBS_FOUND=${PYTHONLIBS_FOUND}")
if(${PYTHONINTERP_FOUND} AND ${PYTHONLIBS_FOUND})
message(STATUS "PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}")
message(STATUS "PYTHON_VERSION_STRING=${PYTHON_VERSION_STRING}")
message(STATUS "PYTHON_VERSION_MAJOR=${PYTHON_VERSION_MAJOR}")
message(STATUS "PYTHON_LIBRARIES=${PYTHON_LIBRARIES}")
message(STATUS "PYTHON_INCLUDE_PATH=${PYTHON_INCLUDE_PATH}")
message(STATUS "PYTHON_INCLUDE_DIRS=${PYTHON_INCLUDE_DIRS}")
message(STATUS "PYTHON_DEBUG_LIBRARIES=${PYTHON_DEBUG_LIBRARIES}")
message(STATUS "PYTHONLIBS_VERSION_STRING=${PYTHONLIBS_VERSION_STRING}")
break()
endif()
endforeach()
if(${PYTHONLIBS_FOUND})
set(PYTHON_ENABLED ON)
else()
set(PYTHON_ENABLED OFF)
message(STATUS "### Python версии 3.6 или выше не найдены, поэтому функции Python будут отключены")
endif()
endif()
include(Flake8)
# Включить возможность создания папок для организации проектов
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
# Установить версию C++
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
```# Применить -fPIC, где применимо к платформе
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# Найти платформо-специфический способ работы с потоками
set(THREADS_PREFER_PTHREAD_FLAG ON)
set(CMAKE_THREAD_PREFER_PTHREAD ON)
find_package(Threads REQUIRED)
if(STRICT_MODE)
message("-- Включено строгое режим с предупреждениями как ошибками.")
endif()
# Включить тестирование ctest
enable_testing()
# Установить глобальные переменные для помощи в поиске проектов NuGet
set(PACKAGE_ROOT ${ELL_EXTERNAL_DIR})```cmake
include(OpenBLASSetup)
include(LLVMSetup)
include(SWIGSetup)
include(CopySharedLibraries)
include(AddPrecompiledHeader)
``````cmake
if(MSVC)
# Установка опций, специфичных для Visual Studio
add_definitions(-DUNICODE)
add_compile_options(/utf-8)
add_compile_options(/MP)
add_compile_options(/bigobj)
add_compile_options(/W4)
add_compile_options(/permissive-)
if(STRICT_MODE)
add_compile_options(/WX)
endif()
# Отладочный линковщик должен соответствовать способу построения LLVM (либо /MD, либо /MDd)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${LLVM_MD_OPTION}")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${LLVM_MD_OPTION}")
else()
# Установка опций, специфичных для Clang/GCC
add_compile_options(-Wall)
if(STRICT_MODE)
add_compile_options(-Werror)
endif()
add_compile_options(-Wsign-compare)
add_compile_options(-Wno-missing-braces)
add_compile_options(-Wmissing-field-initializers)
add_compile_options(-fvisibility-inlines-hidden)
add_compile_options(-Wno-unknown-pragmas)
add_compile_options(-Wno-comment)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ggdb3 -O0")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -ggdb3 -O0")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -ggdb3")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -ggdb3")
if(${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
add_compile_options(-Wno-backslash-newline-escape)
add_compile_options(-Wno-self-assign)
else() # GCC
add_compile_options(-Wno-ignored-attributes)
endif()
endif()
```# Вывод полезного сообщения, если LLVM не найден на Windows
if(NOT LLVM_FOUND AND WIN32)
message(WARNING "LLVM не найден. Выполните следующую команду из основной директории проекта:\n nuget.exe restore external/packages.config -PackagesDirectory external")
endif()
```# Включение проектов CMake для библиотек и исполняемых файлов
add_subdirectory(libraries)
add_subdirectory(tools)
include(CommonInterfaces)
add_subdirectory(interfaces)
# Добавление примеров (имеют зависимости от интерфейсов, сгенерированных SWIG)
add_subdirectory(examples)
# Добавление пользовательских директорий в сборку ELL, если это требуется
if(EXISTS "${ELL_ROOT}/user")
# Добавление корневой пользовательской директории, если она имеет файл CMakeLists.txt и INCLUDE_IN_ELL_BUILD.txt
if(EXISTS "${ELL_ROOT}/user/CMakeLists.txt" AND EXISTS "${ELL_ROOT}/user/INCLUDE_IN_ELL_BUILD.txt")
message(STATUS "Добавление пользовательской директории в сборку ELL")
add_subdirectory(user)
endif()
# Теперь добавляем все дочерние директории, которые имеют файлы CMakeLists.txt и INCLUDE_IN_ELL_BUILD.txt
file(GLOB children RELATIVE "${ELL_ROOT}/user" "${ELL_ROOT}/user/*")
foreach(child ${children})
if(IS_DIRECTORY "${ELL_ROOT}/user/${child}" AND EXISTS "${ELL_ROOT}/user/${child}/CMakeLists.txt" AND EXISTS "${ELL_ROOT}/user/${child}/INCLUDE_IN_ELL_BUILD.txt")
message(STATUS "Добавление пользовательской директории ${child} в сборку ELL")
add_subdirectory("user/${child}")
endif()
endforeach()
endif()
message(STATUS "Запись: ${CMAKE_BINARY_DIR}/config.json")
set(JSON "{ \"test_models_repo\": \"${TEST_MODELS_REPO}\" }")
file(WRITE "${CMAKE_BINARY_DIR}/config.json" ${JSON})
configure_file("${CMAKE_BINARY_DIR}/config.json" "config.json" COPYONLY)
# Добавление проекта для документации уровня решения
set(DOC README.md
StyleGuide.md)
add_custom_target(documentation ALL DEPENDS ${DOC} SOURCES ${DOC})
set_property(TARGET documentation PROPERTY FOLDER "documentation")
# Генерация документации Doxygen
if(BUILD_DOC)
find_package(Doxygen 1.8 QUIET) # Поиск внешнего пакета NuGet также
if(NOT DOXYGEN_FOUND)
set(DOXYGEN_PACKAGE_NAME Doxygen)
set(DOXYGEN_PACKAGE_VERSION 1.8.13)
set(DOXYGEN_PACKAGE_DIR ${PACKAGE_ROOT}/${DOXYGEN_PACKAGE_NAME}.${DOXYGEN_PACKAGE_VERSION})
find_program(DOXYGEN_EXECUTABLE doxygen
HINTS "${DOXYGEN_PACKAGE_DIR}/tools")
if(DOXYGEN_EXECUTABLE)
set(DOXYGEN_FOUND TRUE)
endif()
endif()
```cmake
if(DOXYGEN_FOUND)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
set(DOXYGEN_FILE_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile")
endif()``` добавить_пользовательская_цель(doc
COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE_LOCATION}
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
COMMENT "Создание документации Doxygen" VERBATIM
SOURCES Doxyfile)
установить_свойство(ЦЕЛЫЙ doc СВОЙСТВО FOLDER "документация")
иначе()
сообщение(ПРЕДУПРЕЖДЕНИЕ "Обработчик Doxygen не найден")
конец_если()
конец_если()
```

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-Microsoft-ell.git
git@api.gitlife.ru:oschina-mirror/mirrors-Microsoft-ell.git
oschina-mirror
mirrors-Microsoft-ell
mirrors-Microsoft-ell
master