Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add CMake scripts for building dependencies
Add CMake scripts and helper functions to build this dependencies: - boost (ported from .bat script, version bump to 1.61), - LLVM, - OpenCL ICD Loader. Also added install_deps.cmake scripts that downloads all dependencies (including Qt) from GitHub release page.
- Loading branch information
Showing
10 changed files
with
200 additions
and
52 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,5 @@ | ||
/build | ||
/cache | ||
/install | ||
/package | ||
/packages |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
include("${CMAKE_CURRENT_LIST_DIR}/scripts/helpers.cmake") | ||
|
||
set(INSTALL_DIR "${ROOT_DIR}/install") | ||
set(SERVER "https://github.com/ethereum/cpp-dependencies/releases/download/vc140/") | ||
|
||
function(download_and_install PACKAGE_NAME) | ||
download_and_unpack("${SERVER}${PACKAGE_NAME}.tar.gz" ${INSTALL_DIR}) | ||
endfunction(download_and_install) | ||
|
||
|
||
download_and_install("boost-1.61") | ||
download_and_install("cryptopp-5.6.2") | ||
download_and_install("curl-7.4.2") | ||
download_and_install("json-rpc-cpp-0.5.0") | ||
download_and_install("jsoncpp-1.6.2") | ||
download_and_install("opencl-icd-loader-0.0") | ||
download_and_install("leveldb-1.2") | ||
download_and_install("llvm-3.8.0") | ||
download_and_install("microhttpd-0.9.2") | ||
download_and_install("miniupnpc-1.9") | ||
download_and_install("qt-5.6") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
include("${CMAKE_CURRENT_LIST_DIR}/helpers.cmake") | ||
|
||
prepare_package_source(boost 1.61 http://sourceforge.net/projects/boost/files/boost/1.61.0/boost_1_61_0.tar.gz) | ||
|
||
if (NOT EXISTS ${SOURCE_DIR}/b2.exe) | ||
execute_process(COMMAND bootstrap.bat WORKING_DIRECTORY ${SOURCE_DIR}) | ||
endif() | ||
|
||
execute_process(COMMAND ./b2 -j4 | ||
stage --stagedir=${INSTALL_DIR}/win64 --build-dir=${BUILD_DIR} | ||
link=static | ||
runtime-link=shared | ||
variant=release | ||
threading=multi | ||
address-model=64 | ||
--with-filesystem | ||
--with-system | ||
--with-thread | ||
--with-date_time | ||
--with-regex | ||
--with-test | ||
--with-program_options | ||
--with-random | ||
--with-atomic | ||
WORKING_DIRECTORY ${SOURCE_DIR}) | ||
|
||
message("Copying boost headers") | ||
file(COPY ${SOURCE_DIR}/boost DESTINATION ${INSTALL_DIR}/win64/include) | ||
|
||
create_package(${PACKAGE_NAME} ${INSTALL_DIR}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# This script downloads LLVM source and builds it with Visual Studio. | ||
|
||
include("${CMAKE_CURRENT_LIST_DIR}/helpers.cmake") | ||
|
||
function(build_llvm CONFIGURATION) | ||
if (CONFIGURATION STREQUAL "Release") | ||
set(ASSERTS OFF) | ||
set(CONFIG "Release") | ||
elseif (CONFIGURATION STREQUAL "Debug") | ||
set(ASSERTS ON) | ||
set(CONFIG "RelWithDebInfo") | ||
else() | ||
message(FATAL_ERROR "Wrong configuration") | ||
endif() | ||
set(INSTALL_DIR "${INSTALL_DIR}/win64/${CONFIGURATION}") | ||
|
||
execute_process(COMMAND cmake ${SOURCE_DIR} -G "Visual Studio 14 2015 Win64" | ||
-DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} | ||
-DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_BUILD_TOOLS=OFF | ||
-DLLVM_ENABLE_ASSERTIONS=${ASSERTS} | ||
WORKING_DIRECTORY ${BUILD_DIR}) | ||
|
||
execute_process(COMMAND cmake --build ${BUILD_DIR} | ||
--target install --config ${CONFIG}) | ||
endfunction(build_llvm) | ||
|
||
prepare_package_source(llvm 3.8.0 http://llvm.org/releases/3.8.0/llvm-3.8.0.src.tar.xz) | ||
|
||
build_llvm("Release") | ||
# build_llvm("Debug") | ||
|
||
create_package(${PACKAGE_NAME} ${INSTALL_DIR}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
# This scirpt builds universal OpenCL ICD Loader that searches for OpenCL | ||
# implementations at run-time. The package also includes OpenCL headers. | ||
|
||
include("${CMAKE_CURRENT_LIST_DIR}/helpers.cmake") | ||
|
||
prepare_package_source(opencl-icd-loader 0.0 https://github.com/KhronosGroup/OpenCL-ICD-Loader/archive/master/OpenCL-ICD-Loader.tar.gz) | ||
|
||
if (NOT EXISTS ${SOURCE_DIR}/inc/CL) | ||
download_and_unpack(https://github.com/KhronosGroup/OpenCL-Headers/archive/master/OpenCL-Headers.tar.gz ${SOURCE_DIR} STATUS) | ||
file(RENAME ${SOURCE_DIR}/OpenCL-Headers-master ${SOURCE_DIR}/inc/CL) | ||
endif() | ||
|
||
execute_process(COMMAND cmake ${SOURCE_DIR} -G "Visual Studio 14 2015 Win64" | ||
WORKING_DIRECTORY ${BUILD_DIR}) | ||
|
||
execute_process(COMMAND cmake --build ${BUILD_DIR} | ||
--target OpenCL --config Release) | ||
|
||
file(COPY ${BUILD_DIR}/Release/OpenCl.lib DESTINATION ${INSTALL_DIR}/win64/lib/) | ||
file(COPY ${BUILD_DIR}/bin/Release/OpenCl.dll DESTINATION ${INSTALL_DIR}/win64/bin/) | ||
file(COPY ${SOURCE_DIR}/inc/CL DESTINATION ${INSTALL_DIR}/win64/include/) | ||
|
||
create_package(${PACKAGE_NAME} ${INSTALL_DIR}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
get_filename_component(ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE) | ||
|
||
set(CACHE_DIR "${ROOT_DIR}/cache") | ||
set(PACKAGES_DIR "${ROOT_DIR}/packages") | ||
|
||
function(download URL DST_FILE STATUS) | ||
set(TMP_FILE "${DST_FILE}.part") | ||
|
||
get_filename_component(FILE_NAME ${DST_FILE} NAME) | ||
if (NOT EXISTS ${DST_FILE}) | ||
message("Downloading ${FILE_NAME}") | ||
file(DOWNLOAD ${URL} ${TMP_FILE} SHOW_PROGRESS STATUS DOWNLOAD_STATUS) | ||
list(GET DOWNLOAD_STATUS 0 STATUS_CODE) | ||
if (STATUS_CODE EQUAL 0) | ||
file(RENAME ${TMP_FILE} ${DST_FILE}) | ||
else() | ||
file(REMOVE ${TMP_FILE}) | ||
list(GET DOWNLOAD_STATUS 1 ERROR_MSG) | ||
|
||
message("ERROR! Downloading '${FILE_NAME}' failed.") | ||
message(STATUS "URL: ${URL}") | ||
message(STATUS "Error: ${STATUS_CODE} ${ERROR_MSG}") | ||
set(STATUS FALSE PARENT_SCOPE) | ||
return() | ||
endif() | ||
else() | ||
message("Using cached ${FILE_NAME}") | ||
endif() | ||
set(STATUS TRUE PARENT_SCOPE) | ||
endfunction(download) | ||
|
||
function(download_and_unpack PACKAGE_URL DST_DIR) | ||
get_filename_component(FILE_NAME ${PACKAGE_URL} NAME) | ||
|
||
set(DST_FILE "${CACHE_DIR}/${FILE_NAME}") | ||
set(TMP_FILE "${DST_FILE}.part") | ||
|
||
file(MAKE_DIRECTORY ${CACHE_DIR}) | ||
file(MAKE_DIRECTORY ${DST_DIR}) | ||
|
||
download(${PACKAGE_URL} ${DST_FILE} STATUS) | ||
|
||
if (STATUS) | ||
message("Unpacking ${FILE_NAME} to ${DST_DIR}") | ||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar -xf ${DST_FILE} | ||
WORKING_DIRECTORY ${DST_DIR}) | ||
endif() | ||
endfunction(download_and_unpack) | ||
|
||
# Packs installed package binaries and headers into an archive. | ||
function(create_package NAME DIR) | ||
message("Creating package ${NAME}") | ||
file(MAKE_DIRECTORY ${PACKAGES_DIR}) | ||
|
||
# To create an archive without addicional top level directory | ||
# (like package-X.Y.Z) we need to know all top level files/dirs. | ||
# Usually it is just "win64" dir. | ||
file(GLOB TOP_FILES RELATIVE ${DIR} "${DIR}/*") | ||
|
||
set(PACKAGE_FILE "${PACKAGES_DIR}/${NAME}.tar.gz") | ||
execute_process(COMMAND ${CMAKE_COMMAND} -E | ||
tar -czf ${PACKAGE_FILE} ${TOP_FILES} | ||
WORKING_DIRECTORY ${DIR}) | ||
endfunction(create_package) | ||
|
||
# Downloads the source code of the package and unpacks it to dedicated 'src' | ||
# dir. Also creates 'build' and 'install' dir to be used by a build script. | ||
function(prepare_package_source NAME VERSION URL) | ||
set(PACKAGE_NAME "${NAME}-${VERSION}") | ||
|
||
set(PACKAGE_DIR "${CACHE_DIR}/${PACKAGE_NAME}") | ||
set(SOURCE_DIR "${PACKAGE_DIR}/src") | ||
set(BUILD_DIR "${PACKAGE_DIR}/build") | ||
set(INSTALL_DIR "${PACKAGE_DIR}/install") | ||
|
||
if (NOT EXISTS ${SOURCE_DIR}) | ||
download_and_unpack(${URL} ${PACKAGE_DIR} STATUS) | ||
file(GLOB ORIG_SOURCE_DIR_NAME "${PACKAGE_DIR}/*") | ||
file(RENAME ${ORIG_SOURCE_DIR_NAME} ${SOURCE_DIR}) | ||
endif() | ||
|
||
file(MAKE_DIRECTORY ${BUILD_DIR}) | ||
file(MAKE_DIRECTORY ${INSTALL_DIR}) | ||
|
||
# Export names and dirs to be used by a package-specific build script. | ||
set(PACKAGE_NAME ${PACKAGE_NAME} PARENT_SCOPE) | ||
set(SOURCE_DIR ${SOURCE_DIR} PARENT_SCOPE) | ||
set(BUILD_DIR ${BUILD_DIR} PARENT_SCOPE) | ||
set(INSTALL_DIR ${INSTALL_DIR} PARENT_SCOPE) | ||
endfunction() |