Guest User

Untitled

a guest
Dec 27th, 2015
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.63 KB | None | 0 0
  1. # ########################################################################
  2. # Copyright 2013 Advanced Micro Devices, Inc.
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. # ########################################################################
  16.  
  17. cmake_minimum_required(VERSION 2.8)
  18.  
  19. #User toggle-able options that can be changed on the command line with -D
  20. option( BUILD_RUNTIME "Build the BLAS runtime library" ON )
  21. option( BUILD_TEST "Build the library testing suite (dependency on google test, Boost, and ACML)" ON )
  22. option( BUILD_PERFORMANCE "Copy the performance scripts that can measure and graph performance" OFF )
  23. option( BUILD_SAMPLE "Build the sample programs" OFF )
  24. option( BUILD_CLIENT "Build a command line clBLAS client program with a variety of configurable parameters (dependency on Boost)" OFF )
  25. option( BUILD_KTEST "A command line tool for testing single clBLAS kernel" ON )
  26. option( BUILD_SHARED_LIBS "Build shared libraries" ON )
  27.  
  28. #enable or disable offline compilation for different devices. Currently only Hawaii, Bonaire, Tahiti have the option.
  29. #option( OPENCL_OFFLINE_BUILD_HAWAII_KERNEL "Offline compile the OpenCL kernels for Hawaii device" OFF)
  30. #option( OPENCL_OFFLINE_BUILD_BONAIRE_KERNEL "Offline compile the OpenCL kernels for Bonaire device" OFF)
  31. #option( OPENCL_OFFLINE_BUILD_TAHITI_KERNEL "Offline compile the OpenCL kernels for Tathit device" OFF)
  32. set( OPENCL_OFFLINE_BUILD_HAWAII_KERNEL OFF)
  33. set( OPENCL_OFFLINE_BUILD_BONAIRE_KERNEL OFF)
  34. set( OPENCL_OFFLINE_BUILD_TAHITI_KERNEL OFF)
  35.  
  36. #if( (OPENCL_OFFLINE_BUILD_HAWAII_KERNEL AND OPENCL_OFFLINE_BUILD_BONAIRE_KERNEL) OR (OPENCL_OFFLINE_BUILD_HAWAII_KERNEL AND OPENCL_OFFLINE_BUILD_TAHITI_KERNEL) OR (OPENCL_OFFLINE_BUILD_BONAIRE_KERNEL AND OPENCL_OFFLINE_BUILD_TAHITI_KERNEL))
  37. # MESSAGE( WARNING "More than one device is chosen for offline compilation of static kernels. This might result in running out of heap memory with certain driver. Please consider offline compliation for ONE device only." )
  38. #endif( )
  39.  
  40. #if( NOT OPENCL_OFFLINE_BUILD_HAWAII_KERNEL )
  41. #use dynamic generated kernels
  42. # MESSAGE(STATUS "Build dynamic Hawaii kernels.")
  43. # MESSAGE(STATUS "Check OPENCL_OFFLINE_BUILD_HAWAII_KERNEL to build kernls at compile-time. This will eliminates clBuildProgram() overhead and better kernel performance with certain driver.")
  44. add_definitions(-DCLBLAS_HAWAII_DYNAMIC_KERNEL)
  45. #else()
  46. # MESSAGE(STATUS "Build static Hawaii kernels.")
  47. # MESSAGE(STATUS "Uncheck OPENCL_OFFLINE_BUILD_HAWAII_KERNEL to build kernls at run-time")
  48. # MESSAGE(STATUS "Please ensure the presence of Hawaii device in the system. With certain driver/compiler flags, this might result in compile-time error.")
  49. #endif( )
  50.  
  51. #if( NOT OPENCL_OFFLINE_BUILD_BONAIRE_KERNEL )
  52. #use dynamic generated kernels
  53. # MESSAGE(STATUS "Build dynamic Bonaire kernels.")
  54. # MESSAGE(STATUS "Check OPENCL_OFFLINE_BUILD_BONAIRE_KERNEL to build kernls at compile-time. This will eliminates clBuildProgram() overhead and better kernel performance with certain driver.")
  55. add_definitions(-DCLBLAS_BONAIRE_DYNAMIC_KERNEL)
  56. #else()
  57. # MESSAGE(STATUS "Build static Bonaire kernels.")
  58. # MESSAGE(STATUS "Uncheck OPENCL_OFFLINE_BUILD_BONAIRE_KERNEL to build kernls at run-time")
  59. # MESSAGE(STATUS "Please ensure the presence of Bonaire device in the system. With certain driver/compiler flags, this might result in compile-time error.")
  60. #endif( )
  61.  
  62. #if( NOT OPENCL_OFFLINE_BUILD_TAHITI_KERNEL )
  63. #use dynamic generated kernels
  64. # MESSAGE(STATUS "Build dynamic Tahiti kernels.")
  65. # MESSAGE(STATUS "Check OPENCL_OFFLINE_BUILD_TAHITI_KERNEL to build kernls at compile-time. This will eliminates clBuildProgram() overhead and better kernel performance with certain driver.")
  66. add_definitions(-DCLBLAS_TAHITI_DYNAMIC_KERNEL)
  67. #else( )
  68. # MESSAGE(STATUS "Build static Tahiti kernels.")
  69. # MESSAGE(STATUS "Uncheck OPENCL_OFFLINE_BUILD_TAHITI_KERNEL to build kernls at run-time")
  70. # MESSAGE(STATUS "Please ensure the presence of Tahiti device in the system. With certain driver/compiler flags, this might result in compile-time error.")
  71. #endif( )
  72.  
  73.  
  74. # Ask the user to verify compiler version. If OpenCL 2.0 is supported. Certain public flags can be user
  75. set( OPENCL_VERSION "1.2" CACHE STRING "The version of OpenCL supported by your driver/device" )
  76. set_property( CACHE OPENCL_VERSION PROPERTY STRINGS 2.0 1.2 1.1 )
  77. message( STATUS "You have confirmed OpenCL ${OPENCL_VERSION} is supported in your system" )
  78.  
  79. # By default test-correctness is linked and tested against ACML library.
  80. # However, test-correctness can instead use NETLIB as a reference library
  81. # On Mac OSX systems, this must be set to OFF for the build to succeed (due to nesting of FindBLAS code)
  82. if ( APPLE )
  83. set(CORR_TEST_WITH_ACML OFF CACHE BOOL "Use ACML library in correctness tests")
  84. else ( )
  85. message(STATUS "CORR_TEST_WITH_ACML set to ON")
  86. set(CORR_TEST_WITH_ACML ON CACHE BOOL "Use ACML library in correctness tests")
  87. endif( )
  88.  
  89. if( CMAKE_GENERATOR MATCHES "NMake" )
  90. option( NMAKE_COMPILE_VERBOSE "Print compile and link strings to the console" OFF )
  91. if( NMAKE_COMPILE_VERBOSE )
  92. set( CMAKE_START_TEMP_FILE "" )
  93. set( CMAKE_END_TEMP_FILE "" )
  94. set( CMAKE_VERBOSE_MAKEFILE 1 )
  95. endif( )
  96. endif( )
  97.  
  98. # If we are on linux, and we wish to link with the netlib BLAS implementation, we need to have a valid fortran compiler
  99. if( NOT CORR_TEST_WITH_ACML AND NOT WIN32 AND NOT APPLE )
  100. project(clBLAS Fortran C CXX )
  101. else( )
  102. project(clBLAS C CXX)
  103. endif( )
  104.  
  105. # Define a version for the code
  106. if( NOT DEFINED clBLAS_VERSION_MAJOR )
  107. set( clBLAS_VERSION_MAJOR 2 )
  108. endif( )
  109.  
  110. if( NOT DEFINED clBLAS_VERSION_MINOR )
  111. set( clBLAS_VERSION_MINOR 8 )
  112. endif( )
  113.  
  114. if( NOT DEFINED clBLAS_VERSION_PATCH )
  115. set( clBLAS_VERSION_PATCH 0 )
  116. endif( )
  117.  
  118. set( clBLAS_VERSION "${clBLAS_VERSION_MAJOR}.${clBLAS_VERSION_MINOR}.${clBLAS_VERSION_PATCH}")
  119.  
  120. # Increment this if we break backward compatibility.
  121. set( clBLAS_SOVERSION 2 )
  122.  
  123. # We have custom written Find* modules now in the root source directory
  124. set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR} )
  125.  
  126. # On windows, it's convenient to change the default install prefix such that it does NOT point to 'program files' (permissions problems)
  127. # Need to check out CMAKE_RUNTIME_OUTPUT_DIRECTORY variable, and see if that eliminates the need to modify install path
  128. if( WIN32 AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT )
  129. set( CMAKE_INSTALL_PREFIX "${PROJECT_BINARY_DIR}/package" CACHE PATH "Install path prefix, prepended onto install directories" FORCE )
  130. endif( )
  131.  
  132. if(NOT CMAKE_BUILD_TYPE)
  133. set(CMAKE_BUILD_TYPE Debug CACHE STRING
  134. "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
  135. FORCE)
  136. endif()
  137.  
  138. # These variables are meant to contain string which should be appended to the installation paths
  139. # of library and executable binaries, respectively. They are meant to be user configurable/overridable.
  140. set( SUFFIX_LIB_DEFAULT "" )
  141. set( SUFFIX_BIN_DEFAULT "" )
  142.  
  143. if(TARGET_PLATFORM EQUAL 32 OR TARGET_PLATFORM EQUAL 64)
  144. set(TARGET_PLATFORM ${TARGET_PLATFORM} CACHE STRING "Target platform type (32-bit or 64-bit)" FORCE)
  145. else()
  146. if(CMAKE_SIZEOF_VOID_P MATCHES 8)
  147. set(TARGET_PLATFORM "64" CACHE STRING "Target platform type (32-bit or 64-bit)" FORCE)
  148. else()
  149. set(TARGET_PLATFORM "32" CACHE STRING "Target platform type (32-bit or 64-bit)" FORCE)
  150. endif()
  151. endif()
  152.  
  153. message(STATUS "Target platform: ${TARGET_PLATFORM}-bit")
  154. if(TARGET_PLATFORM EQUAL 32)
  155. set(_arch "x86" INTERNAL)
  156. set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS FALSE)
  157. else()
  158. set(_arch "x86_64" INTERNAL)
  159. set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS TRUE)
  160. if( NOT APPLE )
  161. set( SUFFIX_LIB_DEFAULT "64" )
  162. endif( )
  163. endif()
  164.  
  165. set( SUFFIX_LIB ${SUFFIX_LIB_DEFAULT} CACHE STRING "String to append to 'lib' install path" )
  166. set( SUFFIX_BIN ${SUFFIX_BIN_DEFAULT} CACHE STRING "String to append to 'bin' install path" )
  167.  
  168. if( MSVC_IDE )
  169. set_property( GLOBAL PROPERTY USE_FOLDERS TRUE )
  170. endif( )
  171.  
  172. # add the math library for Linux
  173. if( UNIX )
  174. set(MATH_LIBRARY "m")
  175. endif()
  176.  
  177. # set the path to specific OpenCL compiler
  178. set( OPENCL_COMPILER_DIR "OPENCL COMPILER PATH" CACHE PATH "OPENCL COMPILER PATH")
  179. if ( ${OPENCL_COMPILER_DIR} STREQUAL "OPENCL COMPILER PATH")
  180. message( STATUS "Using default OpenCL Compiler")
  181. set(ENV_PATH "$ENV{PATH}")
  182. else ()
  183. message( STATUS "OPENCL COMPILER: ${OPENCL_COMPILER_DIR}")
  184. if(UNIX)
  185. set(ENV_PATH "${OPENCL_COMPILER_DIR}")
  186. else()
  187. set(ENV_PATH "${OPENCL_COMPILER_DIR}")
  188. endif()
  189. endif()
  190.  
  191. # Find the BLAS library
  192. # TODO: maybe this could be written using the FindBLAS module in the future
  193. if( BUILD_TEST )
  194. if(NOT CORR_TEST_WITH_ACML)
  195. if(APPLE)
  196. find_library(BLAS_LIBRARIES Accelerate HINTS /System/Library/Frameworks/Accelerate.framework)
  197. MARK_AS_ADVANCED(BLAS_LIBRARIES)
  198. message(STATUS "Using Accelerate framework on Mac OS-X")
  199. else()
  200. find_package( Netlib COMPONENTS BLAS REQUIRED )
  201. endif()
  202. else( )
  203. # Find ACML BLAS implementation
  204. # platform dependent ACML subdirectory
  205. if (WIN32)
  206. set(ACML_SUBDIR ifort${TARGET_PLATFORM}_mp)
  207. else()
  208. set(ACML_SUBDIR gfortran${TARGET_PLATFORM}_mp)
  209. endif()
  210.  
  211. find_path(ACML_INCLUDE_DIRS acml.h
  212. HINTS
  213. ${ACML_ROOT}/include
  214. ${ACML_ROOT}/${ACML_SUBDIR}/include
  215. $ENV{ACML_ROOT}/include
  216. $ENV{ACML_ROOT}/${ACML_SUBDIR}/include
  217. )
  218.  
  219. if( ACML_INCLUDE_DIRS )
  220. else()
  221. message(WARNING "Cannot find acml.h")
  222. endif()
  223.  
  224. if( UNIX )
  225. find_library(ACML_LIBRARIES acml_mp
  226. HINTS
  227. ${ACML_ROOT}/lib
  228. ${ACML_ROOT}/${ACML_SUBDIR}/lib
  229. $ENV{ACML_ROOT}/lib
  230. $ENV{ACML_ROOT}/${ACML_SUBDIR}/lib
  231. )
  232. find_library(_acml_mv_library acml_mv
  233. HINTS
  234. ${ACML_ROOT}/lib
  235. ${ACML_ROOT}/${ACML_SUBDIR}/lib
  236. $ENV{ACML_ROOT}/lib
  237. $ENV{ACML_ROOT}/${ACML_SUBDIR}/lib
  238. )
  239. mark_as_advanced(_acml_mv_library)
  240. endif( )
  241.  
  242. if(WIN32)
  243. find_library(ACML_LIBRARIES libacml_mp_dll
  244. HINTS
  245. ${ACML_ROOT}/lib
  246. ${ACML_ROOT}/${ACML_SUBDIR}/lib
  247. $ENV{ACML_ROOT}/lib
  248. $ENV{ACML_ROOT}/${ACML_SUBDIR}/lib
  249. )
  250. endif( )
  251.  
  252. if( NOT ACML_LIBRARIES )
  253. message(WARNING "Cannot find libacml")
  254. endif( )
  255.  
  256. if(ACML_INCLUDE_DIRS AND ACML_LIBRARIES)
  257. if(_acml_mv_library)
  258. list(APPEND ACML_LIBRARIES ${_acml_mv_library})
  259. endif()
  260. message(STATUS "Found ACML: ${ACML_LIBRARIES}")
  261. set(ACML_FOUND TRUE BOOL "Found the ACML package")
  262. endif()
  263. mark_as_advanced(ACML_FOUND ACML_INCLUDE_DIRS ACML_LIBRARIES)
  264.  
  265. endif( )
  266. endif( )
  267.  
  268. # This will define OPENCL_FOUND
  269. find_package( OpenCL )
  270.  
  271. # Find Boost on the system, and configure the type of boost build we want
  272. set( Boost_USE_MULTITHREADED ON )
  273. set( Boost_USE_STATIC_LIBS ON )
  274. set( Boost_DETAILED_FAILURE_MSG ON )
  275. set( Boost_DEBUG ON )
  276. set( Boost_ADDITIONAL_VERSIONS "1.44.0" "1.44" "1.47.0" "1.47" )
  277.  
  278. find_package( Boost 1.33.0 COMPONENTS program_options )
  279. message(STATUS "Boost_PROGRAM_OPTIONS_LIBRARY: ${Boost_PROGRAM_OPTIONS_LIBRARY}")
  280.  
  281.  
  282. if( NOT Boost_FOUND )
  283. message( STATUS "The clBLAS ktest requires boost to be installed" )
  284. set( BUILD_KTEST OFF )
  285. message( STATUS "The clBLAS client requires boost to be installed" )
  286. set( BUILD_CLIENT OFF )
  287. endif()
  288.  
  289. # Turn on maximum compiler verbosity
  290. if(CMAKE_COMPILER_IS_GNUCXX)
  291. add_definitions(-pedantic -Wall -Wextra
  292. -D_POSIX_C_SOURCE=199309L -D_XOPEN_SOURCE=500
  293. )
  294. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wstrict-prototypes" CACHE STRING
  295. "Default CFLAGS" FORCE)
  296. # Don't use -rpath.
  297. set(CMAKE_SKIP_RPATH ON CACHE BOOL "Skip RPATH" FORCE)
  298.  
  299. set(CMAKE_C_FLAGS "-m${TARGET_PLATFORM} ${CMAKE_C_FLAGS}")
  300. set(CMAKE_CXX_FLAGS "-m${TARGET_PLATFORM} ${CMAKE_CXX_FLAGS}")
  301. set(CMAKE_Fortran_FLAGS "-m${TARGET_PLATFORM} ${CMAKE_Fortran_FLAGS}")
  302.  
  303. if(TARGET_PLATFORM EQUAL 32)
  304. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-builtin")
  305. endif()
  306. elseif( MSVC )
  307. # CMake sets huge stack frames for windows, for whatever reason. We go with compiler default.
  308. string( REGEX REPLACE "/STACK:[0-9]+" "" CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}" )
  309. string( REGEX REPLACE "/STACK:[0-9]+" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}" )
  310. string( REGEX REPLACE "/STACK:[0-9]+" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}" )
  311. endif( )
  312.  
  313. if (WIN32)
  314. add_definitions(-D_CRT_SECURE_NO_WARNINGS)
  315. endif( )
  316.  
  317. #TODO: We should remove this pre-processor define for our 1.8 build; this means removing our deprecated image functions such as calls clCreateImage2D( )
  318. add_definitions( -DCL_USE_DEPRECATED_OPENCL_1_1_APIS )
  319.  
  320. configure_file( "${PROJECT_SOURCE_DIR}/clBLAS.version.h.in" "${PROJECT_BINARY_DIR}/include/clBLAS.version.h" )
  321.  
  322. # configure a header file to pass the CMake version settings to the source, and package the header files in the output archive
  323. install( FILES
  324. "clBLAS.h"
  325. "clAmdBlas.h"
  326. "clAmdBlas.version.h"
  327. "clBLAS-complex.h"
  328. "${PROJECT_BINARY_DIR}/include/clBLAS.version.h"
  329. DESTINATION
  330. "./include" )
  331.  
  332.  
  333. if( BUILD_CLIENT AND IS_DIRECTORY "${PROJECT_SOURCE_DIR}/client")
  334. add_subdirectory( client )
  335. endif( )
  336.  
  337. if( BUILD_PERFORMANCE AND IS_DIRECTORY "${PROJECT_SOURCE_DIR}/scripts/perf" )
  338. add_subdirectory( scripts/perf )
  339. endif( )
  340.  
  341. if( BUILD_RUNTIME AND IS_DIRECTORY "${PROJECT_SOURCE_DIR}/library" )
  342. # add_subdirectory( library/tools/bingen )
  343. add_subdirectory( library )
  344. add_subdirectory( library/tools/tune )
  345. if( BUILD_KTEST )
  346. add_subdirectory( library/tools/ktest )
  347. endif( )
  348. endif()
  349.  
  350. if( BUILD_SAMPLE AND IS_DIRECTORY "${PROJECT_SOURCE_DIR}/samples" )
  351. add_subdirectory( samples )
  352. endif( )
  353.  
  354. # The build server is not supposed to build or package any of the tests; build server script will define this on the command line with
  355. # cmake -G "Visual Studio 10 Win64" -D BUILDSERVER:BOOL=ON ../..
  356. if( BUILD_TEST )
  357. if( IS_DIRECTORY "${PROJECT_SOURCE_DIR}/tests" )
  358. add_subdirectory(tests)
  359. endif( )
  360.  
  361. # These tests #include <getopts.h>, which is not windows compliant
  362. if (NOT WIN32 AND IS_DIRECTORY "${PROJECT_SOURCE_DIR}/library" )
  363. add_subdirectory( library/blas/gens/tests )
  364. add_subdirectory( library/blas/gens/legacy/tests )
  365. add_subdirectory( library/common/tests )
  366. endif( )
  367. endif( )
  368.  
  369. if(WIN32)
  370. set(destdir CMake)
  371. else()
  372. set(destdir lib${SUFFIX_LIB}/cmake/clBLAS)
  373. endif()
  374. string(REGEX REPLACE "[^/]+" ".." reldir "${destdir}")
  375. configure_file(
  376. ${CMAKE_CURRENT_SOURCE_DIR}/clBLASConfigVersion.cmake.in
  377. ${CMAKE_CURRENT_BINARY_DIR}/clBLASConfigVersion.cmake
  378. @ONLY)
  379. configure_file(
  380. ${CMAKE_CURRENT_SOURCE_DIR}/clBLASConfig.cmake.in
  381. ${CMAKE_CURRENT_BINARY_DIR}/clBLASConfig.cmake
  382. @ONLY)
  383. install(EXPORT Library DESTINATION ${destdir} FILE clBLASTargets.cmake)
  384. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/clBLASConfigVersion.cmake
  385. ${CMAKE_CURRENT_BINARY_DIR}/clBLASConfig.cmake
  386. DESTINATION ${destdir})
  387.  
  388.  
  389. # The following code is setting variables to control the behavior of CPack to generate our
  390. if( WIN32 )
  391. set( CPACK_SOURCE_GENERATOR "ZIP" )
  392. set( CPACK_GENERATOR "ZIP" )
  393. else( )
  394. set( CPACK_SOURCE_GENERATOR "TGZ" )
  395. set( CPACK_GENERATOR "TGZ" )
  396. endif( )
  397.  
  398. if( TARGET_PLATFORM EQUAL 64 )
  399. set( CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${clBLAS_VERSION}-${CMAKE_HOST_SYSTEM_NAME}-x64")
  400. else( )
  401. set( CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${clBLAS_VERSION}-${CMAKE_HOST_SYSTEM_NAME}-x32")
  402. endif( )
  403.  
  404. set( CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${clBLAS_VERSION}-${CMAKE_HOST_SYSTEM_NAME}-Source")
  405.  
  406. set( CPACK_PACKAGE_VERSION_MAJOR ${clBLAS_VERSION_MAJOR} )
  407. set( CPACK_PACKAGE_VERSION_MINOR ${clBLAS_VERSION_MINOR} )
  408. set( CPACK_PACKAGE_VERSION_PATCH ${clBLAS_VERSION_PATCH} )
  409. set( CPACK_PACKAGE_DESCRIPTION_SUMMARY "OpenCL implementation of a BLAS library")
  410. set( CPACK_PACKAGE_VENDOR "Neutral")
  411. set( CPACK_SOURCE_IGNORE_FILES "/\\\\.hg/;/\\\\.svn/;/\\\\.git/" )
  412.  
  413. # Define all variables that influence CPack before including CPack, such as install targets
  414. include( CPack )
Add Comment
Please, Sign In to add comment