It seems the conversion from old python-based configure to cmake has
some rough edges. Here're a few fixes to avoid downstream growing
suboptimal versions. Except merge conflicts they can be applied or
discarded independently.

Accompanying build logs (rebased against 0.3.0):
i386,  gcc 4.2.1+  - http://sprunge.us/QPPT 
i386,  clang 3.4.1 - http://sprunge.us/eOCd
armv6, clang 3.7.0 - http://sprunge.us/PBXc

--
Not a pull request because sourceforge is hostile towards tor signup.

From 566c3fc76ed40306ac80322be003826486e4c17b Mon Sep 17 00:00:00 2001
From: Matthieu Volat <[email protected]>
Date: Sun, 21 Dec 2014 20:19:00 +0000
Subject: [1/4] Also search GLib library in non-default location to fix

/usr/bin/ld: cannot find -lglib-2.0
---
 CMakeLists.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 21f082b..e6de751 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -97,6 +97,7 @@ ELSE()
 ENDIF()
 
 INCLUDE_DIRECTORIES(SYSTEM ${GLIB2_INCLUDE_DIRS})
+LINK_DIRECTORIES(${GLIB2_LIBRARY_DIRS})
 
 
 IF(BUILD_STATIC)
From 4e084051fbceb3740bf9c801a7e25a492d1f4ac6 Mon Sep 17 00:00:00 2001
From: Jan Beich <[email protected]>
Date: Sat, 28 Nov 2015 12:18:49 +0000
Subject: [2/4] Clang supports -mfoo like GCC which fixes

In file included from libs/lensfun/mod-coord-sse.cpp:16:
/usr/bin/../lib/clang/3.7.0/include/xmmintrin.h:28:2: error: "SSE instruction 
set not enabled"
---
 CMakeLists.txt | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e6de751..926816d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -62,13 +62,13 @@ ENDIF()
 
 IF(BUILD_FOR_SSE)
   SET(VECTORIZATION_SSE 1)
-  IF(CMAKE_COMPILER_IS_GNUCXX)
+  IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse")
   ENDIF()
 ENDIF()
 IF(BUILD_FOR_SSE2)
   SET(VECTORIZATION_SSE2 1)
-  IF(CMAKE_COMPILER_IS_GNUCXX)
+  IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2")
   ENDIF()
 ENDIF()
From 380482d41fc1e90ab08f63222128464516e043d3 Mon Sep 17 00:00:00 2001
From: Jan Beich <[email protected]>
Date: Sat, 28 Nov 2015 10:26:18 +0000
Subject: [3/4] Limit -mfoo to intrinsics consumers

Runtime detection is useless if everything is built with -mfoo.
For one, pre-SSE2 i386 may crash with "Illegal instruction".
---
 CMakeLists.txt              | 4 ++--
 libs/lensfun/CMakeLists.txt | 5 +++++
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 926816d..1988711 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -63,13 +63,13 @@ ENDIF()
 IF(BUILD_FOR_SSE)
   SET(VECTORIZATION_SSE 1)
   IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse")
+    SET(VECTORIZATION_SSE_FLAGS "-msse")
   ENDIF()
 ENDIF()
 IF(BUILD_FOR_SSE2)
   SET(VECTORIZATION_SSE2 1)
   IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2")
+    SET(VECTORIZATION_SSE2_FLAGS "-msse2")
   ENDIF()
 ENDIF()
 
diff --git a/libs/lensfun/CMakeLists.txt b/libs/lensfun/CMakeLists.txt
index 6beadec..b0ca638 100644
--- a/libs/lensfun/CMakeLists.txt
+++ b/libs/lensfun/CMakeLists.txt
@@ -9,6 +9,11 @@ IF(WIN32)
   LIST(APPEND LENSFUN_SRC windows/auxfun.cpp)
 ENDIF()
 
+SET_SOURCE_FILES_PROPERTIES(mod-color-sse.cpp mod-coord-sse.cpp
+  PROPERTIES COMPILE_FLAGS "${VECTORIZATION_SSE_FLAGS}")
+SET_SOURCE_FILES_PROPERTIES(mod-color-sse2.cpp
+  PROPERTIES COMPILE_FLAGS "${VECTORIZATION_SSE2_FLAGS}")
+
 IF(BUILD_STATIC)
   ADD_LIBRARY(lensfun STATIC ${LENSFUN_SRC})
 ELSE()
From e6412e0a1bd6f4a3ef4809af7e40965265a2959d Mon Sep 17 00:00:00 2001
From: Jan Beich <[email protected]>
Date: Sat, 28 Nov 2015 12:06:31 +0000
Subject: [4/4] Limit SSE/SSE2 optimizations to x86 by default

For one, aarch64 build fails with

g++: error: unrecognized command line option '-msse'

clang++: warning: argument unused during compilation: '-msse'
In file included from libs/lensfun/mod-coord-sse.cpp:16:
/usr/bin/../lib/clang/3.7.0/include/xmmintrin.h:28:2: error: "SSE instruction 
set not enabled"
---
 CMakeLists.txt | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1988711..b85656c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -31,12 +31,18 @@ IF(NOT HAVE_REGEX_H)
   INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/libs/regex)
 ENDIF()
 
+IF(CMAKE_SYSTEM_PROCESSOR MATCHES "[XxIi][0-9]?86|[Aa][Mm][Dd]64")
+  SET(X86_ON ON)
+else()
+  SET(X86_ON OFF)
+ENDIF()
+
 # options controlling the build process
 OPTION(BUILD_STATIC "Build static library" OFF)
 OPTION(BUILD_TESTS "Build test suite" OFF)
 OPTION(BUILD_LENSTOOL "Build the lenstool (requires libpng)" OFF)
-OPTION(BUILD_FOR_SSE "Build with support for SSE" ON)
-OPTION(BUILD_FOR_SSE2 "Build with support for SSE2" ON)
+OPTION(BUILD_FOR_SSE "Build with support for SSE" ${X86_ON})
+OPTION(BUILD_FOR_SSE2 "Build with support for SSE2" ${X86_ON})
 OPTION(BUILD_DOC "Build documentation with doxygen" OFF)
 OPTION(INSTALL_HELPER_SCRIPTS "Install various helper scripts" ON)
 

Attachment: signature.asc
Description: PGP signature

------------------------------------------------------------------------------
_______________________________________________
Lensfun-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/lensfun-users

Reply via email to