Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save rsdubtso/18d25961b15667c4a0bf523933f7acb4 to your computer and use it in GitHub Desktop.
Save rsdubtso/18d25961b15667c4a0bf523933f7acb4 to your computer and use it in GitHub Desktop.
From 4c528abd9c9331475920c49f5f51c22dad4204c3 Mon Sep 17 00:00:00 2001
From: Roman Dubtsov <dubtsov@gmail.com>
Date: Sun, 2 Jul 2017 14:24:31 +0700
Subject: [PATCH] unofficial: update build system to support OSX
I'm pretty sure Xbyak does not work...
---
CMakeLists.txt | 33 +++++++++++++++++++++++----------
cmake/MKL.cmake | 20 +++++++++++++++++---
examples/simple_net.c | 4 ++--
examples/simple_training_net.c | 4 ++--
4 files changed, 44 insertions(+), 17 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4dc580c..d5de9f2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -16,6 +16,11 @@
cmake_minimum_required(VERSION 2.8)
+if(POLICY CMP0042)
+ # XXX: what behavior do we really need ? (Roma)
+ cmake_policy(SET CMP0042 NEW)
+endif()
+
# version handling is done with old style
if(POLICY CMP0048)
cmake_policy(SET CMP0048 OLD)
@@ -36,16 +41,14 @@ endif()
include("cmake/MKL.cmake")
include("cmake/Doxygen.cmake")
+include(CheckCXXCompilerFlag)
# sdl options
if(UNIX OR APPLE)
set(CMAKE_CCXX_FLAGS "${CMAKE_CCXX_FLAGS} -fPIC -Wformat -Wformat-security")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -D_FORTIFY_SOURCE=2")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -D_FORTIFY_SOURCE=2")
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie")
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
- set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -z noexecstack -z relro -z now")
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -z noexecstack -z relro -z now")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)
set(CMAKE_CCXX_FLAGS "${CMAKE_CCXX_FLAGS} -fstack-protector-all")
else()
@@ -53,16 +56,20 @@ if(UNIX OR APPLE)
endif()
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_CCXX_FLAGS "${CMAKE_CCXX_FLAGS} -fstack-protector-all")
- set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
# workaround for Intel Compiler 16.0 that produces error caused by pragma omp simd collapse(..)
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "17.0")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -diag-disable:13379")
endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector")
- set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -z noexecstack -z relro -z now")
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -z noexecstack -z relro -z now")
+ endif()
+ if(APPLE)
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-bind_at_load")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-bind_at_load")
+ else()
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
endif()
endif()
@@ -78,18 +85,24 @@ if(WIN32)
add_definitions(/Qpar)
endif()
elseif(UNIX OR APPLE)
- set(OPENMP_FLAGS "-fopenmp")
set(CMAKE_CCXX_FLAGS "${CMAKE_CCXX_FLAGS} ${OPENMP_FLAGS} ${CCXX_WARN_FLAGS} -DMKLDNN_DLL -DMKLDNN_DLL_EXPORTS -fvisibility=internal")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CCXX_FLAGS} -std=c99")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CCXX_FLAGS} -std=c++11 -fvisibility-inlines-hidden")
set(CCXX_WARN_FLAGS "-Wall -Werror -Wno-unknown-pragmas")
+ CHECK_CXX_COMPILER_FLAG("-fopenmp" COMPILER_SUPPORTS_FOPENMP)
+ if(COMPILER_SUPPORTS_FOPENMP)
+ set(OPENMP_FLAGS "-fopenmp")
+ endif()
endif()
if(HAVE_MKL)
set(CMAKE_C_CREATE_SHARED_LIBRARY_FORBIDDEN_FLAGS ${OPENMP_FLAGS})
set(CMAKE_CXX_CREATE_SHARED_LIBRARY_FORBIDDEN_FLAGS ${OPENMP_FLAGS})
- set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -liomp5 -Wl,--as-needed")
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -liomp5 -Wl,--as-needed")
+ if(NOT APPLE)
+ # XXX: MKL.cmake takes care of this...
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -liomp5 -Wl,--as-needed")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -liomp5 -Wl,--as-needed")
+ endif()
endif()
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel")
diff --git a/cmake/MKL.cmake b/cmake/MKL.cmake
index a8a64bf..ed79891 100644
--- a/cmake/MKL.cmake
+++ b/cmake/MKL.cmake
@@ -52,12 +52,14 @@ function(detect_mkl LIBNAME)
PATHS ${MKLROOT}/lib ${MKLROOT}/lib/intel64
$ENV{MKLROOT}/lib $ENV{MKLROOT}/lib/intel64
${__mklinc_root}/lib ${__mklinc_root}/lib/intel64)
+
if(MKLINC AND MKLLIB)
set(HAVE_MKL TRUE PARENT_SCOPE)
get_filename_component(MKLLIBPATH "${MKLLIB}" PATH)
string(FIND "${MKLLIBPATH}" ${CMAKE_CURRENT_SOURCE_DIR}/external __idx)
if(${__idx} EQUAL 0)
- install(PROGRAMS ${MKLLIB} ${MKLLIBPATH}/libiomp5.so
+ install(PROGRAMS ${MKLLIB}
+ ${MKLLIBPATH}/${CMAKE_SHARED_LIBRARY_PREFIX}iomp5${CMAKE_SHARED_LIBRARY_SUFFIX}
DESTINATION lib)
endif()
endif()
@@ -65,9 +67,12 @@ endfunction()
if(WIN32)
detect_mkl("mklml")
+elseif(APPLE)
+ detect_mkl("${CMAKE_SHARED_LIBRARY_PREFIX}mklml${CMAKE_SHARED_LIBRARY_SUFFIX}")
+ detect_mkl("${CMAKE_SHARED_LIBRARY_PREFIX}mkl_rt${CMAKE_SHARED_LIBRARY_SUFFIX}")
elseif(UNIX)
- detect_mkl("libmklml_intel.so")
- detect_mkl("libmkl_rt.so")
+ detect_mkl("${CMAKE_SHARED_LIBRARY_PREFIX}mklml_intel${CMAKE_SHARED_LIBRARY_SUFFIX}")
+ detect_mkl("${CMAKE_SHARED_LIBRARY_PREFIX}mkl_rt${CMAKE_SHARED_LIBRARY_SUFFIX}")
endif()
set(FAIL_WITHOUT_MKL)
@@ -76,6 +81,15 @@ if(HAVE_MKL)
add_definitions(-DUSE_MKL -DUSE_CBLAS)
include_directories(AFTER ${MKLINC})
list(APPEND mkldnn_LINKER_LIBS ${MKLLIB})
+ if(APPLE)
+ # XXX: hack to link to libiomp5.dylib
+ get_filename_component(MKLLIBPATH "${MKLLIB}" PATH)
+ find_library(OMP5LIB NAMES libiomp5.dylib
+ PATHS ${MKLLIBPATH} ${MKLLIBPATH}/../../compiler)
+ if (OMP5LIB)
+ list(APPEND mkldnn_LINKER_LIBS ${OMP5LIB})
+ endif()
+ endif()
message(STATUS "Intel(R) MKL found: include ${MKLINC}, lib ${MKLLIB}")
else()
if(DEFINED ENV{FAIL_WITHOUT_MKL} OR DEFINED FAIL_WITHOUT_MKL)
diff --git a/examples/simple_net.c b/examples/simple_net.c
index 1dc796a..a71df0a 100644
--- a/examples/simple_net.c
+++ b/examples/simple_net.c
@@ -15,7 +15,6 @@
*******************************************************************************/
#include <string.h>
-#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include "mkldnn.h"
@@ -44,7 +43,8 @@ void *aligned_malloc(size_t size, size_t alignment) {
#elif defined(_SX)
return malloc(size);
#else
- return memalign(alignment, size);
+ void *p;
+ return !posix_memalign(&p, alignment, size) ? p : NULL;
#endif
}
diff --git a/examples/simple_training_net.c b/examples/simple_training_net.c
index b22a225..8978e92 100644
--- a/examples/simple_training_net.c
+++ b/examples/simple_training_net.c
@@ -15,7 +15,6 @@
*******************************************************************************/
#include <string.h>
-#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
@@ -46,7 +45,8 @@ void *aligned_malloc(size_t size, size_t alignment) {
#ifdef WIN32
return _aligned_malloc(size, alignment);
#else
- return memalign(alignment, size);
+ void *p;
+ return !posix_memalign(&p, alignment, size) ? p : NULL;
#endif
}
--
2.11.0 (Apple Git-81)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment