Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions .github/workflows/docs_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
name: Documentation
runs-on: ubuntu-18.04
env:
DOXYGEN_VER: 1.8.18
DOXYGEN_VER: 1.8.18
steps:
- name: Checkout Repository
uses: actions/checkout@master
Expand All @@ -36,8 +36,7 @@ jobs:
cmake -DAF_BUILD_CPU:BOOL=OFF -DAF_BUILD_CUDA:BOOL=OFF \
-DAF_BUILD_OPENCL:BOOL=OFF -DAF_BUILD_UNIFIED:BOOL=OFF \
-DAF_BUILD_EXAMPLES:BOOL=OFF -DBUILD_TESTING:BOOL=OFF \
-DDOXYGEN_EXECUTABLE:FILEPATH=${GITHUB_WORKSPACE}/doxygen/bin/doxygen \
..
-DDOXYGEN_EXECUTABLE:FILEPATH=${GITHUB_WORKSPACE}/doxygen/bin/doxygen ..

- name: Build
run: |
Expand Down
15 changes: 6 additions & 9 deletions .github/workflows/unix_cpu_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,8 @@ jobs:
fail-fast: false
matrix:
blas_backend: [Atlas, MKL, OpenBLAS]
os: [ubuntu-16.04, ubuntu-18.04, macos-latest]
os: [ubuntu-18.04, ubuntu-20.04, macos-latest]
exclude:
- os: ubuntu-16.04
blas_backend: Atlas
- os: macos-latest
blas_backend: Atlas
- os: macos-latest
Expand Down Expand Up @@ -64,7 +62,7 @@ jobs:
echo "CMAKE_PROGRAM=cmake" >> $GITHUB_ENV

- name: Install Common Dependencies for Ubuntu
if: matrix.os == 'ubuntu-16.04' || matrix.os == 'ubuntu-18.04'
if: matrix.os == 'ubuntu-20.04' || matrix.os == 'ubuntu-18.04'
run: |
sudo add-apt-repository ppa:mhier/libboost-latest
sudo apt-get -qq update
Expand All @@ -75,11 +73,11 @@ jobs:
liblapacke-dev

- name: Install Atlas for Ubuntu
if: matrix.os == 'ubuntu-18.04' && matrix.blas_backend == 'Atlas'
if: matrix.os != 'macos-latest' && matrix.blas_backend == 'Atlas'
run: sudo apt-get install -y libatlas-base-dev

- name: Install MKL for Ubuntu
if: (matrix.os == 'ubuntu-16.04' || matrix.os == 'ubuntu-18.04') && matrix.blas_backend == 'MKL'
if: matrix.os != 'macos-latest' && matrix.blas_backend == 'MKL'
run: |
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB
sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB
Expand All @@ -88,7 +86,7 @@ jobs:
sudo apt-get install -y intel-mkl-64bit-2020.0-088

- name: Install OpenBLAS for Ubuntu
if: (matrix.os == 'ubuntu-16.04' || matrix.os == 'ubuntu-18.04') && matrix.blas_backend == 'OpenBLAS'
if: matrix.os != 'macos-latest' && matrix.blas_backend == 'OpenBLAS'
run: sudo apt-get install -y libopenblas-dev

- name: CMake Configure
Expand All @@ -109,8 +107,7 @@ jobs:
-DAF_BUILD_UNIFIED:BOOL=OFF -DAF_BUILD_EXAMPLES:BOOL=ON \
-DAF_BUILD_FORGE:BOOL=ON \
-DUSE_CPU_MKL:BOOL=$USE_MKL \
-DBUILDNAME:STRING=${buildname} \
..
-DBUILDNAME:STRING=${buildname} ..
echo "CTEST_DASHBOARD=${dashboard}" >> $GITHUB_ENV

- name: Build and Test
Expand Down
50 changes: 19 additions & 31 deletions .github/workflows/win_cpu_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,60 +10,48 @@ name: ci

