-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
126 lines (101 loc) · 4.97 KB
/
CMakeLists.txt
File metadata and controls
126 lines (101 loc) · 4.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
project(CMLibsSuperBuild LANGUAGES C CXX)
cmake_policy(SET CMP0057 NEW)
cmake_policy(SET CMP0054 NEW)
get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}")
include(ExternalProject)
include(Functions)
# Clean up GUI options
mark_as_advanced(QT_QMAKE_EXECUTABLE)
if (APPLE)
mark_as_advanced(CMAKE_CODEBLOCKS_EXECUTABLE)
mark_as_advanced(CMAKE_EXECUTABLE_FORMAT)
mark_as_advanced(CMAKE_OSX_ARCHITECTURES)
mark_as_advanced(CMAKE_OSX_DEPLOYMENT_TARGET)
mark_as_advanced(CMAKE_OSX_SYSROOT)
endif()
find_package(Python COMPONENTS Interpreter Development)
set(KNOWN_CMLIBS_VERSIONS develop)
# Options:
set(CMLIBS_MODE "develop" CACHE STRING "The branch or tag to setup. Must be one of: ${KNOWN_CMLIBS_VERSIONS}")
if (NOT IS_MULTI_CONFIG)
set(CMLIBS_BUILD_TYPE Release CACHE STRING "Set the configuration build type.")
endif()
set(CMLIBS_ROOT "" CACHE PATH "The location of the CMLIBS root directory, it must exist!")
set(BUILD_CONFIGS all dependencies)
set(CMLIBS_SETUP_TYPE "all" CACHE STRING "Define what should be setup.")
set_property(CACHE CMLIBS_SETUP_TYPE PROPERTY STRINGS ${BUILD_CONFIGS})
set(CMLIBS_PYTHON_EXECUTABLE "${Python_EXECUTABLE}" CACHE FILEPATH "Set the Python to use.")
set(CMLIBS_USER_SETTINGS_FILE "" CACHE FILEPATH "Set the user settings file. Default: ''")
set(CMLIBS_USE_MESA OFF CACHE BOOL "Build version to use OSMesa for software rendering.")
# Internalise some variables that don't have any meaning here
set(CMAKE_BUILD_TYPE "Release" CACHE INTERNAL "Internalise CMAKE_BUILD_TYPE")
set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE INTERNAL "Internalise CMAKE_INSTALL_PREFIX")
if (NOT IS_MULTI_CONFIG)
set(CMAKE_CONFIGURATION_TYPES ${CMAKE_CONFIGURATION_TYPES} CACHE INTERNAL "Internalise CMAKE_CONFIGURATION_TYPES")
endif()
if (NOT EXISTS ${CMLIBS_ROOT})
message(FATAL_ERROR "Location CMLIBS_ROOT: '${CMLIBS_ROOT}' does not exist.")
endif()
find_package(Git)
if (NOT GITHUB_PROTOCOL)
get_github_protocol(_GITHUB_PROTOCOL)
endif()
set(GITHUB_PROTOCOL ${_GITHUB_PROTOCOL} CACHE STRING "Set GitHub protocol.")
mark_as_advanced(GITHUB_PROTOCOL)
set(CMLIBS_PROJECTS CMAKE_MODULES)
set(ALL_PROJECTS CMAKE_MODULES)
set(DEFAULT_USER_SETTINGS_FILE "${CMAKE_CURRENT_BINARY_DIR}/Settings-user.cmake")
# load settings for mode
include("Settings-pre")
include("Settings-${CMLIBS_MODE}")
if (EXISTS "${CMLIBS_USER_SETTINGS_FILE}")
include("${CMLIBS_USER_SETTINGS_FILE}")
elseif (EXISTS "${DEFAULT_USER_SETTINGS_FILE}")
include("${DEFAULT_USER_SETTINGS_FILE}")
endif()
include("Settings-post")
set(CMLIBS_CMAKE_MODULES_SOURCE_DIR "${CMLIBS_ROOT}/src/cmake_modules")
set(CMLIBS_CMAKE_MODULES_BINARY_DIR "${CMLIBS_ROOT}/build${SINGLECONFIG_BUILD_DIR_LABEL}/cmake_modules")
if (EXISTS ${CMLIBS_CMAKE_MODULES_SOURCE_DIR}/CMakeLists.txt)
message(STATUS "CMake modules source files are already present, skipping downloading them.")
unset(DOWNLOAD_CMAKE_MODULES_CMD)
endif()
set(CMLIBS_CMAKE_MODULES_INSTALL_DIR ${CMLIBS_ROOT}/install)
list(APPEND CMAKE_MODULES_ARGS -DINSTALL_PREFIX=${CMLIBS_CMAKE_MODULES_INSTALL_DIR})
ExternalProject_Add(setup_cmake_modules
${DOWNLOAD_CMAKE_MODULES_CMD}
SOURCE_DIR "${CMLIBS_CMAKE_MODULES_SOURCE_DIR}"
BINARY_DIR "${CMLIBS_CMAKE_MODULES_BINARY_DIR}"
CMAKE_COMMAND ${CMAKE_COMMAND}
CMAKE_ARGS ${SINGLECONFIG_BUILD_CONFIG} ${CMAKE_MODULES_ARGS}
BUILD_COMMAND ""
)
set(CMLIBS_CMAKE_MODULE_PATH)
list(APPEND CMLIBS_CMAKE_MODULE_PATH "${CMLIBS_CMAKE_MODULES_INSTALL_DIR}/share/cmake/Modules/FindModuleWrappers")
list(APPEND CMLIBS_CMAKE_MODULE_PATH "${CMLIBS_CMAKE_MODULES_INSTALL_DIR}/share/cmake/Modules/")
list(APPEND CMLIBS_CMAKE_MODULE_PATH "${CMLIBS_CMAKE_MODULES_INSTALL_DIR}/share/cmake/Modules/CMLIBS")
string(REPLACE ";" "${LIST_SEPARATOR}" CMLIBS_CMAKE_MODULE_PATH "${CMLIBS_CMAKE_MODULE_PATH}")
set(PROJECT_ARGS)
list(APPEND PROJECT_ARGS -DCMLIBS_ROOT=${CMLIBS_ROOT})
list(APPEND PROJECT_ARGS -DCMLIBS_CMAKE_MODULE_PATH=${CMLIBS_CMAKE_MODULE_PATH})
list(APPEND PROJECT_ARGS -DCMLIBS_MODE=${CMLIBS_MODE})
if (NOT IS_MULTI_CONFIG)
list(APPEND PROJECT_ARGS -DCMLIBS_BUILD_TYPE=${CMLIBS_BUILD_TYPE})
endif()
list(APPEND PROJECT_ARGS -DCMLIBS_SETUP_TYPE=${CMLIBS_SETUP_TYPE})
list(APPEND PROJECT_ARGS -DCMLIBS_USE_MESA=${CMLIBS_USE_MESA})
list(APPEND PROJECT_ARGS -DCMLIBS_PYTHON_EXECUTABLE=${CMLIBS_PYTHON_EXECUTABLE})
list(APPEND PROJECT_ARGS -DCMLIBS_USER_SETTINGS_FILE=${CMLIBS_USER_SETTINGS_FILE})
list(APPEND PROJECT_ARGS -DDEFAULT_USER_SETTINGS_FILE=${DEFAULT_USER_SETTINGS_FILE})
list(APPEND PROJECT_ARGS -DCMLIBS_GITHUB_PROTOCOL=${GITHUB_PROTOCOL})
ExternalProject_Add(setup_projects
DEPENDS setup_cmake_modules
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/projects
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/projects
LIST_SEPARATOR ${LIST_SEPARATOR}
CMAKE_ARGS ${SINGLECONFIG_BUILD_CONFIG} ${PROJECT_ARGS}
# Use default build command for a CMake argumented project.
INSTALL_COMMAND ""
)