]> git.proxmox.com Git - ceph.git/blame - ceph/src/jaegertracing/opentelemetry-cpp/tools/vcpkg/scripts/cmake/vcpkg_build_nmake.cmake
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / jaegertracing / opentelemetry-cpp / tools / vcpkg / scripts / cmake / vcpkg_build_nmake.cmake
CommitLineData
1e59de90
TL
1#[===[.md:\r
2# vcpkg_build_nmake\r
3\r
4Build a msvc makefile project.\r
5\r
6## Usage:\r
7```cmake\r
8vcpkg_build_nmake(\r
9 SOURCE_PATH <${SOURCE_PATH}>\r
10 [NO_DEBUG]\r
11 [TARGET <all>]\r
12 [PROJECT_SUBPATH <${SUBPATH}>]\r
13 [PROJECT_NAME <${MAKEFILE_NAME}>]\r
14 [PRERUN_SHELL <${SHELL_PATH}>]\r
15 [PRERUN_SHELL_DEBUG <${SHELL_PATH}>]\r
16 [PRERUN_SHELL_RELEASE <${SHELL_PATH}>]\r
17 [OPTIONS <-DUSE_THIS_IN_ALL_BUILDS=1>...]\r
18 [OPTIONS_RELEASE <-DOPTIMIZE=1>...]\r
19 [OPTIONS_DEBUG <-DDEBUGGABLE=1>...]\r
20 [TARGET <target>])\r
21```\r
22\r
23## Parameters\r
24### SOURCE_PATH\r
25Specifies the directory containing the source files.\r
26By convention, this is usually set in the portfile as the variable `SOURCE_PATH`.\r
27\r
28### PROJECT_SUBPATH\r
29Specifies the sub directory containing the `makefile.vc`/`makefile.mak`/`makefile.msvc` or other msvc makefile.\r
30\r
31### PROJECT_NAME\r
32Specifies the name of msvc makefile name.\r
33Default is `makefile.vc`\r
34\r
35### NO_DEBUG\r
36This port doesn't support debug mode.\r
37\r
38### ENABLE_INSTALL\r
39Install binaries after build.\r
40\r
41### PRERUN_SHELL\r
42Script that needs to be called before build\r
43\r
44### PRERUN_SHELL_DEBUG\r
45Script that needs to be called before debug build\r
46\r
47### PRERUN_SHELL_RELEASE\r
48Script that needs to be called before release build\r
49\r
50### OPTIONS\r
51Additional options passed to generate during the generation.\r
52\r
53### OPTIONS_RELEASE\r
54Additional options passed to generate during the Release generation. These are in addition to `OPTIONS`.\r
55\r
56### OPTIONS_DEBUG\r
57Additional options passed to generate during the Debug generation. These are in addition to `OPTIONS`.\r
58\r
59### TARGET\r
60The target passed to the nmake build command (`nmake/nmake install`). If not specified, no target will\r
61be passed.\r
62\r
63### ADD_BIN_TO_PATH\r
64Adds the appropriate Release and Debug `bin\` directories to the path during the build such that executables can run against the in-tree DLLs.\r
65\r
66## Notes:\r
67This command should be preceded by a call to [`vcpkg_configure_nmake()`](vcpkg_configure_nmake.md).\r
68You can use the alias [`vcpkg_install_nmake()`](vcpkg_install_nmake.md) function if your makefile supports the\r
69"install" target\r
70\r
71## Examples\r
72\r
73* [tcl](https://github.com/Microsoft/vcpkg/blob/master/ports/tcl/portfile.cmake)\r
74* [freexl](https://github.com/Microsoft/vcpkg/blob/master/ports/freexl/portfile.cmake)\r
75#]===]\r
76\r
77function(vcpkg_build_nmake)\r
78 # parse parameters such that semicolons in options arguments to COMMAND don't get erased\r
79 cmake_parse_arguments(PARSE_ARGV 0 _bn\r
80 "ADD_BIN_TO_PATH;ENABLE_INSTALL;NO_DEBUG"\r
81 "SOURCE_PATH;PROJECT_SUBPATH;PROJECT_NAME;LOGFILE_ROOT"\r
82 "OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG;PRERUN_SHELL;PRERUN_SHELL_DEBUG;PRERUN_SHELL_RELEASE;TARGET"\r
83 )\r
84 \r
85 if (NOT CMAKE_HOST_WIN32)\r
86 message(FATAL_ERROR "vcpkg_build_nmake only support windows.")\r
87 endif()\r
88 \r
89 if (_bn_OPTIONS_DEBUG STREQUAL _bn_OPTIONS_RELEASE)\r
90 message(FATAL_ERROR "Detected debug configuration is equal to release configuration, please use NO_DEBUG for vcpkg_build_nmake/vcpkg_install_nmake")\r
91 endif()\r
92\r
93 if(NOT _bn_LOGFILE_ROOT)\r
94 set(_bn_LOGFILE_ROOT "build")\r
95 endif()\r
96 \r
97 if (NOT _bn_PROJECT_NAME)\r
98 set(MAKEFILE_NAME makefile.vc)\r
99 else()\r
100 set(MAKEFILE_NAME ${_bn_PROJECT_NAME})\r
101 endif()\r
102 \r
103 set(MAKE )\r
104 set(MAKE_OPTS_BASE )\r
105 \r
106 find_program(NMAKE nmake REQUIRED)\r
107 get_filename_component(NMAKE_EXE_PATH ${NMAKE} DIRECTORY)\r
108 # Load toolchains\r
109 if(NOT VCPKG_CHAINLOAD_TOOLCHAIN_FILE)\r
110 set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/windows.cmake")\r
111 endif()\r
112 include("${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}")\r
113 # Set needed env\r
114 set(ENV{PATH} "$ENV{PATH};${NMAKE_EXE_PATH}")\r
115 set(ENV{INCLUDE} "${CURRENT_INSTALLED_DIR}/include;$ENV{INCLUDE}")\r
116 # Set make command and install command\r
117 set(MAKE ${NMAKE} /NOLOGO /G /U)\r
118 set(MAKE_OPTS_BASE -f ${MAKEFILE_NAME})\r
119 if (_bn_ENABLE_INSTALL)\r
120 set(INSTALL_COMMAND install)\r
121 endif()\r
122 if (_bn_TARGET)\r
123 set(MAKE_OPTS_BASE ${MAKE_OPTS_BASE} ${_bn_TARGET} ${INSTALL_COMMAND})\r
124 else()\r
125 set(MAKE_OPTS_BASE ${MAKE_OPTS_BASE} all ${INSTALL_COMMAND})\r
126 endif()\r
127 # Add subpath to work directory\r
128 if (_bn_PROJECT_SUBPATH)\r
129 set(_bn_PROJECT_SUBPATH /${_bn_PROJECT_SUBPATH})\r
130 else()\r
131 set(_bn_PROJECT_SUBPATH )\r
132 endif()\r
133 \r
134 foreach(BUILDTYPE "debug" "release")\r
135 if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL BUILDTYPE)\r
136 if(BUILDTYPE STREQUAL "debug")\r
137 # Skip debug generate\r
138 if (_bn_NO_DEBUG)\r
139 continue()\r
140 endif()\r
141 # Generate obj dir suffix\r
142 set(SHORT_BUILDTYPE "-dbg")\r
143 set(CONFIG "Debug")\r
144 # Add install command and arguments\r
145 set(MAKE_OPTS ${MAKE_OPTS_BASE})\r
146 if (_bn_ENABLE_INSTALL)\r
147 set(INSTALL_OPTS INSTALLDIR=${CURRENT_PACKAGES_DIR}/debug)\r
148 set(MAKE_OPTS ${MAKE_OPTS} ${INSTALL_OPTS})\r
149 endif()\r
150 set(MAKE_OPTS ${MAKE_OPTS} ${_bn_OPTIONS} ${_bn_OPTIONS_DEBUG})\r
151 \r
152 unset(ENV{CL})\r
153 set(TMP_CL_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}")\r
154 string(REPLACE "/" "-" TMP_CL_FLAGS "${TMP_CL_FLAGS}")\r
155 set(ENV{CL} "$ENV{CL} ${TMP_CL_FLAGS}")\r
156 else()\r
157 # In NO_DEBUG mode, we only use ${TARGET_TRIPLET} directory.\r
158 if (_bn_NO_DEBUG)\r
159 set(SHORT_BUILDTYPE "")\r
160 else()\r
161 set(SHORT_BUILDTYPE "-rel")\r
162 endif()\r
163 set(CONFIG "Release")\r
164 # Add install command and arguments\r
165 set(MAKE_OPTS ${MAKE_OPTS_BASE})\r
166 if (_bn_ENABLE_INSTALL)\r
167 set(INSTALL_OPTS INSTALLDIR=${CURRENT_PACKAGES_DIR})\r
168 set(MAKE_OPTS ${MAKE_OPTS} ${INSTALL_OPTS})\r
169 endif()\r
170 set(MAKE_OPTS ${MAKE_OPTS} ${_bn_OPTIONS} ${_bn_OPTIONS_RELEASE})\r
171 \r
172 unset(ENV{CL})\r
173 set(TMP_CL_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}")\r
174 string(REPLACE "/" "-" TMP_CL_FLAGS "${TMP_CL_FLAGS}")\r
175 set(ENV{CL} "$ENV{CL} ${TMP_CL_FLAGS}")\r
176 endif()\r
177 \r
178 set(CURRENT_TRIPLET_NAME ${TARGET_TRIPLET}${SHORT_BUILDTYPE})\r
179 set(OBJ_DIR ${CURRENT_BUILDTREES_DIR}/${CURRENT_TRIPLET_NAME})\r
180 \r
181 file(REMOVE_RECURSE ${OBJ_DIR})\r
182 file(MAKE_DIRECTORY ${OBJ_DIR})\r
183 file(GLOB_RECURSE SOURCE_FILES ${_bn_SOURCE_PATH}/*)\r
184 foreach(ONE_SOUCRCE_FILE ${SOURCE_FILES})\r
185 get_filename_component(DST_DIR ${ONE_SOUCRCE_FILE} PATH)\r
186 string(REPLACE "${_bn_SOURCE_PATH}" "${OBJ_DIR}" DST_DIR "${DST_DIR}")\r
187 file(COPY ${ONE_SOUCRCE_FILE} DESTINATION ${DST_DIR})\r
188 endforeach()\r
189 \r
190 if (_bn_PRERUN_SHELL)\r
191 message(STATUS "Prerunning ${CURRENT_TRIPLET_NAME}")\r
192 vcpkg_execute_required_process(\r
193 COMMAND ${_bn_PRERUN_SHELL}\r
194 WORKING_DIRECTORY ${OBJ_DIR}${_bn_PROJECT_SUBPATH}\r
195 LOGNAME "$prerun-${CURRENT_TRIPLET_NAME}"\r
196 )\r
197 endif()\r
198 if (BUILDTYPE STREQUAL "debug" AND _bn_PRERUN_SHELL_DEBUG)\r
199 message(STATUS "Prerunning ${CURRENT_TRIPLET_NAME}")\r
200 vcpkg_execute_required_process(\r
201 COMMAND ${_bn_PRERUN_SHELL_DEBUG}\r
202 WORKING_DIRECTORY ${OBJ_DIR}${_bn_PROJECT_SUBPATH}\r
203 LOGNAME "prerun-${CURRENT_TRIPLET_NAME}-dbg"\r
204 )\r
205 endif()\r
206 if (BUILDTYPE STREQUAL "release" AND _bn_PRERUN_SHELL_RELEASE)\r
207 message(STATUS "Prerunning ${CURRENT_TRIPLET_NAME}")\r
208 vcpkg_execute_required_process(\r
209 COMMAND ${_bn_PRERUN_SHELL_RELEASE}\r
210 WORKING_DIRECTORY ${OBJ_DIR}${_bn_PROJECT_SUBPATH}\r
211 LOGNAME "prerun-${CURRENT_TRIPLET_NAME}-rel"\r
212 )\r
213 endif()\r
214\r
215 if (NOT _bn_ENABLE_INSTALL)\r
216 message(STATUS "Building ${CURRENT_TRIPLET_NAME}")\r
217 else()\r
218 message(STATUS "Building and installing ${CURRENT_TRIPLET_NAME}")\r
219 endif()\r
220\r
221 vcpkg_execute_build_process(\r
222 COMMAND ${MAKE} ${MAKE_OPTS}\r
223 WORKING_DIRECTORY ${OBJ_DIR}${_bn_PROJECT_SUBPATH}\r
224 LOGNAME "${_bn_LOGFILE_ROOT}-${CURRENT_TRIPLET_NAME}"\r
225 )\r
226\r
227 if(_bn_ADD_BIN_TO_PATH)\r
228 set(ENV{PATH} "${_BACKUP_ENV_PATH}")\r
229 endif()\r
230 endif()\r
231 endforeach()\r
232endfunction()\r