jobs:
window_build_cpu:
name: CPU (OpenBLAS, windows-latest)
name: CPU (fftw, OpenBLAS, windows-latest)
runs-on: windows-latest
env:
VCPKG_HASH: 0cbc579e1ee21fa4ad0974a9ed926f60c6ed1a4a # FEB 25, 2021 - [rsasynccpp] Add new port (Rstein.AsyncCpp) (#16380)
NINJA_VER: 1.10.2
VCPKG_HASH: 5568f110b509a9fd90711978a7cb76bae75bb092 # vcpkg release tag 2021.05.12 with Forge v1.0.7 update
steps:
- name: Checkout Repository
uses: actions/checkout@master

- name: VCPKG Cache
uses: actions/cache@v1
id: vcpkg-cache
- name: VCPKG Binary Cache
uses: actions/cache@v2
id: vcpkg-bin-cache
with:
path: vcpkg
key: vcpkg-deps-${{ env.VCPKG_HASH }}

- name: Install VCPKG Common Deps
if: steps.vcpkg-cache.outputs.cache-hit != 'true'
run: |
git clone --recursive https://github.com/microsoft/vcpkg
Set-Location -Path .\vcpkg
git reset --hard $env:VCPKG_HASH
.\bootstrap-vcpkg.bat
.\vcpkg.exe install --triplet x64-windows boost fftw3 freeimage freetype glfw3 openblas
Remove-Item .\downloads,.\buildtrees,.\packages -Recurse -Force

- name: Download Ninja
run: |
Invoke-WebRequest -Uri "https://github.com/ninja-build/ninja/releases/download/v$env:NINJA_VER/ninja-win.zip" -OutFile ninja.zip
Expand-Archive -Path ninja.zip -DestinationPath .
path: vcpkg_cache
key: vcpkg_bin_cache_${{ env.VCPKG_HASH }} # vcpkg manifest baseline

