xref: /OK3568_Linux_fs/buildroot/package/mraa/0002-CMakeLists.txt-add-BUILDCPP-option.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunFrom cb88e4dd1fbbb9d24e625dba2768b88ed99da309 Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Fabrice Fontaine <fontaine.fabrice@gmail.com>
3*4882a593SmuzhiyunDate: Sat, 13 Jun 2020 22:51:37 +0200
4*4882a593SmuzhiyunSubject: [PATCH] CMakeLists.txt: add BUILDCPP option
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunC++ is a mandatory dependency since version 1.4.0 and
7*4882a593Smuzhiyunhttps://github.com/eclipse/mraa/commit/122cab1f1e53b7c9c7cd82905b962071f9bad9dc
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunAs a result, build on embedded toolchains that do not support C++ fails
10*4882a593Smuzhiyunon:
11*4882a593Smuzhiyun
12*4882a593SmuzhiyunCMake Error at CMakeLists.txt:2 (project):
13*4882a593Smuzhiyun  The CMAKE_CXX_COMPILER:
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun    /home/naourr/work/instance-1/output-1/per-package/mraa/host/bin/arm-linux-g++
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun  is not a full path to an existing compiler tool.
18*4882a593Smuzhiyun
19*4882a593SmuzhiyunFixes:
20*4882a593Smuzhiyun - http://autobuild.buildroot.org/results/31086422e03611c16ab59c4418e3669b580bc0c0
21*4882a593Smuzhiyun
22*4882a593SmuzhiyunSigned-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
23*4882a593Smuzhiyun[Retrieved from:
24*4882a593Smuzhiyunhttps://github.com/eclipse/mraa/commit/cb88e4dd1fbbb9d24e625dba2768b88ed99da309]
25*4882a593Smuzhiyun---
26*4882a593Smuzhiyun CMakeLists.txt                | 69 +++++++++++++++++++----------------
27*4882a593Smuzhiyun src/java/CMakeLists.txt       |  4 +-
28*4882a593Smuzhiyun src/javascript/CMakeLists.txt | 34 +++++++++--------
29*4882a593Smuzhiyun 3 files changed, 59 insertions(+), 48 deletions(-)
30*4882a593Smuzhiyun
31*4882a593Smuzhiyundiff --git a/CMakeLists.txt b/CMakeLists.txt
32*4882a593Smuzhiyunindex 250d9106e..90c0dc920 100644
33*4882a593Smuzhiyun--- a/CMakeLists.txt
34*4882a593Smuzhiyun+++ b/CMakeLists.txt
35*4882a593Smuzhiyun@@ -1,5 +1,5 @@
36*4882a593Smuzhiyun cmake_minimum_required (VERSION 2.8.11)
37*4882a593Smuzhiyun-project (mraa C CXX)
38*4882a593Smuzhiyun+project (mraa C)
39*4882a593Smuzhiyun
40*4882a593Smuzhiyun FIND_PACKAGE (Threads REQUIRED)
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun@@ -11,6 +11,8 @@ else ()
43*4882a593Smuzhiyun   set (CMAKE_C_STANDARD 99)
44*4882a593Smuzhiyun endif ()
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun+option (BUILDCPP "Enable C++ (needed by FTDI4222 and tests)" ON)
47*4882a593Smuzhiyun+
48*4882a593Smuzhiyun ###############################################################################
49*4882a593Smuzhiyun # Detect supported warning flags
50*4882a593Smuzhiyun # Modified from work By Dan Liew (fpbench - MIT)
51*4882a593Smuzhiyun@@ -33,15 +35,18 @@ set (MRAA_C_WARNING_FLAGS
52*4882a593Smuzhiyun   -Werror=missing-parameter-type
53*4882a593Smuzhiyun )
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun-# Warning flags for the C++ compiler only
56*4882a593Smuzhiyun-set (MRAA_CXX_WARNING_FLAGS
57*4882a593Smuzhiyun-  -Wnon-virtual-dtor
58*4882a593Smuzhiyun-  -Woverloaded-virtual
59*4882a593Smuzhiyun-  -Wreorder
60*4882a593Smuzhiyun-)
61*4882a593Smuzhiyun-
62*4882a593Smuzhiyun include (CheckCCompilerFlag)
63*4882a593Smuzhiyun-include (CheckCXXCompilerFlag)
64*4882a593Smuzhiyun+if (BUILDCPP)
65*4882a593Smuzhiyun+  # Warning flags for the C++ compiler only
66*4882a593Smuzhiyun+  set (MRAA_CXX_WARNING_FLAGS
67*4882a593Smuzhiyun+    -Wnon-virtual-dtor
68*4882a593Smuzhiyun+    -Woverloaded-virtual
69*4882a593Smuzhiyun+    -Wreorder
70*4882a593Smuzhiyun+  )
71*4882a593Smuzhiyun+
72*4882a593Smuzhiyun+  enable_language (CXX)
73*4882a593Smuzhiyun+  include (CheckCXXCompilerFlag)
74*4882a593Smuzhiyun+endif ()
75*4882a593Smuzhiyun function (MRAA_SANITIZE_FLAG_NAME OUTPUT_VAR FLAG)
76*4882a593Smuzhiyun   string (REPLACE "-" "_" SANITIZED_FLAG_NAME "${FLAG}")
77*4882a593Smuzhiyun   string (REPLACE "/" "_" SANITIZED_FLAG_NAME "${SANITIZED_FLAG_NAME}")
78*4882a593Smuzhiyun@@ -62,28 +67,30 @@ foreach (flag ${MRAA_BOTH_WARNING_FLAGS} ${MRAA_C_WARNING_FLAGS})
79*4882a593Smuzhiyun   endif ()
80*4882a593Smuzhiyun endforeach ()
81*4882a593Smuzhiyun
82*4882a593Smuzhiyun-# Globally set C++ compiler warning flags that are supported and emit
83*4882a593Smuzhiyun-# a warning about unsupported flags
84*4882a593Smuzhiyun-foreach (flag ${MRAA_BOTH_WARNING_FLAGS} ${MRAA_CXX_WARNING_FLAGS})
85*4882a593Smuzhiyun-  MRAA_SANITIZE_FLAG_NAME (SANITIZED_FLAG_NAME "${flag}")
86*4882a593Smuzhiyun-  CHECK_CXX_COMPILER_FLAG ("${flag}" HAS_CXX_${SANITIZED_FLAG_NAME})
87*4882a593Smuzhiyun-  if (HAS_CXX_${SANITIZED_FLAG_NAME})
88*4882a593Smuzhiyun-    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
89*4882a593Smuzhiyun-  else ()
90*4882a593Smuzhiyun-    message (WARNING "C++ compiler does not support flag \"${flag}\"")
91*4882a593Smuzhiyun-  endif ()
92*4882a593Smuzhiyun-endforeach ()
93*4882a593Smuzhiyun-
94*4882a593Smuzhiyun-# This function adds the c++11 flag to a c++ target (if supported)
95*4882a593Smuzhiyun-function(use_cxx_11 targetname)
96*4882a593Smuzhiyun-  include(CheckCXXCompilerFlag)
97*4882a593Smuzhiyun-  CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
98*4882a593Smuzhiyun-  if (COMPILER_SUPPORTS_CXX11)
99*4882a593Smuzhiyun-    set_target_properties(${targetname} PROPERTIES COMPILE_FLAGS "-std=c++11")
100*4882a593Smuzhiyun-  else()
101*4882a593Smuzhiyun-    message(FATAL_ERROR "Target '${targetname}' requires c++11 which is not supported by this compiler")
102*4882a593Smuzhiyun-  endif()
103*4882a593Smuzhiyun-endfunction()
104*4882a593Smuzhiyun+if (BUILDCPP)
105*4882a593Smuzhiyun+  # Globally set C++ compiler warning flags that are supported and emit
106*4882a593Smuzhiyun+  # a warning about unsupported flags
107*4882a593Smuzhiyun+  foreach (flag ${MRAA_BOTH_WARNING_FLAGS} ${MRAA_CXX_WARNING_FLAGS})
108*4882a593Smuzhiyun+    MRAA_SANITIZE_FLAG_NAME (SANITIZED_FLAG_NAME "${flag}")
109*4882a593Smuzhiyun+    CHECK_CXX_COMPILER_FLAG ("${flag}" HAS_CXX_${SANITIZED_FLAG_NAME})
110*4882a593Smuzhiyun+    if (HAS_CXX_${SANITIZED_FLAG_NAME})
111*4882a593Smuzhiyun+      set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
112*4882a593Smuzhiyun+    else ()
113*4882a593Smuzhiyun+      message (WARNING "C++ compiler does not support flag \"${flag}\"")
114*4882a593Smuzhiyun+    endif ()
115*4882a593Smuzhiyun+  endforeach ()
116*4882a593Smuzhiyun+
117*4882a593Smuzhiyun+  # This function adds the c++11 flag to a c++ target (if supported)
118*4882a593Smuzhiyun+  function(use_cxx_11 targetname)
119*4882a593Smuzhiyun+    include(CheckCXXCompilerFlag)
120*4882a593Smuzhiyun+    CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
121*4882a593Smuzhiyun+    if (COMPILER_SUPPORTS_CXX11)
122*4882a593Smuzhiyun+      set_target_properties(${targetname} PROPERTIES COMPILE_FLAGS "-std=c++11")
123*4882a593Smuzhiyun+    else()
124*4882a593Smuzhiyun+      message(FATAL_ERROR "Target '${targetname}' requires c++11 which is not supported by this compiler")
125*4882a593Smuzhiyun+    endif()
126*4882a593Smuzhiyun+  endfunction()
127*4882a593Smuzhiyun+endif()
128*4882a593Smuzhiyun
129*4882a593Smuzhiyun # Set CMAKE_INSTALL_LIBDIR if not defined
130*4882a593Smuzhiyun include(GNUInstallDirs)
131*4882a593Smuzhiyundiff --git a/src/java/CMakeLists.txt b/src/java/CMakeLists.txt
132*4882a593Smuzhiyunindex 231c755fa..cfa72a0df 100644
133*4882a593Smuzhiyun--- a/src/java/CMakeLists.txt
134*4882a593Smuzhiyun+++ b/src/java/CMakeLists.txt
135*4882a593Smuzhiyun@@ -16,7 +16,9 @@ include_directories (
136*4882a593Smuzhiyun set_source_files_properties (mraajava.i PROPERTIES SWIG_FLAGS ";-package;mraa;-I${CMAKE_BINARY_DIR}/src")
137*4882a593Smuzhiyun set_source_files_properties (mraajava.i PROPERTIES CPLUSPLUS ON)
138*4882a593Smuzhiyun
139*4882a593Smuzhiyun-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -DJAVACALLBACK")
140*4882a593Smuzhiyun+if (BUILDCPP)
141*4882a593Smuzhiyun+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -DJAVACALLBACK")
142*4882a593Smuzhiyun+endif()
143*4882a593Smuzhiyun set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DJAVACALLBACK")
144*4882a593Smuzhiyun
145*4882a593Smuzhiyun if (NOT DEFINED ENV{JAVA_HOME_NATIVE})
146*4882a593Smuzhiyundiff --git a/src/javascript/CMakeLists.txt b/src/javascript/CMakeLists.txt
147*4882a593Smuzhiyunindex 25fd36275..99a96b49d 100644
148*4882a593Smuzhiyun--- a/src/javascript/CMakeLists.txt
149*4882a593Smuzhiyun+++ b/src/javascript/CMakeLists.txt
150*4882a593Smuzhiyun@@ -36,25 +36,27 @@ set_target_properties (mraajs PROPERTIES
151*4882a593Smuzhiyun )
152*4882a593Smuzhiyun
153*4882a593Smuzhiyun message (STATUS "INFO - swig Version ${SWIG_VERSION}")
154*4882a593Smuzhiyun-message (STATUS "INFO - CXX compiler Version ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
155*4882a593Smuzhiyun+if (BUILDCPP)
156*4882a593Smuzhiyun+  message (STATUS "INFO - CXX compiler Version ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
157*4882a593Smuzhiyun
158*4882a593Smuzhiyun-if (${V8_VERSION_MAJOR} GREATER 3)
159*4882a593Smuzhiyun-  message (STATUS "INFO - Using V8 version > 3 so requiring C++11 compiler")
160*4882a593Smuzhiyun-  # Node 0.12.x V8 engine major version is '3'.
161*4882a593Smuzhiyun-  # Node 2.1.0  V8 engine major version is '4'.
162*4882a593Smuzhiyun-  set_property (TARGET mraajs PROPERTY CXX_STANDARD 11)
163*4882a593Smuzhiyun-  set_property (TARGET mraajs PROPERTY CXX_STANDARD_REQUIRED ON)
164*4882a593Smuzhiyun-  if (CMAKE_VERSION VERSION_LESS "3.1")
165*4882a593Smuzhiyun-    message (WARNING "Need to use CMAKE version 3.1+, but it is ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}, using a workaround.")
166*4882a593Smuzhiyun-    if (CMAKE_COMPILER_IS_GNUCXX)
167*4882a593Smuzhiyun-      if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7")
168*4882a593Smuzhiyun-        message (FATAL_ERROR "GNU gcc compiler is also too old (need 4.7+, but ${CMAKE_CXX_COMPILER_VERSION}) and does not support C++11 standard.")
169*4882a593Smuzhiyun+  if (${V8_VERSION_MAJOR} GREATER 3)
170*4882a593Smuzhiyun+    message (STATUS "INFO - Using V8 version > 3 so requiring C++11 compiler")
171*4882a593Smuzhiyun+    # Node 0.12.x V8 engine major version is '3'.
172*4882a593Smuzhiyun+    # Node 2.1.0  V8 engine major version is '4'.
173*4882a593Smuzhiyun+    set_property (TARGET mraajs PROPERTY CXX_STANDARD 11)
174*4882a593Smuzhiyun+    set_property (TARGET mraajs PROPERTY CXX_STANDARD_REQUIRED ON)
175*4882a593Smuzhiyun+    if (CMAKE_VERSION VERSION_LESS "3.1")
176*4882a593Smuzhiyun+      message (WARNING "Need to use CMAKE version 3.1+, but it is ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}, using a workaround.")
177*4882a593Smuzhiyun+      if (CMAKE_COMPILER_IS_GNUCXX)
178*4882a593Smuzhiyun+        if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7")
179*4882a593Smuzhiyun+          message (FATAL_ERROR "GNU gcc compiler is also too old (need 4.7+, but ${CMAKE_CXX_COMPILER_VERSION}) and does not support C++11 standard.")
180*4882a593Smuzhiyun+        endif ()
181*4882a593Smuzhiyun+        set (MRAA_CXX11_WORKAROUND_OPTION "-std=gnu++11")
182*4882a593Smuzhiyun+      else ()
183*4882a593Smuzhiyun+        set (MRAA_CXX11_WORKAROUND_OPTION "-std=c++11")
184*4882a593Smuzhiyun       endif ()
185*4882a593Smuzhiyun-      set (MRAA_CXX11_WORKAROUND_OPTION "-std=gnu++11")
186*4882a593Smuzhiyun-    else ()
187*4882a593Smuzhiyun-      set (MRAA_CXX11_WORKAROUND_OPTION "-std=c++11")
188*4882a593Smuzhiyun+      set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MRAA_CXX11_WORKAROUND_OPTION} ")
189*4882a593Smuzhiyun     endif ()
190*4882a593Smuzhiyun-    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MRAA_CXX11_WORKAROUND_OPTION} ")
191*4882a593Smuzhiyun   endif ()
192*4882a593Smuzhiyun endif ()
193*4882a593Smuzhiyun
194