From 55195f6109a561c66fa55e75b4e0a64c039f1255 Mon Sep 17 00:00:00 2001
From: Ben Cumming <bcumming@cscs.ch>
Date: Tue, 16 Aug 2016 08:48:13 +0200
Subject: [PATCH] add optional compilation of vectorized code with Intel
 compiler

---
 CMakeLists.txt            | 5 ++++-
 mechanisms/CMakeLists.txt | 7 ++++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 44e40b63..91b0a186 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -62,12 +62,15 @@ if(SYSTEM_CRAY)
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -dynamic")
 endif()
 
-# Cray systems
+# KNL target
 set(TARGET_KNL OFF CACHE BOOL "target Intel KNL architecture")
 if(TARGET_KNL)
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXXOPT_KNL}")
 endif()
 
+# vectorization
+set(TARGET_VECTORIZE OFF CACHE BOOL "generate optimized code that vectorizes with the Intel compiler")
+
 # targets for extermal dependencies
 include(ExternalProject)
 externalproject_add(modparser
diff --git a/mechanisms/CMakeLists.txt b/mechanisms/CMakeLists.txt
index 24b4c3d6..9dded834 100644
--- a/mechanisms/CMakeLists.txt
+++ b/mechanisms/CMakeLists.txt
@@ -2,13 +2,18 @@ set(mechanisms pas hh expsyn exp2syn)
 
 set(modcc "${CMAKE_BINARY_DIR}/external/bin/modcc")
 
+set(modcc_flags "-t cpu")
+if(TARGET_VECTORIZE)
+    set(modcc_flags ${modcc_flags}  -O)
+endif()
+
 foreach(mech ${mechanisms})
     set(mod "${CMAKE_CURRENT_SOURCE_DIR}/mod/${mech}.mod")
     set(hpp "${CMAKE_CURRENT_SOURCE_DIR}/${mech}.hpp")
     add_custom_command(OUTPUT "${hpp}"
                        DEPENDS modparser "${mod}"
                        WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
-                       COMMAND "${modcc}" -t cpu -O -o "${hpp}" "${mod}")
+                       COMMAND ${modcc} ${modcc_flags} ${mod} -o ${hpp})
     set_source_files_properties("${hpp}" PROPERTIES GENERATED TRUE)
     list(APPEND all_mod_hpps "${hpp}")
 endforeach()
-- 
GitLab