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