- name: CMake Configure
run: |
$cwd = (Get-Item -Path ".\").FullName
Set-Location -Path ${env:VCPKG_INSTALLATION_ROOT}
git pull
.\bootstrap-vcpkg.bat
.\vcpkg.exe install --triplet x64-windows boost-compute boost-functional boost-stacktrace fftw3 forge freeimage freetype glfw3 openblas
Set-Location -Path $cwd
$ref = $env:GITHUB_REF | %{ if ($_ -match "refs/pull/[0-9]+/merge") { $_;} }
$prnum = $ref | %{$_.Split("/")[2]}
$branch = git branch --show-current
$buildname = if($prnum -eq $null) { $branch } else { "PR-$prnum" }
$dashboard = if($prnum -eq $null) { "Continuous" } else { "Experimental" }
$buildname = "$buildname-cpu-openblas"
mkdir build && cd build
New-Item -Path "${cwd}/vcpkg_cache" -ItemType "directory" -Force
$env:VCPKG_DEFAULT_BINARY_CACHE="${cwd}/vcpkg_cache"
cmake .. -G "Visual Studio 16 2019" -A x64 `
-DCMAKE_TOOLCHAIN_FILE:FILEPATH="$env:GITHUB_WORKSPACE\vcpkg\scripts\buildsystems\vcpkg.cmake" `
-DFFTW_INCLUDE_DIR:PATH="$env:GITHUB_WORKSPACE\vcpkg\installed/x64-windows\include" `
-DFFTW_LIBRARY:FILEPATH="$env:GITHUB_WORKSPACE\vcpkg\installed\x64-windows\lib\fftw3.lib" `
-DFFTWF_LIBRARY:FILEPATH="$env:GITHUB_WORKSPACE\vcpkg\installed\x64-windows\lib\fftw3f.lib" `
-DAF_BUILD_CUDA:BOOL=OFF -DAF_BUILD_OPENCL:BOOL=OFF `
-DAF_BUILD_UNIFIED:BOOL=OFF -DAF_BUILD_FORGE:BOOL=ON `
-DBUILDNAME:STRING="$buildname"
-DBUILDNAME:STRING="$buildname" `
-DVCPKG_ROOT:PATH="${env:VCPKG_INSTALLATION_ROOT}" `
-DVCPKG_MANIFEST_MODE:BOOL=OFF
echo "CTEST_DASHBOARD=${dashboard}" >> $env:GITHUB_ENV

- name: Build and Test
run: |
$cwd = (Get-Item -Path ".\").FullName
$Env:PATH += ";$cwd/vcpkg/installed/x64-windows/bin"
Set-Location -Path $cwd/build
Set-Location -Path .\build
$Env:PATH += ";${env:VCPKG_INSTALLATION_ROOT}/installed/x64-windows/bin"
ctest -D Experimental --track ${CTEST_DASHBOARD} -T Test -T Submit -C Release -R cpu -E pinverse -j2
54 changes: 46 additions & 8 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

cmake_minimum_required(VERSION 3.5)

include(CMakeModules/AF_vcpkg_options.cmake)

project(ArrayFire VERSION 3.9.0 LANGUAGES C CXX)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
Expand Down Expand Up @@ -44,6 +46,7 @@ find_package(CUDA 9.0)
find_package(cuDNN 4.0)
find_package(OpenCL 1.2)
find_package(OpenGL)
find_package(glad CONFIG QUIET)
find_package(FreeImage)
find_package(Threads)
find_package(FFTW)
Expand Down Expand Up @@ -127,6 +130,9 @@ mark_as_advanced(
Backtrace_LIBRARY
AF_WITH_STATIC_MKL
GIT
Forge_DIR
glad_DIR
FG_BUILD_OFFLINE
)
mark_as_advanced(CLEAR CUDA_VERSION)

Expand All @@ -140,12 +146,25 @@ FetchContent_Declare(
GIT_TAG v1.0.0
)
af_dep_check_and_populate(${spdlog_prefix})
FetchContent_Declare(
${glad_prefix}
GIT_REPOSITORY https://github.com/arrayfire/glad.git
GIT_TAG master
)
af_dep_check_and_populate(${glad_prefix})


if(NOT TARGET glad::glad)
FetchContent_Declare(
${glad_prefix}
GIT_REPOSITORY https://github.com/arrayfire/glad.git
GIT_TAG main
)
af_dep_check_and_populate(${glad_prefix})
add_subdirectory(${${glad_prefix}_SOURCE_DIR} ${${glad_prefix}_BINARY_DIR})

add_library(af_glad STATIC $<TARGET_OBJECTS:af_glad_obj_lib>)
target_link_libraries(af_glad PUBLIC ${CMAKE_DL_LIBS})
target_include_directories(af_glad
PUBLIC
$<BUILD_INTERFACE:$<TARGET_PROPERTY:af_glad_obj_lib,INTERFACE_INCLUDE_DIRECTORIES>>
)
endif()

FetchContent_Declare(
${assets_prefix}
GIT_REPOSITORY https://github.com/arrayfire/assets.git
Expand Down Expand Up @@ -202,8 +221,6 @@ if(NOT LAPACK_FOUND)
endif()
endif()

add_subdirectory(${${glad_prefix}_SOURCE_DIR} ${${glad_prefix}_BINARY_DIR})

add_subdirectory(src/backend/common)
add_subdirectory(src/api/c)
add_subdirectory(src/api/cpp)
Expand Down Expand Up @@ -437,3 +454,24 @@ conditional_directory(AF_BUILD_EXAMPLES examples)
conditional_directory(AF_BUILD_DOCS docs)

include(CPackConfig)

# VCPKG variables that aren't necessarily important
# for ArrayFire Development. They are marked hidden.
# If VCPKG is not used, marking them is not harmful
mark_as_advanced(
VCPKG_APPLOCAL_DEPS
VCPKG_BOOTSTRAP_OPTIONS
VCPKG_INSTALL_OPTIONS
VCPKG_MANIFEST_DIR
VCPKG_MANIFEST_INSTALL
VCPKG_MANIFEST_MODE
VCPKG_OVERLAY_PORTS
VCPKG_OVERLAY_TRIPLETS
VCPKG_TARGET_TRIPLET
X_VCPKG_APPLOCAL_DEPS_INSTALL
X_VCPKG_APPLOCAL_DEPS_SERIALIZED
Z_VCPKG_BUILTIN_POWERSHELL_PATH
Z_VCPKG_PWSH_PATH
Z_VCPKG_CL
_VCPKG_INSTALLED_DIR
)
22 changes: 22 additions & 0 deletions CMakeModules/AF_vcpkg_options.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Copyright (c) 2021, ArrayFire
# All rights reserved.
#
# This file is distributed under 3-clause BSD license.
# The complete license agreement can be obtained at:
# http://arrayfire.com/licenses/BSD-3-Clause

set(ENV{VCPKG_FEATURE_FLAGS} "versions")
set(ENV{VCPKG_KEEP_ENV_VARS} "MKLROOT")

if(AF_BUILD_CUDA)
list(APPEND VCPKG_MANIFEST_FEATURES "cuda")
endif()
if(AF_BUILD_OPENCL)
list(APPEND VCPKG_MANIFEST_FEATURES "opencl")
endif()

if(DEFINED VCPKG_ROOT AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "")
elseif(DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "")
endif()
112 changes: 66 additions & 46 deletions CMakeModules/AFconfigure_forge_dep.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -7,55 +7,75 @@

set(FG_VERSION_MAJOR 1)
set(FG_VERSION_MINOR 0)
set(FG_VERSION_PATCH 5)
set(FG_VERSION "${FG_VERSION_MAJOR}.${FG_VERSION_MINOR}.${FG_VERSION_PATCH}")
set(FG_API_VERSION_CURRENT ${FG_VERSION_MAJOR}${FG_VERSION_MINOR})
set(FG_VERSION_PATCH 7)

FetchContent_Declare(
${forge_prefix}
GIT_REPOSITORY https://github.com/arrayfire/forge.git
GIT_TAG "v${FG_VERSION}"
find_package(Forge
${FG_VERSION_MAJOR}.${FG_VERSION_MINOR}.${FG_VERSION_PATCH}
QUIET
)
af_dep_check_and_populate(${forge_prefix})

if(AF_BUILD_FORGE)
set(ArrayFireInstallPrefix ${CMAKE_INSTALL_PREFIX})
set(ArrayFireBuildType ${CMAKE_BUILD_TYPE})
set(CMAKE_INSTALL_PREFIX ${${forge_prefix}_BINARY_DIR}/extern/forge/package)
set(CMAKE_BUILD_TYPE Release)
set(FG_BUILD_EXAMPLES OFF CACHE BOOL "Used to build Forge examples")
set(FG_BUILD_DOCS OFF CACHE BOOL "Used to build Forge documentation")
set(FG_WITH_FREEIMAGE OFF CACHE BOOL "Turn on usage of freeimage dependency")
if(TARGET Forge::forge)
get_target_property(fg_lib_type Forge::forge TYPE)
if(NOT ${fg_lib_type} STREQUAL "STATIC_LIBRARY")
install(FILES
$<TARGET_FILE:Forge::forge>
$<$<PLATFORM_ID:Linux>:$<TARGET_SONAME_FILE:Forge::forge>>
$<$<PLATFORM_ID:Darwin>:$<TARGET_SONAME_FILE:Forge::forge>>
$<$<PLATFORM_ID:Linux>:$<TARGET_LINKER_FILE:Forge::forge>>
$<$<PLATFORM_ID:Darwin>:$<TARGET_LINKER_FILE:Forge::forge>>
DESTINATION "${AF_INSTALL_LIB_DIR}"
COMPONENT common_backend_dependencies)
endif()
else()
set(FG_VERSION "${FG_VERSION_MAJOR}.${FG_VERSION_MINOR}.${FG_VERSION_PATCH}")
set(FG_API_VERSION_CURRENT ${FG_VERSION_MAJOR}${FG_VERSION_MINOR})

add_subdirectory(${${forge_prefix}_SOURCE_DIR} ${${forge_prefix}_BINARY_DIR} EXCLUDE_FROM_ALL)
FetchContent_Declare(
${forge_prefix}
GIT_REPOSITORY https://github.com/arrayfire/forge.git
GIT_TAG "v${FG_VERSION}"
)
af_dep_check_and_populate(${forge_prefix})

mark_as_advanced(
FG_BUILD_EXAMPLES
FG_BUILD_DOCS
FG_WITH_FREEIMAGE
FG_USE_WINDOW_TOOLKIT
FG_USE_SYSTEM_CL2HPP
FG_ENABLE_HUNTER
FG_RENDERING_BACKEND
SPHINX_EXECUTABLE
glfw3_DIR
glm_DIR
)
set(CMAKE_BUILD_TYPE ${ArrayFireBuildType})
set(CMAKE_INSTALL_PREFIX ${ArrayFireInstallPrefix})
if(AF_BUILD_FORGE)
set(ArrayFireInstallPrefix ${CMAKE_INSTALL_PREFIX})
set(ArrayFireBuildType ${CMAKE_BUILD_TYPE})
set(CMAKE_INSTALL_PREFIX ${${forge_prefix}_BINARY_DIR}/extern/forge/package)
set(CMAKE_BUILD_TYPE Release)
set(FG_BUILD_EXAMPLES OFF CACHE BOOL "Used to build Forge examples")
set(FG_BUILD_DOCS OFF CACHE BOOL "Used to build Forge documentation")
set(FG_WITH_FREEIMAGE OFF CACHE BOOL "Turn on usage of freeimage dependency")

add_subdirectory(
${${forge_prefix}_SOURCE_DIR} ${${forge_prefix}_BINARY_DIR} EXCLUDE_FROM_ALL)
mark_as_advanced(
FG_BUILD_EXAMPLES
FG_BUILD_DOCS
FG_WITH_FREEIMAGE
FG_USE_WINDOW_TOOLKIT
FG_USE_SYSTEM_CL2HPP
FG_ENABLE_HUNTER
FG_RENDERING_BACKEND
SPHINX_EXECUTABLE
glfw3_DIR
glm_DIR
)
set(CMAKE_BUILD_TYPE ${ArrayFireBuildType})
set(CMAKE_INSTALL_PREFIX ${ArrayFireInstallPrefix})

install(FILES
$<TARGET_FILE:forge>
$<$<PLATFORM_ID:Linux>:$<TARGET_SONAME_FILE:forge>>
$<$<PLATFORM_ID:Darwin>:$<TARGET_SONAME_FILE:forge>>
$<$<PLATFORM_ID:Linux>:$<TARGET_LINKER_FILE:forge>>
$<$<PLATFORM_ID:Darwin>:$<TARGET_LINKER_FILE:forge>>
DESTINATION "${AF_INSTALL_LIB_DIR}"
COMPONENT common_backend_dependencies)
set_property(TARGET forge APPEND_STRING PROPERTY COMPILE_FLAGS " -w")
else(AF_BUILD_FORGE)
configure_file(
${${forge_prefix}_SOURCE_DIR}/CMakeModules/version.h.in
${${forge_prefix}_BINARY_DIR}/include/fg/version.h
)
endif(AF_BUILD_FORGE)
install(FILES
$<TARGET_FILE:forge>
$<$<PLATFORM_ID:Linux>:$<TARGET_SONAME_FILE:forge>>
$<$<PLATFORM_ID:Darwin>:$<TARGET_SONAME_FILE:forge>>
$<$<PLATFORM_ID:Linux>:$<TARGET_LINKER_FILE:forge>>
$<$<PLATFORM_ID:Darwin>:$<TARGET_LINKER_FILE:forge>>
DESTINATION "${AF_INSTALL_LIB_DIR}"
COMPONENT common_backend_dependencies)
set_property(TARGET forge APPEND_STRING PROPERTY COMPILE_FLAGS " -w")
else(AF_BUILD_FORGE)
configure_file(
${${forge_prefix}_SOURCE_DIR}/CMakeModules/version.h.in
${${forge_prefix}_BINARY_DIR}/include/fg/version.h
)
endif(AF_BUILD_FORGE)
endif()
Loading