diff --git a/.gitignore b/.gitignore
index 948b5962eb..d032d3d5dd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@ GPATH
include/af/version.h
src/backend/version.hpp
docs/details/examples.dox
+/TAGS
diff --git a/.gitmodules b/.gitmodules
index 395881a861..c91b7f1585 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -7,3 +7,6 @@
[submodule "test/gtest"]
path = test/gtest
url = https://chromium.googlesource.com/external/googletest
+[submodule "src/backend/cpu/threads"]
+ path = src/backend/cpu/threads
+ url = https://github.com/alltheflops/threads.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c79fbcaab0..0def888f6c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12)
PROJECT(ARRAYFIRE)
SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON)
@@ -9,7 +9,6 @@ INCLUDE(AFInstallDirs)
OPTION(BUILD_TEST "Build Tests" ON)
OPTION(BUILD_EXAMPLES "Build Examples" ON)
-OPTION(BUILD_GTEST "Download gtest and check for updates. Necessary if you change compilers" ON)
OPTION(BUILD_CPU "Build ArrayFire with a CPU backend" ON)
@@ -31,9 +30,6 @@ OPTION(BUILD_DOCS "Create ArrayFire Documentation" OFF)
OPTION(WITH_COVERAGE "Added code coverage flags" OFF)
OPTION(BUILD_NONFREE "Build ArrayFire nonfree algorithms" OFF)
-OPTION(BUILD_SIFT "Build ArrayFire nonfree algorithms" OFF)
-
-MARK_AS_ADVANCED(BUILD_SIFT)
OPTION(BUILD_UNIFIED "Build Backend-Independent ArrayFire API" ON)
@@ -91,17 +87,18 @@ IF(BUILD_GRAPHICS)
ENDIF(BUILD_GRAPHICS)
-IF(BUILD_NONFREE)
- MESSAGE(WARNING "Building With NONFREE ON requires the following patents")
- SET(BUILD_SIFT ON)
-ENDIF(BUILD_NONFREE)
+IF(${BUILD_NONFREE})
+ MESSAGE(WARNING "Building With NONFREE ON requires the following patents")
+ SET(BUILD_NONFREE_SIFT ON CACHE BOOL "Build ArrayFire with SIFT")
+ MARK_AS_ADVANCED(BUILD_NONFREE_SIFT)
+ELSE(${BUILD_NONFREE})
+ UNSET(BUILD_NONFREE_SIFT CACHE) # BUILD_NONFREE_SIFT cannot be built without BUILD_NONFREE
+ENDIF(${BUILD_NONFREE})
-IF(BUILD_SIFT)
- ADD_DEFINITIONS(-DAF_BUILD_SIFT)
+IF(${BUILD_NONFREE_SIFT})
+ ADD_DEFINITIONS(-DAF_BUILD_NONFREE_SIFT)
- IF (NOT BUILD_NONFREE)
- MESSAGE(WARNING "Building with SIFT requires the following patents")
- ENDIF()
+ MESSAGE(WARNING "Building with SIFT requires the following patents")
MESSAGE("Method and apparatus for identifying scale invariant features"
"in an image and use of same for locating an object in an image,\" David"
@@ -110,7 +107,7 @@ IF(BUILD_SIFT)
"further details, contact David Lowe (lowe@cs.ubc.ca) or the"
"University-Industry Liaison Office of the University of British"
"Columbia.")
-ENDIF(BUILD_SIFT)
+ENDIF(${BUILD_NONFREE_SIFT})
INCLUDE_DIRECTORIES(
"${CMAKE_CURRENT_SOURCE_DIR}/include"
@@ -154,6 +151,10 @@ ELSE(${UNIX}) #Windows
# http://www.kitware.com/blog/home/post/434
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /Gm-")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP /Gm-")
+
+ # Builds that contain debug info require /bigobj
+ SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /bigobj")
+ SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /bigobj")
ENDIF(MSVC)
ENDIF()
@@ -223,7 +224,7 @@ ENDIF(FORGE_FOUND AND NOT USE_SYSTEM_FORGE)
SET(INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
SET(BACKEND_DIR "src/backend/\${lowerbackend}")
CONFIGURE_FILE(
- ${CMAKE_CURRENT_SOURCE_DIR}/ArrayFireConfig.cmake.in
+ ${CMAKE_MODULE_PATH}/ArrayFireConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/ArrayFireConfig.cmake
@ONLY)
@@ -233,11 +234,11 @@ STRING(REGEX REPLACE "[^/]+" ".." reldir "${AF_INSTALL_CMAKE_DIR}")
SET(INCLUDE_DIR "\${CMAKE_CURRENT_LIST_DIR}/${reldir}/include")
set(BACKEND_DIR)
CONFIGURE_FILE(
- ${CMAKE_CURRENT_SOURCE_DIR}/ArrayFireConfig.cmake.in
+ ${CMAKE_MODULE_PATH}/ArrayFireConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/Install/ArrayFireConfig.cmake
@ONLY)
CONFIGURE_FILE(
- ${CMAKE_CURRENT_SOURCE_DIR}/ArrayFireConfigVersion.cmake.in
+ ${CMAKE_MODULE_PATH}/ArrayFireConfigVersion.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/ArrayFireConfigVersion.cmake
@ONLY)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/Install/ArrayFireConfig.cmake
@@ -265,4 +266,4 @@ ENDIF(APPLE)
##
# Packaging
##
-include(${CMAKE_CURRENT_SOURCE_DIR}/CPack.cmake)
+include(${CMAKE_MODULE_PATH}/CPackConfig.cmake)
diff --git a/ArrayFireConfig.cmake.in b/CMakeModules/ArrayFireConfig.cmake.in
similarity index 100%
rename from ArrayFireConfig.cmake.in
rename to CMakeModules/ArrayFireConfig.cmake.in
diff --git a/ArrayFireConfigVersion.cmake.in b/CMakeModules/ArrayFireConfigVersion.cmake.in
similarity index 100%
rename from ArrayFireConfigVersion.cmake.in
rename to CMakeModules/ArrayFireConfigVersion.cmake.in
diff --git a/CPack.cmake b/CMakeModules/CPackConfig.cmake
similarity index 98%
rename from CPack.cmake
rename to CMakeModules/CPackConfig.cmake
index 2e7f1d5a03..de242a99b7 100644
--- a/CPack.cmake
+++ b/CMakeModules/CPackConfig.cmake
@@ -1,6 +1,6 @@
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-include("${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/Version.cmake")
+INCLUDE("${CMAKE_MODULE_PATH}/Version.cmake")
# CPack package generation
#SET(CPACK_GENERATOR "TGZ;STGZ")
diff --git a/CMakeModules/FindCBLAS.cmake b/CMakeModules/FindCBLAS.cmake
index b0cd3bdca0..db1d783e9e 100644
--- a/CMakeModules/FindCBLAS.cmake
+++ b/CMakeModules/FindCBLAS.cmake
@@ -53,19 +53,48 @@ SET(CBLAS_ROOT_DIR CACHE STRING
INCLUDE(CheckTypeSize)
CHECK_TYPE_SIZE("void*" SIZE_OF_VOIDP)
-SET(CBLAS_LIB_DIR)
+IF (NOT INTEL_MKL_ROOT_DIR)
+ SET(INTEL_MKL_ROOT_DIR $ENV{INTEL_MKL_ROOT})
+ENDIF()
-SET(CBLAS_ROOT_DIR "${INTEL_MKL_ROOT_DIR}")
+IF(NOT CBLAS_ROOT_DIR)
-IF(CBLAS_ROOT_DIR)
- IF(INTEL_MKL_ROOT_DIR)
- IF ("${SIZE_OF_VOIDP}" EQUAL 8)
- SET(CBLAS_LIB_DIR "${INTEL_MKL_ROOT_DIR}/lib/intel64")
- ELSE()
- SET(CBLAS_LIB_DIR "${INTEL_MKL_ROOT_DIR}/lib/ia32")
- ENDIF()
+ IF (ENV{CBLASDIR})
+ SET(CBLAS_ROOT_DIR $ENV{CBLASDIR})
+ IF ("${SIZE_OF_VOIDP}" EQUAL 8)
+ SET(CBLAS_LIB64_DIR "${CBLAS_ROOT_DIR}/lib64")
+ ELSE()
+ SET(CBLAS_LIB32_DIR "${CBLAS_ROOT_DIR}/lib")
+ ENDIF()
+ ENDIF()
+
+ IF (ENV{CBLAS_ROOT_DIR})
+ SET(CBLAS_ROOT_DIR $ENV{CBLAS_ROOT_DIR})
+ IF ("${SIZE_OF_VOIDP}" EQUAL 8)
+ SET(CBLAS_LIB64_DIR "${CBLAS_ROOT_DIR}/lib64")
+ ELSE()
+ SET(CBLAS_LIB32_DIR "${CBLAS_ROOT_DIR}/lib")
ENDIF()
- SET(CBLAS_INCLUDE_DIR "${INTEL_MKL_ROOT_DIR}/include")
+ ENDIF()
+
+ IF (INTEL_MKL_ROOT_DIR)
+ SET(CBLAS_ROOT_DIR ${INTEL_MKL_ROOT_DIR})
+ IF(APPLE)
+ IF ("${SIZE_OF_VOIDP}" EQUAL 8)
+ SET(CBLAS_LIB64_DIR "${CBLAS_ROOT_DIR}/lib")
+ ELSE()
+ SET(CBLAS_LIB32_DIR "${CBLAS_ROOT_DIR}/lib")
+ ENDIF()
+ ELSE(APPLE) # Windows and Linux
+ IF ("${SIZE_OF_VOIDP}" EQUAL 8)
+ SET(CBLAS_LIB64_DIR "${CBLAS_ROOT_DIR}/lib/intel64")
+ ELSE()
+ SET(CBLAS_LIB32_DIR "${CBLAS_ROOT_DIR}/lib/ia32")
+ ENDIF()
+ ENDIF(APPLE)
+ ENDIF()
+
+ SET(CBLAS_INCLUDE_DIR "${CBLAS_ROOT_DIR}/include")
ENDIF()
# Old CBLAS search
@@ -116,14 +145,14 @@ MACRO(CHECK_ALL_LIBRARIES
NAMES ${_library}
PATHS /usr/local/lib /usr/lib /usr/local/lib64 /usr/lib64
ENV DYLD_LIBRARY_PATH
- "{CBLAS_LIB_DIR}"
+ "${CBLAS_LIB_DIR}" "${CBLAS_LIB32_DIR}" "${CBLAS_LIB64_DIR}"
)
ELSE(APPLE)
FIND_LIBRARY(${_prefix}_${_library}_LIBRARY
NAMES ${_library}
PATHS /usr/local/lib /usr/lib /usr/local/lib64 /usr/lib64
ENV LD_LIBRARY_PATH
- "${CBLAS_LIB_DIR}"
+ "${CBLAS_LIB_DIR}" "${CBLAS_LIB32_DIR}" "${CBLAS_LIB64_DIR}"
PATH_SUFFIXES atlas
)
IF(NOT ${_prefix}_${library}_LIBRARY)
@@ -132,7 +161,7 @@ MACRO(CHECK_ALL_LIBRARIES
NAMES ${_library}
PATHS /usr/local/lib /usr/lib /usr/local/lib64 /usr/lib64
ENV LD_LIBRARY_PATH
- "${CBLAS_LIB_DIR}"
+ "${CBLAS_LIB_DIR}" "${CBLAS_LIB32_DIR}" "${CBLAS_LIB64_DIR}"
PATH_SUFFIXES atlas
)
ENDIF(NOT ${_prefix}_${library}_LIBRARY)
@@ -194,6 +223,23 @@ MACRO(CHECK_ALL_LIBRARIES
ENDIF(NOT _libraries_work)
ENDMACRO(CHECK_ALL_LIBRARIES)
+# MKL CBLAS library?
+IF(NOT CBLAS_LIBRARIES)
+ CHECK_ALL_LIBRARIES(
+ CBLAS_LIBRARIES
+ CBLAS
+ cblas_dgemm
+ ""
+ "mkl_rt"
+ "mkl_cblas.h"
+ FALSE,
+ TRUE)
+ENDIF(NOT CBLAS_LIBRARIES)
+
+IF(CBLAS_LIBRARIES)
+ SET(MKL_FOUND ON)
+ENDIF()
+
# Apple CBLAS library?
IF(NOT CBLAS_LIBRARIES)
CHECK_ALL_LIBRARIES(
diff --git a/CMakeModules/FindFFTW.cmake b/CMakeModules/FindFFTW.cmake
index a725f64ecd..3156cec89b 100644
--- a/CMakeModules/FindFFTW.cmake
+++ b/CMakeModules/FindFFTW.cmake
@@ -24,6 +24,25 @@ IF(NOT FFTW_ROOT AND ENV{FFTWDIR})
SET(FFTW_ROOT $ENV{FFTWDIR})
ENDIF()
+IF (NOT INTEL_MKL_ROOT_DIR)
+ SET(INTEL_MKL_ROOT_DIR $ENV{INTEL_MKL_ROOT})
+ENDIF()
+
+IF(NOT FFTW_ROOT)
+
+ IF (ENV{FFTWDIR})
+ SET(FFTW_ROOT $ENV{FFTWDIR})
+ ENDIF()
+
+ IF (ENV{FFTW_ROOT_DIR})
+ SET(FFTW_ROOT $ENV{FFTW_ROOT_DIR})
+ ENDIF()
+
+ IF (INTEL_MKL_ROOT_DIR)
+ SET(FFTW_ROOT ${INTEL_MKL_ROOT_DIR})
+ ENDIF()
+ENDIF()
+
# Check if we can use PkgConfig
FIND_PACKAGE(PkgConfig)
@@ -44,14 +63,14 @@ IF(FFTW_ROOT)
#find libs
FIND_LIBRARY(
FFTW_LIB
- NAMES "fftw3" "libfftw3-3" "fftw3-3"
+ NAMES "fftw3" "libfftw3-3" "fftw3-3" "mkl_rt"
PATHS ${FFTW_ROOT}
PATH_SUFFIXES "lib" "lib64"
NO_DEFAULT_PATH
)
FIND_LIBRARY(
FFTWF_LIB
- NAMES "fftw3f" "libfftw3f-3" "fftw3f-3"
+ NAMES "fftw3f" "libfftw3f-3" "fftw3f-3" "mkl_rt"
PATHS ${FFTW_ROOT}
PATH_SUFFIXES "lib" "lib64"
NO_DEFAULT_PATH
@@ -62,18 +81,18 @@ IF(FFTW_ROOT)
FFTW_INCLUDES
NAMES "fftw3.h"
PATHS ${FFTW_ROOT}
- PATH_SUFFIXES "include"
+ PATH_SUFFIXES "include" "include/fftw"
NO_DEFAULT_PATH
)
ELSE()
FIND_LIBRARY(
FFTW_LIB
- NAMES "fftw3"
+ NAMES "fftw3" "mkl_rt"
PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR}
)
FIND_LIBRARY(
FFTWF_LIB
- NAMES "fftw3f"
+ NAMES "fftw3f" "mkl_rt"
PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR}
)
FIND_PATH(
diff --git a/CMakeModules/FindGLEWmx.cmake b/CMakeModules/FindGLEWmx.cmake
index b90919eb98..a6da72bbf2 100644
--- a/CMakeModules/FindGLEWmx.cmake
+++ b/CMakeModules/FindGLEWmx.cmake
@@ -55,7 +55,6 @@ ELSE (WIN32)
/sw/lib
/opt/local/lib
${GLEW_ROOT_DIR}/lib
- NO_DEFAULT_PATH
DOC "The GLEWmx library")
SET(PX ${CMAKE_STATIC_LIBRARY_PREFIX})
@@ -72,7 +71,6 @@ ELSE (WIN32)
/sw/lib
/opt/local/lib
${GLEW_ROOT_DIR}/lib
- NO_DEFAULT_PATH
DOC "The GLEWmx library")
UNSET(PX)
UNSET(SX)
diff --git a/CMakeModules/FindLAPACKE.cmake b/CMakeModules/FindLAPACKE.cmake
index 3bf8a1f362..0732cfaa83 100644
--- a/CMakeModules/FindLAPACKE.cmake
+++ b/CMakeModules/FindLAPACKE.cmake
@@ -9,15 +9,33 @@
# LAPACK_INCLUDES ... LAPACKE include directory
#
-IF(NOT LAPACKE_ROOT AND ENV{LAPACKEDIR})
- SET(LAPACKE_ROOT $ENV{LAPACKEDIR})
+SET(LAPACKE_ROOT_DIR CACHE STRING
+ "Root directory for custom LAPACK implementation")
+
+IF (NOT INTEL_MKL_ROOT_DIR)
+ SET(INTEL_MKL_ROOT_DIR $ENV{INTEL_MKL_ROOT})
+ENDIF()
+
+IF(NOT LAPACKE_ROOT_DIR)
+
+ IF (ENV{LAPACKEDIR})
+ SET(LAPACKE_ROOT_DIR $ENV{LAPACKEDIR})
+ ENDIF()
+
+ IF (ENV{LAPACKE_ROOT_DIR_DIR})
+ SET(LAPACKE_ROOT_DIR $ENV{LAPACKE_ROOT_DIR})
+ ENDIF()
+
+ IF (INTEL_MKL_ROOT_DIR)
+ SET(LAPACKE_ROOT_DIR ${INTEL_MKL_ROOT_DIR})
+ ENDIF()
ENDIF()
# Check if we can use PkgConfig
FIND_PACKAGE(PkgConfig)
#Determine from PKG
-IF(PKG_CONFIG_FOUND AND NOT LAPACKE_ROOT)
+IF(PKG_CONFIG_FOUND AND NOT LAPACKE_ROOT_DIR)
PKG_CHECK_MODULES( PC_LAPACKE QUIET "lapacke")
ENDIF()
@@ -48,40 +66,41 @@ IF(PC_LAPACKE_FOUND)
ELSE(PC_LAPACKE_FOUND)
- IF(LAPACKE_ROOT)
+ IF(LAPACKE_ROOT_DIR)
#find libs
FIND_LIBRARY(
LAPACKE_LIB
- NAMES "lapacke" "LAPACKE" "liblapacke"
- PATHS ${LAPACKE_ROOT}
- PATH_SUFFIXES "lib" "lib64"
+ NAMES "lapacke" "LAPACKE" "liblapacke" "mkl_rt"
+ PATHS ${LAPACKE_ROOT_DIR}
+ PATH_SUFFIXES "lib" "lib64" "lib/ia32" "lib/intel64"
DOC "LAPACKE Library"
NO_DEFAULT_PATH
)
FIND_LIBRARY(
LAPACK_LIB
- NAMES "lapack" "LAPACK" "liblapack"
- PATHS ${LAPACKE_ROOT}
- PATH_SUFFIXES "lib" "lib64"
+ NAMES "lapack" "LAPACK" "liblapack" "mkl_rt"
+ PATHS ${LAPACKE_ROOT_DIR}
+ PATH_SUFFIXES "lib" "lib64" "lib/ia32" "lib/intel64"
DOC "LAPACK Library"
NO_DEFAULT_PATH
)
FIND_PATH(
LAPACKE_INCLUDES
- NAMES "lapacke.h"
- PATHS ${LAPACKE_ROOT}
+ NAMES "lapacke.h" "mkl_lapacke.h"
+ PATHS ${LAPACKE_ROOT_DIR}
PATH_SUFFIXES "include"
DOC "LAPACKE Include Directory"
NO_DEFAULT_PATH
)
-
ELSE()
FIND_LIBRARY(
LAPACKE_LIB
- NAMES "lapacke" "liblapacke" "openblas"
+ NAMES "lapacke" "liblapacke" "openblas" "mkl_rt"
PATHS
${PC_LAPACKE_LIBRARY_DIRS}
${LIB_INSTALL_DIR}
+ /opt/intel/mkl/lib/ia32
+ /opt/intel/mkl/lib/intel64
/usr/lib64
/usr/lib
/usr/local/lib64
@@ -92,10 +111,12 @@ ELSE(PC_LAPACKE_FOUND)
)
FIND_LIBRARY(
LAPACK_LIB
- NAMES "lapack" "liblapack" "openblas"
+ NAMES "lapack" "liblapack" "openblas" "mkl_rt"
PATHS
${PC_LAPACKE_LIBRARY_DIRS}
${LIB_INSTALL_DIR}
+ /opt/intel/mkl/lib/ia32
+ /opt/intel/mkl/lib/intel64
/usr/lib64
/usr/lib
/usr/local/lib64
@@ -106,21 +127,26 @@ ELSE(PC_LAPACKE_FOUND)
)
FIND_PATH(
LAPACKE_INCLUDES
- NAMES "lapacke.h"
+ NAMES "lapacke.h" "mkl_lapacke.h"
PATHS
${PC_LAPACKE_INCLUDE_DIRS}
${INCLUDE_INSTALL_DIR}
+ /opt/intel/mkl/include
/usr/include
/usr/local/include
/sw/include
/opt/local/include
DOC "LAPACKE Include Directory"
)
- ENDIF(LAPACKE_ROOT)
+ ENDIF(LAPACKE_ROOT_DIR)
ENDIF(PC_LAPACKE_FOUND)
-SET(LAPACK_LIBRARIES ${LAPACKE_LIB} ${LAPACK_LIB})
-SET(LAPACK_INCLUDE_DIR ${LAPACKE_INCLUDES})
+IF(LAPACKE_LIB AND LAPACK_LIB)
+ SET(LAPACK_LIBRARIES ${LAPACKE_LIB} ${LAPACK_LIB})
+ENDIF()
+IF(LAPACKE_INCLUDES)
+ SET(LAPACK_INCLUDE_DIR ${LAPACKE_INCLUDES})
+ENDIF()
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LAPACK DEFAULT_MSG
diff --git a/CMakeModules/Version.cmake b/CMakeModules/Version.cmake
index cd5149bd25..8d5b575399 100644
--- a/CMakeModules/Version.cmake
+++ b/CMakeModules/Version.cmake
@@ -2,8 +2,8 @@
# Make a version file that includes the ArrayFire version and git revision
#
SET(AF_VERSION_MAJOR "3")
-SET(AF_VERSION_MINOR "2")
-SET(AF_VERSION_PATCH "2")
+SET(AF_VERSION_MINOR "3")
+SET(AF_VERSION_PATCH "0")
SET(AF_VERSION "${AF_VERSION_MAJOR}.${AF_VERSION_MINOR}.${AF_VERSION_PATCH}")
SET(AF_API_VERSION_CURRENT ${AF_VERSION_MAJOR}${AF_VERSION_MINOR})
@@ -32,6 +32,11 @@ EXECUTE_PROCESS(
OUTPUT_STRIP_TRAILING_WHITESPACE
)
+IF(NOT GIT_COMMIT_HASH)
+ MESSAGE(STATUS "No git. Setting hash to default")
+ SET(GIT_COMMIT_HASH "default")
+ENDIF()
+
CONFIGURE_FILE(
${CMAKE_MODULE_PATH}/version.h.in
${CMAKE_SOURCE_DIR}/include/af/version.h
diff --git a/CMakeModules/build_boost_compute.cmake b/CMakeModules/build_boost_compute.cmake
index c0de1cb291..03c20435a8 100644
--- a/CMakeModules/build_boost_compute.cmake
+++ b/CMakeModules/build_boost_compute.cmake
@@ -1,6 +1,9 @@
-SET(VER 79aa8f9086fdf6ef6db78e889de0273b0eb7bd19)
-SET(URL https://github.com/boostorg/compute/archive/${VER}.tar.gz)
-SET(MD5 dba3318cbdac912dddce71f2a38ffa43)
+# If using a commit, remove the v prefix to VER in URL.
+# If using a tag, don't use v in VER
+# This is because of how github handles it's release tar balls
+SET(VER 0.5)
+SET(URL https://github.com/boostorg/compute/archive/v${VER}.tar.gz)
+SET(MD5 69a52598ac539d3b7f6005a3dd2b6f58)
SET(thirdPartyDir "${CMAKE_BINARY_DIR}/third_party")
SET(srcDir "${thirdPartyDir}/compute-${VER}")
diff --git a/CMakeModules/build_clBLAS.cmake b/CMakeModules/build_clBLAS.cmake
index 6cb1ae8aaf..2289c26393 100644
--- a/CMakeModules/build_clBLAS.cmake
+++ b/CMakeModules/build_clBLAS.cmake
@@ -14,7 +14,7 @@ ENDIF()
ExternalProject_Add(
clBLAS-ext
GIT_REPOSITORY https://github.com/arrayfire/clBLAS.git
- GIT_TAG 102c832825e8e4d60ad73ca97e95668463294068
+ GIT_TAG af3.3.0
PREFIX "${prefix}"
INSTALL_DIR "${prefix}"
UPDATE_COMMAND ""
diff --git a/CMakeModules/build_clFFT.cmake b/CMakeModules/build_clFFT.cmake
index e1dbb3fe1c..2ab9ccc1ea 100644
--- a/CMakeModules/build_clFFT.cmake
+++ b/CMakeModules/build_clFFT.cmake
@@ -14,7 +14,7 @@ ENDIF()
ExternalProject_Add(
clFFT-ext
GIT_REPOSITORY https://github.com/arrayfire/clFFT.git
- GIT_TAG 1597f0f35a644789c7ad77efe79014236cca2fab
+ GIT_TAG af3.3.0
PREFIX "${prefix}"
INSTALL_DIR "${prefix}"
UPDATE_COMMAND ""
diff --git a/CMakeModules/osx_install/OSXInstaller.cmake b/CMakeModules/osx_install/OSXInstaller.cmake
index dc3a8b2491..b2514f8e2a 100644
--- a/CMakeModules/osx_install/OSXInstaller.cmake
+++ b/CMakeModules/osx_install/OSXInstaller.cmake
@@ -8,8 +8,75 @@ SET(BIN2CPP_PROGRAM "bin2cpp")
SET(OSX_INSTALL_DIR ${CMAKE_MODULE_PATH}/osx_install)
+################################################################################
+## Create Directory Structure
+################################################################################
+SET(OSX_TEMP "${CMAKE_BINARY_DIR}/osx_install_files")
+
+# Common files - libforge, ArrayFireConfig*.cmake
+FILE(GLOB COMMONLIB "${CMAKE_INSTALL_PREFIX}/${AF_INSTALL_LIB_DIR}/libforge*.dylib")
+FILE(GLOB COMMONCMAKE "${CMAKE_INSTALL_PREFIX}/${AF_INSTALL_CMAKE_DIR}/ArrayFireConfig*.cmake")
+
+ADD_CUSTOM_TARGET(OSX_INSTALL_SETUP_COMMON)
+FOREACH(SRC ${COMMONLIB} ${COMMONCMAKE})
+ FILE(RELATIVE_PATH SRC_REL ${CMAKE_INSTALL_PREFIX} ${SRC})
+ ADD_CUSTOM_COMMAND(TARGET OSX_INSTALL_SETUP_COMMON PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${SRC} "${OSX_TEMP}/common/${SRC_REL}"
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ COMMENT "Copying Common files to temporary OSX Install Dir"
+ )
+ENDFOREACH()
+
+# Backends - CPU, CUDA, OpenCL, Unified
+MACRO(OSX_INSTALL_SETUP BACKEND LIB)
+ FILE(GLOB ${BACKEND}LIB "${CMAKE_INSTALL_PREFIX}/${AF_INSTALL_LIB_DIR}/lib${LIB}*.dylib")
+ FILE(GLOB ${BACKEND}CMAKE "${CMAKE_INSTALL_PREFIX}/${AF_INSTALL_CMAKE_DIR}/ArrayFire${BACKEND}*.cmake")
+
+ ADD_CUSTOM_TARGET(OSX_INSTALL_SETUP_${BACKEND})
+ FOREACH(SRC ${${BACKEND}LIB} ${${BACKEND}CMAKE})
+ FILE(RELATIVE_PATH SRC_REL ${CMAKE_INSTALL_PREFIX} ${SRC})
+ ADD_CUSTOM_COMMAND(TARGET OSX_INSTALL_SETUP_${BACKEND} PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${SRC} "${OSX_TEMP}/${BACKEND}/${SRC_REL}"
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ COMMENT "Copying ${BACKEND} files to temporary OSX Install Dir"
+ )
+ ENDFOREACH()
+ENDMACRO(OSX_INSTALL_SETUP)
+
+OSX_INSTALL_SETUP(CPU afcpu)
+OSX_INSTALL_SETUP(CUDA afcuda)
+OSX_INSTALL_SETUP(OpenCL afopencl)
+OSX_INSTALL_SETUP(Unified af)
+
+# Headers
+ADD_CUSTOM_TARGET(OSX_INSTALL_SETUP_INCLUDE
+ COMMAND ${CMAKE_COMMAND} -E copy_directory
+ ${CMAKE_INSTALL_PREFIX}/include "${OSX_TEMP}/include"
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ COMMENT "Copying header files to temporary OSX Install Dir"
+ )
+
+# Examples
+ADD_CUSTOM_TARGET(OSX_INSTALL_SETUP_EXAMPLES
+ COMMAND ${CMAKE_COMMAND} -E copy_directory
+ "${CMAKE_INSTALL_PREFIX}/share/ArrayFire/examples" "${OSX_TEMP}/examples"
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ COMMENT "Copying examples files to temporary OSX Install Dir"
+ )
+
+# Documentation
+ADD_CUSTOM_TARGET(OSX_INSTALL_SETUP_DOC
+ COMMAND ${CMAKE_COMMAND} -E copy_directory
+ "${CMAKE_INSTALL_PREFIX}/share/ArrayFire/doc" "${OSX_TEMP}/doc"
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ COMMENT "Copying documentation files to temporary OSX Install Dir"
+ )
+################################################################################
+
FUNCTION(PKG_BUILD)
- CMAKE_PARSE_ARGUMENTS(ARGS "" "INSTALL_LOCATION;IDENTIFIER;PATH_TO_FILES;PKG_NAME;TARGETS;SCRIPT_DIR" "FILTERS" ${ARGN})
+ CMAKE_PARSE_ARGUMENTS(ARGS "" "DEPENDS;INSTALL_LOCATION;IDENTIFIER;PATH_TO_FILES;PKG_NAME;TARGETS;SCRIPT_DIR" "FILTERS" ${ARGN})
FOREACH(filter ${ARGS_FILTERS})
LIST(APPEND FILTER_LIST --filter ${filter})
@@ -70,50 +137,69 @@ ENDFUNCTION(PRODUCT_BUILD)
PKG_BUILD( PKG_NAME ArrayFireCPU
- DEPENDS afcpu
+ DEPENDS OSX_INSTALL_SETUP_CPU
TARGETS cpu_package
- INSTALL_LOCATION /usr/local/lib
+ INSTALL_LOCATION /usr/local
SCRIPT_DIR ${OSX_INSTALL_DIR}/cpu_scripts
IDENTIFIER com.arrayfire.pkg.arrayfire.cpu.lib
- PATH_TO_FILES package/lib
+ PATH_TO_FILES ${OSX_TEMP}/CPU
FILTERS opencl cuda unified)
PKG_BUILD( PKG_NAME ArrayFireCUDA
- DEPENDS afcuda
+ DEPENDS OSX_INSTALL_SETUP_CUDA
TARGETS cuda_package
- INSTALL_LOCATION /usr/local/lib
+ INSTALL_LOCATION /usr/local
SCRIPT_DIR ${OSX_INSTALL_DIR}/cuda_scripts
IDENTIFIER com.arrayfire.pkg.arrayfire.cuda.lib
- PATH_TO_FILES package/lib
+ PATH_TO_FILES ${OSX_TEMP}/CUDA
FILTERS cpu opencl unified)
PKG_BUILD( PKG_NAME ArrayFireOPENCL
- DEPENDS afopencl
+ DEPENDS OSX_INSTALL_SETUP_OpenCL
TARGETS opencl_package
- INSTALL_LOCATION /usr/local/lib
+ INSTALL_LOCATION /usr/local
IDENTIFIER com.arrayfire.pkg.arrayfire.opencl.lib
- PATH_TO_FILES package/lib
+ PATH_TO_FILES ${OSX_TEMP}/OpenCL
FILTERS cpu cuda unified)
PKG_BUILD( PKG_NAME ArrayFireUNIFIED
- DEPENDS af
+ DEPENDS OSX_INSTALL_SETUP_Unified
TARGETS unified_package
- INSTALL_LOCATION /usr/local/lib
+ INSTALL_LOCATION /usr/local
IDENTIFIER com.arrayfire.pkg.arrayfire.unified.lib
- PATH_TO_FILES package/lib
+ PATH_TO_FILES ${OSX_TEMP}/Unified
FILTERS cpu cuda opencl)
+PKG_BUILD( PKG_NAME ArrayFireCommon
+ DEPENDS OSX_INSTALL_SETUP_COMMON
+ TARGETS common_package
+ INSTALL_LOCATION /usr/local
+ IDENTIFIER com.arrayfire.pkg.arrayfire.libcommon
+ PATH_TO_FILES ${OSX_TEMP}/common
+ FILTERS cpu cuda opencl unified)
+
PKG_BUILD( PKG_NAME ArrayFireHeaders
+ DEPENDS OSX_INSTALL_SETUP_INCLUDE
TARGETS header_package
INSTALL_LOCATION /usr/local/include
IDENTIFIER com.arrayfire.pkg.arrayfire.inc
- PATH_TO_FILES package/include)
-
-PKG_BUILD( PKG_NAME ArrayFireExtra
- TARGETS extra_package
- INSTALL_LOCATION /usr/local/share
- IDENTIFIER com.arrayfire.pkg.arrayfire.extra
- PATH_TO_FILES package/share)
-
-PRODUCT_BUILD(DEPENDS ${cpu_package} ${cuda_package} ${opencl_package} ${unified_package} ${header_package} ${extra_package})
+ PATH_TO_FILES ${OSX_TEMP}/include)
+
+PKG_BUILD( PKG_NAME ArrayFireExamples
+ DEPENDS OSX_INSTALL_SETUP_EXAMPLES
+ TARGETS examples_package
+ INSTALL_LOCATION /usr/local/share/ArrayFire/examples
+ IDENTIFIER com.arrayfire.pkg.arrayfire.examples
+ PATH_TO_FILES ${OSX_TEMP}/examples
+ FILTERS cmake)
+
+PKG_BUILD( PKG_NAME ArrayFireDoc
+ DEPENDS OSX_INSTALL_SETUP_DOC
+ TARGETS doc_package
+ INSTALL_LOCATION /usr/local/share/ArrayFire/doc
+ IDENTIFIER com.arrayfire.pkg.arrayfire.doc
+ PATH_TO_FILES ${OSX_TEMP}/doc
+ FILTERS cmake)
+
+PRODUCT_BUILD(DEPENDS ${cpu_package} ${cuda_package} ${opencl_package} ${unified_package} ${common_package} ${header_package} ${examples_package} ${doc_package})
diff --git a/CMakeModules/osx_install/distribution.dist b/CMakeModules/osx_install/distribution.dist
index 3dc82379c9..b476bf013f 100644
--- a/CMakeModules/osx_install/distribution.dist
+++ b/CMakeModules/osx_install/distribution.dist
@@ -17,7 +17,9 @@
ArrayFireOPENCL.pkg
ArrayFireUNIFIED.pkg
ArrayFireHeaders.pkg
-
+ ArrayFireExamples.pkg
+ ArrayFireDoc.pkg
+ ArrayFireCommon.pkg
@@ -25,38 +27,51 @@
+
-
+
+
+
+
+
-