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