From 2e2e1355acc15a0cae7a7a9e150b530c91dc2808 Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Mon, 28 Jan 2013 13:14:47 +0400 Subject: [PATCH 01/10] Video IO perf tests guarded. --- modules/highgui/perf/perf_input.cpp | 3 +-- modules/highgui/perf/perf_output.cpp | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/highgui/perf/perf_input.cpp b/modules/highgui/perf/perf_input.cpp index 0c1e8e0a73..2c077e847d 100644 --- a/modules/highgui/perf/perf_input.cpp +++ b/modules/highgui/perf/perf_input.cpp @@ -8,7 +8,6 @@ using namespace perf; using std::tr1::make_tuple; using std::tr1::get; - typedef perf::TestBaseWithParam VideoCapture_Reading; PERF_TEST_P(VideoCapture_Reading, ReadFile, testing::Values( "highgui/video/big_buck_bunny.avi", @@ -27,4 +26,4 @@ PERF_TEST_P(VideoCapture_Reading, ReadFile, testing::Values( "highgui/video/big_ SANITY_CHECK(dummy); } -#endif // BUILD_WITH_VIDEO_INPUT_SUPPORT \ No newline at end of file +#endif // BUILD_WITH_VIDEO_INPUT_SUPPORT diff --git a/modules/highgui/perf/perf_output.cpp b/modules/highgui/perf/perf_output.cpp index 6428bb4f03..bf17cd4fef 100644 --- a/modules/highgui/perf/perf_output.cpp +++ b/modules/highgui/perf/perf_output.cpp @@ -31,4 +31,5 @@ PERF_TEST_P(VideoWriter_Writing, WriteFrame, SANITY_CHECK(dummy); } -#endif // BUILD_WITH_VIDEO_OUTPUT_SUPPORT \ No newline at end of file +#endif // BUILD_WITH_VIDEO_OUTPUT_SUPPORT + From 7882aba7af7f78fda8f3d02d92e53c3d8362de75 Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Thu, 10 Jan 2013 17:18:01 +0400 Subject: [PATCH 02/10] TBB download and build option enabled for non Android platfroms. --- 3rdparty/tbb/CMakeLists.txt | 23 ++++++++++++++++------- CMakeLists.txt | 14 +++++++------- cmake/OpenCVDetectTBB.cmake | 2 +- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/3rdparty/tbb/CMakeLists.txt b/3rdparty/tbb/CMakeLists.txt index a362e04600..f525168348 100644 --- a/3rdparty/tbb/CMakeLists.txt +++ b/3rdparty/tbb/CMakeLists.txt @@ -1,8 +1,4 @@ #build TBB for Android from source -if(NOT ANDROID) - message(FATAL_ERROR "The script is designed for Android only!") -endif() - project(tbb) # 4.1 update 1 - works fine @@ -140,13 +136,26 @@ if(tbb_need_GENERIC_DWORD_LOAD_STORE) set(tbb_need_GENERIC_DWORD_LOAD_STORE ON PARENT_SCOPE) endif() -add_library(tbb STATIC ${lib_srcs} ${lib_hdrs} "${CMAKE_CURRENT_SOURCE_DIR}/android_additional.h" "${CMAKE_CURRENT_SOURCE_DIR}/${tbb_version_file}") -target_link_libraries(tbb c m dl) +if (ANDROID) + set(TBB_SOURCE_FILES ${lib_srcs} ${lib_hdrs} "${CMAKE_CURRENT_SOURCE_DIR}/android_additional.h" "${CMAKE_CURRENT_SOURCE_DIR}/${tbb_version_file}") +else() + set(TBB_SOURCE_FILES ${lib_srcs} ${lib_hdrs} "${CMAKE_CURRENT_SOURCE_DIR}/${tbb_version_file}") +endif() + +if (BUILD_SHARED_LIBS) + add_library(tbb SHARED ${TBB_SOURCE_FILES}) + target_link_libraries(tbb c m dl) +else() + add_library(tbb STATIC ${TBB_SOURCE_FILES}) + target_link_libraries(tbb c m dl) +endif() ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef -Wmissing-declarations) string(REPLACE "-Werror=non-virtual-dtor" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include \"${CMAKE_CURRENT_SOURCE_DIR}/android_additional.h\"") +if(ANDROID) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include \"${CMAKE_CURRENT_SOURCE_DIR}/android_additional.h\"") +endif() set_target_properties(tbb PROPERTIES OUTPUT_NAME tbb diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e1b755831..7d769cb404 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -163,13 +163,13 @@ OCV_OPTION(BUILD_ANDROID_SERVICE "Build OpenCV Manager for Google Play" OFF I OCV_OPTION(BUILD_ANDROID_PACKAGE "Build platform-specific package for Google Play" OFF IF ANDROID ) # 3rd party libs -OCV_OPTION(BUILD_ZLIB "Build zlib from source" WIN32 OR APPLE OR CARMA ) -OCV_OPTION(BUILD_TIFF "Build libtiff from source" WIN32 OR ANDROID OR APPLE OR CARMA ) -OCV_OPTION(BUILD_JASPER "Build libjasper from source" WIN32 OR ANDROID OR APPLE OR CARMA ) -OCV_OPTION(BUILD_JPEG "Build libjpeg from source" WIN32 OR ANDROID OR APPLE OR CARMA ) -OCV_OPTION(BUILD_PNG "Build libpng from source" WIN32 OR ANDROID OR APPLE OR CARMA ) -OCV_OPTION(BUILD_OPENEXR "Build openexr from source" WIN32 OR ANDROID OR APPLE OR CARMA ) - +OCV_OPTION(BUILD_ZLIB "Build zlib from source" WIN32 OR APPLE OR CARMA ) +OCV_OPTION(BUILD_TIFF "Build libtiff from source" WIN32 OR ANDROID OR APPLE OR CARMA ) +OCV_OPTION(BUILD_JASPER "Build libjasper from source" WIN32 OR ANDROID OR APPLE OR CARMA ) +OCV_OPTION(BUILD_JPEG "Build libjpeg from source" WIN32 OR ANDROID OR APPLE OR CARMA ) +OCV_OPTION(BUILD_PNG "Build libpng from source" WIN32 OR ANDROID OR APPLE OR CARMA ) +OCV_OPTION(BUILD_OPENEXR "Build openexr from source" WIN32 OR ANDROID OR APPLE OR CARMA ) +OCV_OPTION(BUILD_TBB "Download and build TBB from source" ANDROID IF CMAKE_COMPILER_IS_GNUCXX ) # OpenCV installation options # =================================================== diff --git a/cmake/OpenCVDetectTBB.cmake b/cmake/OpenCVDetectTBB.cmake index 94f5b89e95..fe8e100ec3 100644 --- a/cmake/OpenCVDetectTBB.cmake +++ b/cmake/OpenCVDetectTBB.cmake @@ -1,4 +1,4 @@ -if(ANDROID AND NOT MIPS) +if(BUILD_TBB) add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/tbb") include_directories(SYSTEM ${TBB_INCLUDE_DIRS}) set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} tbb) From 60f056061a3d688051e3560e10c05968b039b361 Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Fri, 11 Jan 2013 10:50:40 +0400 Subject: [PATCH 03/10] Cross compilation toolchain for arm linux added. --- platforms/linux/armlinux.toolchain.cmake | 20 ++++++++++++++++++++ platforms/linux/scripts/cmake_linux.sh | 8 ++++++++ platforms/readme.txt | 1 + 3 files changed, 29 insertions(+) create mode 100644 platforms/linux/armlinux.toolchain.cmake create mode 100755 platforms/linux/scripts/cmake_linux.sh create mode 100644 platforms/readme.txt diff --git a/platforms/linux/armlinux.toolchain.cmake b/platforms/linux/armlinux.toolchain.cmake new file mode 100644 index 0000000000..c2bcaf72be --- /dev/null +++ b/platforms/linux/armlinux.toolchain.cmake @@ -0,0 +1,20 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_VERSION 1) +set(CMAKE_SYSTEM_PROCESSOR arm) + +set(CMAKE_C_COMPILER arm-linux-gnueabi-gcc-4.6) +set(CMAKE_CXX_COMPILER arm-linux-gnueabi-g++-4.6) + +#suppress compiller varning +set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi" ) +set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-psabi" ) + +# can be any other plases +set(__arm_linux_eabi_root /usr/arm-linux-gnueabi) + +set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${__arm_linux_eabi_root}) + +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) + diff --git a/platforms/linux/scripts/cmake_linux.sh b/platforms/linux/scripts/cmake_linux.sh new file mode 100755 index 0000000000..c2a8a18b57 --- /dev/null +++ b/platforms/linux/scripts/cmake_linux.sh @@ -0,0 +1,8 @@ +#!/bin/sh +cd `dirname $0`/.. + +mkdir -p build +cd build + +cmake -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=../armlinux.toolchain.cmake $@ ../../.. + diff --git a/platforms/readme.txt b/platforms/readme.txt new file mode 100644 index 0000000000..7e1c4555c5 --- /dev/null +++ b/platforms/readme.txt @@ -0,0 +1 @@ +This folder contains toolchains and additional files that are needed for cross compitation. \ No newline at end of file From ffb9da14fb0d0653588324a4df925487b5ad37d0 Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Fri, 11 Jan 2013 11:23:48 +0400 Subject: [PATCH 04/10] TBB build defines for Linux added. --- 3rdparty/tbb/CMakeLists.txt | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/3rdparty/tbb/CMakeLists.txt b/3rdparty/tbb/CMakeLists.txt index f525168348..6c633e9b9c 100644 --- a/3rdparty/tbb/CMakeLists.txt +++ b/3rdparty/tbb/CMakeLists.txt @@ -115,16 +115,29 @@ file(GLOB lib_srcs "${tbb_src_dir}/src/tbb/*.cpp") file(GLOB lib_hdrs "${tbb_src_dir}/src/tbb/*.h") list(APPEND lib_srcs "${tbb_src_dir}/src/rml/client/rml_tbb.cpp") -add_definitions(-D__TBB_DYNAMIC_LOAD_ENABLED=0 #required - -D__TBB_BUILD=1 #required - -D__TBB_SURVIVE_THREAD_SWITCH=0 #no cilk on Android ? - -DUSE_PTHREAD #required - -DTBB_USE_GCC_BUILTINS=1 #required - -DTBB_USE_DEBUG=0 #just to be sure - -DTBB_NO_LEGACY=1 #don't need backward compatibility - -DDO_ITT_NOTIFY=0 #it seems that we don't need these notifications +if (ANDROID) + add_definitions(-D__TBB_DYNAMIC_LOAD_ENABLED=0 #required + -D__TBB_BUILD=1 #required + -D__TBB_SURVIVE_THREAD_SWITCH=0 #no cilk on Android? + -DUSE_PTHREAD #required + -DTBB_USE_GCC_BUILTINS=1 #required + -DTBB_USE_DEBUG=0 #just to be sure + -DTBB_NO_LEGACY=1 #don't need backward compatibility + -DDO_ITT_NOTIFY=0 #it seems that we don't need these notifications on Android + ) +else() + add_definitions(-D__TBB_DYNAMIC_LOAD_ENABLED=1 #required + -D__TBB_BUILD=1 #required + -D__TBB_SURVIVE_THREAD_SWITCH=1 #cilk + -DUSE_PTHREAD #required + -DTBB_USE_GCC_BUILTINS=1 #required + -DTBB_USE_DEBUG=0 #just to be sure + -DTBB_NO_LEGACY=1 #don't need backward compatibility + -DDO_ITT_NOTIFY=0 #Required ) +endif() + if(ANDROID_COMPILER_IS_CLANG) add_definitions(-D__TBB_GCC_BUILTIN_ATOMICS_PRESENT=1) ocv_warnings_disable(CMAKE_CXX_FLAGS -Wmissing-prototypes) From 3ed99b77009415938856f74815a450c88d9f1825 Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Mon, 21 Jan 2013 16:45:35 +0400 Subject: [PATCH 05/10] Code review notes applied. Toolchain for arm hardfp added. --- 3rdparty/tbb/CMakeLists.txt | 38 +++++-------------- .../linux/arm-gnueabi-hardfp.toolchain.cmake | 20 ++++++++++ ...ake => arm-gnueabi-softfp.toolchain.cmake} | 4 +- ...e_linux.sh => cmake_arm_gnueabi_hardfp.sh} | 6 +-- .../linux/scripts/cmake_arm_gnueabi_softfp.sh | 8 ++++ 5 files changed, 43 insertions(+), 33 deletions(-) create mode 100644 platforms/linux/arm-gnueabi-hardfp.toolchain.cmake rename platforms/linux/{armlinux.toolchain.cmake => arm-gnueabi-softfp.toolchain.cmake} (75%) rename platforms/linux/scripts/{cmake_linux.sh => cmake_arm_gnueabi_hardfp.sh} (51%) create mode 100755 platforms/linux/scripts/cmake_arm_gnueabi_softfp.sh diff --git a/3rdparty/tbb/CMakeLists.txt b/3rdparty/tbb/CMakeLists.txt index 6c633e9b9c..12224032d5 100644 --- a/3rdparty/tbb/CMakeLists.txt +++ b/3rdparty/tbb/CMakeLists.txt @@ -115,29 +115,16 @@ file(GLOB lib_srcs "${tbb_src_dir}/src/tbb/*.cpp") file(GLOB lib_hdrs "${tbb_src_dir}/src/tbb/*.h") list(APPEND lib_srcs "${tbb_src_dir}/src/rml/client/rml_tbb.cpp") -if (ANDROID) - add_definitions(-D__TBB_DYNAMIC_LOAD_ENABLED=0 #required - -D__TBB_BUILD=1 #required - -D__TBB_SURVIVE_THREAD_SWITCH=0 #no cilk on Android? - -DUSE_PTHREAD #required - -DTBB_USE_GCC_BUILTINS=1 #required - -DTBB_USE_DEBUG=0 #just to be sure - -DTBB_NO_LEGACY=1 #don't need backward compatibility - -DDO_ITT_NOTIFY=0 #it seems that we don't need these notifications on Android - ) -else() - add_definitions(-D__TBB_DYNAMIC_LOAD_ENABLED=1 #required - -D__TBB_BUILD=1 #required - -D__TBB_SURVIVE_THREAD_SWITCH=1 #cilk - -DUSE_PTHREAD #required - -DTBB_USE_GCC_BUILTINS=1 #required - -DTBB_USE_DEBUG=0 #just to be sure - -DTBB_NO_LEGACY=1 #don't need backward compatibility - -DDO_ITT_NOTIFY=0 #Required +add_definitions(-D__TBB_DYNAMIC_LOAD_ENABLED=0 #required + -D__TBB_BUILD=1 #required + -D__TBB_SURVIVE_THREAD_SWITCH=0 #no cilk on Android? + -DUSE_PTHREAD #required + -DTBB_USE_GCC_BUILTINS=1 #required + -DTBB_USE_DEBUG=0 #just to be sure + -DTBB_NO_LEGACY=1 #don't need backward compatibility + -DDO_ITT_NOTIFY=0 #it seems that we don't need these notifications on Android ) -endif() - if(ANDROID_COMPILER_IS_CLANG) add_definitions(-D__TBB_GCC_BUILTIN_ATOMICS_PRESENT=1) ocv_warnings_disable(CMAKE_CXX_FLAGS -Wmissing-prototypes) @@ -155,13 +142,8 @@ else() set(TBB_SOURCE_FILES ${lib_srcs} ${lib_hdrs} "${CMAKE_CURRENT_SOURCE_DIR}/${tbb_version_file}") endif() -if (BUILD_SHARED_LIBS) - add_library(tbb SHARED ${TBB_SOURCE_FILES}) - target_link_libraries(tbb c m dl) -else() - add_library(tbb STATIC ${TBB_SOURCE_FILES}) - target_link_libraries(tbb c m dl) -endif() +add_library(tbb ${TBB_SOURCE_FILES}) +target_link_libraries(tbb c m dl) ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef -Wmissing-declarations) string(REPLACE "-Werror=non-virtual-dtor" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") diff --git a/platforms/linux/arm-gnueabi-hardfp.toolchain.cmake b/platforms/linux/arm-gnueabi-hardfp.toolchain.cmake new file mode 100644 index 0000000000..d1af22234c --- /dev/null +++ b/platforms/linux/arm-gnueabi-hardfp.toolchain.cmake @@ -0,0 +1,20 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_VERSION 1) +set(CMAKE_SYSTEM_PROCESSOR arm) + +set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc-4.6) +set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++-4.6) + +#suppress compiller varning +set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi" ) +set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-psabi" ) + +# can be any other plases +set(ARM_LINUX_SYSROOT /usr/arm-linux-gnueabihf CACHE PATH "ARM cross compilation system root") + +set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${ARM_LINUX_SYSROOT}) + +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) + diff --git a/platforms/linux/armlinux.toolchain.cmake b/platforms/linux/arm-gnueabi-softfp.toolchain.cmake similarity index 75% rename from platforms/linux/armlinux.toolchain.cmake rename to platforms/linux/arm-gnueabi-softfp.toolchain.cmake index c2bcaf72be..597f1ec432 100644 --- a/platforms/linux/armlinux.toolchain.cmake +++ b/platforms/linux/arm-gnueabi-softfp.toolchain.cmake @@ -10,9 +10,9 @@ set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi" ) set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-psabi" ) # can be any other plases -set(__arm_linux_eabi_root /usr/arm-linux-gnueabi) +set(ARM_LINUX_SYSROOT /usr/arm-linux-gnueabi CACHE PATH "ARM cross compilation system root") -set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${__arm_linux_eabi_root}) +set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${ARM_LINUX_SYSROOT}) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) diff --git a/platforms/linux/scripts/cmake_linux.sh b/platforms/linux/scripts/cmake_arm_gnueabi_hardfp.sh similarity index 51% rename from platforms/linux/scripts/cmake_linux.sh rename to platforms/linux/scripts/cmake_arm_gnueabi_hardfp.sh index c2a8a18b57..9d2732852b 100755 --- a/platforms/linux/scripts/cmake_linux.sh +++ b/platforms/linux/scripts/cmake_arm_gnueabi_hardfp.sh @@ -1,8 +1,8 @@ #!/bin/sh cd `dirname $0`/.. -mkdir -p build -cd build +mkdir -p build_hardfp +cd build_hardfp -cmake -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=../armlinux.toolchain.cmake $@ ../../.. +cmake -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=../arm-gnueabi-hardfp.toolchain.cmake $@ ../../.. diff --git a/platforms/linux/scripts/cmake_arm_gnueabi_softfp.sh b/platforms/linux/scripts/cmake_arm_gnueabi_softfp.sh new file mode 100755 index 0000000000..52ff6d22cf --- /dev/null +++ b/platforms/linux/scripts/cmake_arm_gnueabi_softfp.sh @@ -0,0 +1,8 @@ +#!/bin/sh +cd `dirname $0`/.. + +mkdir -p build_softfp +cd build_softfp + +cmake -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=../arm-gnueabi-softfp.toolchain.cmake $@ ../../.. + From 1120289fdbf64deb45ae9f5b5723d76bd869563b Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Thu, 24 Jan 2013 13:29:55 +0400 Subject: [PATCH 06/10] Compiler and linker flags for arm cross compilation fixed. --- .../linux/arm-gnueabi-hardfp.toolchain.cmake | 26 ++++++++++++++++--- .../linux/arm-gnueabi-softfp.toolchain.cmake | 26 ++++++++++++++++--- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/platforms/linux/arm-gnueabi-hardfp.toolchain.cmake b/platforms/linux/arm-gnueabi-hardfp.toolchain.cmake index d1af22234c..b307b137f0 100644 --- a/platforms/linux/arm-gnueabi-hardfp.toolchain.cmake +++ b/platforms/linux/arm-gnueabi-hardfp.toolchain.cmake @@ -5,9 +5,29 @@ set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc-4.6) set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++-4.6) -#suppress compiller varning -set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi" ) -set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-psabi" ) +set(CMAKE_CXX_FLAGS "" CACHE STRING "c++ flags") +set(CMAKE_C_FLAGS "" CACHE STRING "c flags") +set(CMAKE_SHARED_LINKER_FLAGS "" CACHE STRING "shared linker flags") +set(CMAKE_MODULE_LINKER_FLAGS "" CACHE STRING "module linker flags") +set(CMAKE_EXE_LINKER_FLAGS "-Wl,-z,nocopyreloc" CACHE STRING "executable linker flags") + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi") + +set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_SHARED_LINKER_FLAGS}") +set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_MODULE_LINKER_FLAGS}") +set(CMAKE_EXE_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_EXE_LINKER_FLAGS}") + +if(USE_NEON) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=neon") +elseif(USE_VFPV3) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=vfpv3") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfpv3") +else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=vfpv3-d16") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfpv3-d16") +endif() # can be any other plases set(ARM_LINUX_SYSROOT /usr/arm-linux-gnueabihf CACHE PATH "ARM cross compilation system root") diff --git a/platforms/linux/arm-gnueabi-softfp.toolchain.cmake b/platforms/linux/arm-gnueabi-softfp.toolchain.cmake index 597f1ec432..73c14c3896 100644 --- a/platforms/linux/arm-gnueabi-softfp.toolchain.cmake +++ b/platforms/linux/arm-gnueabi-softfp.toolchain.cmake @@ -5,9 +5,29 @@ set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_C_COMPILER arm-linux-gnueabi-gcc-4.6) set(CMAKE_CXX_COMPILER arm-linux-gnueabi-g++-4.6) -#suppress compiller varning -set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi" ) -set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-psabi" ) +set(CMAKE_CXX_FLAGS "" CACHE STRING "c++ flags") +set(CMAKE_C_FLAGS "" CACHE STRING "c flags") +set(CMAKE_SHARED_LINKER_FLAGS "" CACHE STRING "shared linker flags") +set(CMAKE_MODULE_LINKER_FLAGS "" CACHE STRING "module linker flags") +set(CMAKE_EXE_LINKER_FLAGS "-Wl,-z,nocopyreloc" CACHE STRING "executable linker flags") + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi") + +set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_SHARED_LINKER_FLAGS}") +set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_MODULE_LINKER_FLAGS}") +set(CMAKE_EXE_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_EXE_LINKER_FLAGS}") + +if(USE_NEON) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=neon") +elseif(USE_VFPV3) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=vfpv3") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfpv3") +else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=vfpv3-d16") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfpv3-d16") +endif() # can be any other plases set(ARM_LINUX_SYSROOT /usr/arm-linux-gnueabi CACHE PATH "ARM cross compilation system root") From 6645f50dd0211229c06a2ff7245dc1145902345c Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Tue, 5 Feb 2013 16:04:53 +0400 Subject: [PATCH 07/10] CUDA toolkit support added to crosscompilation toolchain. --- platforms/linux/arm-gnueabi-hardfp.toolchain.cmake | 7 +++++++ platforms/linux/arm-gnueabi-softfp.toolchain.cmake | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/platforms/linux/arm-gnueabi-hardfp.toolchain.cmake b/platforms/linux/arm-gnueabi-hardfp.toolchain.cmake index b307b137f0..dc7424e868 100644 --- a/platforms/linux/arm-gnueabi-hardfp.toolchain.cmake +++ b/platforms/linux/arm-gnueabi-hardfp.toolchain.cmake @@ -34,7 +34,14 @@ set(ARM_LINUX_SYSROOT /usr/arm-linux-gnueabihf CACHE PATH "ARM cross compilation set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${ARM_LINUX_SYSROOT}) +if(EXISTS ${CUDA_TOOLKIT_ROOT_DIR}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${CUDA_TOOLKIT_ROOT_DIR}) +endif() + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) +if (CARMA) + add_definitions(-DCARMA) +endif() diff --git a/platforms/linux/arm-gnueabi-softfp.toolchain.cmake b/platforms/linux/arm-gnueabi-softfp.toolchain.cmake index 73c14c3896..0c9fb3f58e 100644 --- a/platforms/linux/arm-gnueabi-softfp.toolchain.cmake +++ b/platforms/linux/arm-gnueabi-softfp.toolchain.cmake @@ -34,7 +34,14 @@ set(ARM_LINUX_SYSROOT /usr/arm-linux-gnueabi CACHE PATH "ARM cross compilation s set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${ARM_LINUX_SYSROOT}) +if(EXISTS ${CUDA_TOOLKIT_ROOT_DIR}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${CUDA_TOOLKIT_ROOT_DIR}) +endif() + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) +if (CARMA) + add_definitions(-DCARMA) +endif() From 4e243e1759790bbf722b0c49c5fbdf38822f7e5b Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Wed, 6 Feb 2013 12:55:37 +0400 Subject: [PATCH 08/10] TBB build for arm linux fixed. Processors count detected correctly. --- 3rdparty/tbb/CMakeLists.txt | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/3rdparty/tbb/CMakeLists.txt b/3rdparty/tbb/CMakeLists.txt index 12224032d5..35747dfb10 100644 --- a/3rdparty/tbb/CMakeLists.txt +++ b/3rdparty/tbb/CMakeLists.txt @@ -136,19 +136,24 @@ if(tbb_need_GENERIC_DWORD_LOAD_STORE) set(tbb_need_GENERIC_DWORD_LOAD_STORE ON PARENT_SCOPE) endif() -if (ANDROID) - set(TBB_SOURCE_FILES ${lib_srcs} ${lib_hdrs} "${CMAKE_CURRENT_SOURCE_DIR}/android_additional.h" "${CMAKE_CURRENT_SOURCE_DIR}/${tbb_version_file}") -else() - set(TBB_SOURCE_FILES ${lib_srcs} ${lib_hdrs} "${CMAKE_CURRENT_SOURCE_DIR}/${tbb_version_file}") +set(TBB_SOURCE_FILES ${lib_srcs} ${lib_hdrs}) + +if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") + if (NOT ANDROID) + set(TBB_SOURCE_FILES ${TBB_SOURCE_FILES} "${CMAKE_CURRENT_SOURCE_DIR}/arm_linux_stub.cpp") + endif() + set(TBB_SOURCE_FILES ${TBB_SOURCE_FILES} "${CMAKE_CURRENT_SOURCE_DIR}/android_additional.h") endif() +set(TBB_SOURCE_FILES ${TBB_SOURCE_FILES} "${CMAKE_CURRENT_SOURCE_DIR}/${tbb_version_file}") + add_library(tbb ${TBB_SOURCE_FILES}) target_link_libraries(tbb c m dl) ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef -Wmissing-declarations) string(REPLACE "-Werror=non-virtual-dtor" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") -if(ANDROID) +if(UNIX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include \"${CMAKE_CURRENT_SOURCE_DIR}/android_additional.h\"") endif() @@ -168,4 +173,3 @@ endif() # get TBB version ocv_parse_header("${tbb_src_dir}/include/tbb/tbb_stddef.h" TBB_VERSION_LINES TBB_VERSION_MAJOR TBB_VERSION_MINOR TBB_INTERFACE_VERSION CACHE) - From b81f0887f0dfe23ef1caaab228927fc654d02294 Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Wed, 6 Feb 2013 14:41:58 +0400 Subject: [PATCH 09/10] Carma board support fixed. --- 3rdparty/tbb/arm_linux_stub.cpp | 10 ++++++++++ .../linux/arm-gnueabi-hardfp.toolchain.cmake | 10 ++++++++-- .../linux/arm-gnueabi-softfp.toolchain.cmake | 10 ++++++++-- platforms/linux/scripts/cmake_carma.sh | 17 +++++++++++++++++ 4 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 3rdparty/tbb/arm_linux_stub.cpp create mode 100755 platforms/linux/scripts/cmake_carma.sh diff --git a/3rdparty/tbb/arm_linux_stub.cpp b/3rdparty/tbb/arm_linux_stub.cpp new file mode 100644 index 0000000000..6026bbe11e --- /dev/null +++ b/3rdparty/tbb/arm_linux_stub.cpp @@ -0,0 +1,10 @@ +#include "tbb/tbb_misc.h" + +namespace tbb { +namespace internal { + +void affinity_helper::protect_affinity_mask() {} +affinity_helper::~affinity_helper() {} + +} +} \ No newline at end of file diff --git a/platforms/linux/arm-gnueabi-hardfp.toolchain.cmake b/platforms/linux/arm-gnueabi-hardfp.toolchain.cmake index dc7424e868..823ab3f503 100644 --- a/platforms/linux/arm-gnueabi-hardfp.toolchain.cmake +++ b/platforms/linux/arm-gnueabi-hardfp.toolchain.cmake @@ -2,8 +2,14 @@ set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_VERSION 1) set(CMAKE_SYSTEM_PROCESSOR arm) -set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc-4.6) -set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++-4.6) +if (CARMA) + set(GCC_COMPILER_VERSION "4.5" CACHE STRING "GCC Compiler version") +else() + set(GCC_COMPILER_VERSION "4.6" CACHE STRING "GCC Compiler version") +endif() + +set(CMAKE_C_COMPILER arm-linux-gnueabi-gcc-${GCC_COMPILER_VERSION}) +set(CMAKE_CXX_COMPILER arm-linux-gnueabi-g++-${GCC_COMPILER_VERSION}) set(CMAKE_CXX_FLAGS "" CACHE STRING "c++ flags") set(CMAKE_C_FLAGS "" CACHE STRING "c flags") diff --git a/platforms/linux/arm-gnueabi-softfp.toolchain.cmake b/platforms/linux/arm-gnueabi-softfp.toolchain.cmake index 0c9fb3f58e..93738bedfa 100644 --- a/platforms/linux/arm-gnueabi-softfp.toolchain.cmake +++ b/platforms/linux/arm-gnueabi-softfp.toolchain.cmake @@ -2,8 +2,14 @@ set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_VERSION 1) set(CMAKE_SYSTEM_PROCESSOR arm) -set(CMAKE_C_COMPILER arm-linux-gnueabi-gcc-4.6) -set(CMAKE_CXX_COMPILER arm-linux-gnueabi-g++-4.6) +if (CARMA) + set(GCC_COMPILER_VERSION "4.5" CACHE STRING "GCC Compiler version") +else() + set(GCC_COMPILER_VERSION "4.6" CACHE STRING "GCC Compiler version") +endif() + +set(CMAKE_C_COMPILER arm-linux-gnueabi-gcc-${GCC_COMPILER_VERSION}) +set(CMAKE_CXX_COMPILER arm-linux-gnueabi-g++-${GCC_COMPILER_VERSION}) set(CMAKE_CXX_FLAGS "" CACHE STRING "c++ flags") set(CMAKE_C_FLAGS "" CACHE STRING "c flags") diff --git a/platforms/linux/scripts/cmake_carma.sh b/platforms/linux/scripts/cmake_carma.sh new file mode 100755 index 0000000000..e1fba960ea --- /dev/null +++ b/platforms/linux/scripts/cmake_carma.sh @@ -0,0 +1,17 @@ +#!/bin/sh +# +# Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved. +# +# NVIDIA Corporation and its licensors retain all intellectual property +# and proprietary rights in and to this software, related documentation +# and any modifications thereto. Any use, reproduction, disclosure or +# distribution of this software and related documentation without an express +# license agreement from NVIDIA Corporation is strictly prohibited. +# + +mkdir -p build_carma +cd build_carma + +cmake -DCARMA=ON -DWITH_TBB=ON -DBUILD_TBB=ON -DUSE_NEON=ON -DCUDA_TOOLKIT_ROOT_DIR=/usr/arm-linux-gnueabi/cuda/ \ +-DCUDA_ARCH_BIN="2.1(2.0)" -DCUDA_ARCH_PTX="" -DCMAKE_SKIP_RPATH=ON -DWITH_CUDA=ON -DWITH_CUBLAS=ON \ +-DCMAKE_TOOLCHAIN_FILE=../arm-gnueabi-softfp.toolchain.cmake $@ ../../.. From 192ee15520aae2fd02f2330fc902279fb1ea7610 Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Wed, 6 Feb 2013 19:18:36 +0400 Subject: [PATCH 10/10] Code review notes fixed; HardFP and SoftFP toolchains joined to one; RPATH skiping added. --- 3rdparty/tbb/CMakeLists.txt | 15 ++--- 3rdparty/tbb/arm_linux_stub.cpp | 2 +- modules/highgui/perf/perf_input.cpp | 3 +- modules/highgui/perf/perf_output.cpp | 3 +- .../linux/arm-gnueabi-softfp.toolchain.cmake | 53 ----------------- ...hain.cmake => arm-gnueabi.toolchain.cmake} | 57 +++++++++++++++++-- .../linux/scripts/cmake_arm_gnueabi_hardfp.sh | 2 +- .../linux/scripts/cmake_arm_gnueabi_softfp.sh | 2 +- platforms/linux/scripts/cmake_carma.sh | 13 +---- 9 files changed, 66 insertions(+), 84 deletions(-) delete mode 100644 platforms/linux/arm-gnueabi-softfp.toolchain.cmake rename platforms/linux/{arm-gnueabi-hardfp.toolchain.cmake => arm-gnueabi.toolchain.cmake} (57%) diff --git a/3rdparty/tbb/CMakeLists.txt b/3rdparty/tbb/CMakeLists.txt index 35747dfb10..b147c121ee 100644 --- a/3rdparty/tbb/CMakeLists.txt +++ b/3rdparty/tbb/CMakeLists.txt @@ -1,4 +1,4 @@ -#build TBB for Android from source +#Cross compile TBB from source project(tbb) # 4.1 update 1 - works fine @@ -117,12 +117,12 @@ list(APPEND lib_srcs "${tbb_src_dir}/src/rml/client/rml_tbb.cpp") add_definitions(-D__TBB_DYNAMIC_LOAD_ENABLED=0 #required -D__TBB_BUILD=1 #required - -D__TBB_SURVIVE_THREAD_SWITCH=0 #no cilk on Android? - -DUSE_PTHREAD #required - -DTBB_USE_GCC_BUILTINS=1 #required + -D__TBB_SURVIVE_THREAD_SWITCH=0 #no cilk support + -DUSE_PTHREAD #required for Unix + -DTBB_USE_GCC_BUILTINS=1 #required for ARM GCC -DTBB_USE_DEBUG=0 #just to be sure -DTBB_NO_LEGACY=1 #don't need backward compatibility - -DDO_ITT_NOTIFY=0 #it seems that we don't need these notifications on Android + -DDO_ITT_NOTIFY=0 #it seems that we don't need these notifications ) if(ANDROID_COMPILER_IS_CLANG) @@ -143,6 +143,7 @@ if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") set(TBB_SOURCE_FILES ${TBB_SOURCE_FILES} "${CMAKE_CURRENT_SOURCE_DIR}/arm_linux_stub.cpp") endif() set(TBB_SOURCE_FILES ${TBB_SOURCE_FILES} "${CMAKE_CURRENT_SOURCE_DIR}/android_additional.h") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include \"${CMAKE_CURRENT_SOURCE_DIR}/android_additional.h\"") endif() set(TBB_SOURCE_FILES ${TBB_SOURCE_FILES} "${CMAKE_CURRENT_SOURCE_DIR}/${tbb_version_file}") @@ -153,10 +154,6 @@ target_link_libraries(tbb c m dl) ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef -Wmissing-declarations) string(REPLACE "-Werror=non-virtual-dtor" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") -if(UNIX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include \"${CMAKE_CURRENT_SOURCE_DIR}/android_additional.h\"") -endif() - set_target_properties(tbb PROPERTIES OUTPUT_NAME tbb DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" diff --git a/3rdparty/tbb/arm_linux_stub.cpp b/3rdparty/tbb/arm_linux_stub.cpp index 6026bbe11e..39451d8cbb 100644 --- a/3rdparty/tbb/arm_linux_stub.cpp +++ b/3rdparty/tbb/arm_linux_stub.cpp @@ -7,4 +7,4 @@ void affinity_helper::protect_affinity_mask() {} affinity_helper::~affinity_helper() {} } -} \ No newline at end of file +} diff --git a/modules/highgui/perf/perf_input.cpp b/modules/highgui/perf/perf_input.cpp index 2c077e847d..0c1e8e0a73 100644 --- a/modules/highgui/perf/perf_input.cpp +++ b/modules/highgui/perf/perf_input.cpp @@ -8,6 +8,7 @@ using namespace perf; using std::tr1::make_tuple; using std::tr1::get; + typedef perf::TestBaseWithParam VideoCapture_Reading; PERF_TEST_P(VideoCapture_Reading, ReadFile, testing::Values( "highgui/video/big_buck_bunny.avi", @@ -26,4 +27,4 @@ PERF_TEST_P(VideoCapture_Reading, ReadFile, testing::Values( "highgui/video/big_ SANITY_CHECK(dummy); } -#endif // BUILD_WITH_VIDEO_INPUT_SUPPORT +#endif // BUILD_WITH_VIDEO_INPUT_SUPPORT \ No newline at end of file diff --git a/modules/highgui/perf/perf_output.cpp b/modules/highgui/perf/perf_output.cpp index bf17cd4fef..6428bb4f03 100644 --- a/modules/highgui/perf/perf_output.cpp +++ b/modules/highgui/perf/perf_output.cpp @@ -31,5 +31,4 @@ PERF_TEST_P(VideoWriter_Writing, WriteFrame, SANITY_CHECK(dummy); } -#endif // BUILD_WITH_VIDEO_OUTPUT_SUPPORT - +#endif // BUILD_WITH_VIDEO_OUTPUT_SUPPORT \ No newline at end of file diff --git a/platforms/linux/arm-gnueabi-softfp.toolchain.cmake b/platforms/linux/arm-gnueabi-softfp.toolchain.cmake deleted file mode 100644 index 93738bedfa..0000000000 --- a/platforms/linux/arm-gnueabi-softfp.toolchain.cmake +++ /dev/null @@ -1,53 +0,0 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSTEM_VERSION 1) -set(CMAKE_SYSTEM_PROCESSOR arm) - -if (CARMA) - set(GCC_COMPILER_VERSION "4.5" CACHE STRING "GCC Compiler version") -else() - set(GCC_COMPILER_VERSION "4.6" CACHE STRING "GCC Compiler version") -endif() - -set(CMAKE_C_COMPILER arm-linux-gnueabi-gcc-${GCC_COMPILER_VERSION}) -set(CMAKE_CXX_COMPILER arm-linux-gnueabi-g++-${GCC_COMPILER_VERSION}) - -set(CMAKE_CXX_FLAGS "" CACHE STRING "c++ flags") -set(CMAKE_C_FLAGS "" CACHE STRING "c flags") -set(CMAKE_SHARED_LINKER_FLAGS "" CACHE STRING "shared linker flags") -set(CMAKE_MODULE_LINKER_FLAGS "" CACHE STRING "module linker flags") -set(CMAKE_EXE_LINKER_FLAGS "-Wl,-z,nocopyreloc" CACHE STRING "executable linker flags") - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi") - -set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_SHARED_LINKER_FLAGS}") -set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_MODULE_LINKER_FLAGS}") -set(CMAKE_EXE_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_EXE_LINKER_FLAGS}") - -if(USE_NEON) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=neon") -elseif(USE_VFPV3) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=vfpv3") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfpv3") -else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=vfpv3-d16") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfpv3-d16") -endif() - -# can be any other plases -set(ARM_LINUX_SYSROOT /usr/arm-linux-gnueabi CACHE PATH "ARM cross compilation system root") - -set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${ARM_LINUX_SYSROOT}) - -if(EXISTS ${CUDA_TOOLKIT_ROOT_DIR}) - set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${CUDA_TOOLKIT_ROOT_DIR}) -endif() - -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) - -if (CARMA) - add_definitions(-DCARMA) -endif() diff --git a/platforms/linux/arm-gnueabi-hardfp.toolchain.cmake b/platforms/linux/arm-gnueabi.toolchain.cmake similarity index 57% rename from platforms/linux/arm-gnueabi-hardfp.toolchain.cmake rename to platforms/linux/arm-gnueabi.toolchain.cmake index 823ab3f503..caa81456db 100644 --- a/platforms/linux/arm-gnueabi-hardfp.toolchain.cmake +++ b/platforms/linux/arm-gnueabi.toolchain.cmake @@ -8,8 +8,15 @@ else() set(GCC_COMPILER_VERSION "4.6" CACHE STRING "GCC Compiler version") endif() -set(CMAKE_C_COMPILER arm-linux-gnueabi-gcc-${GCC_COMPILER_VERSION}) -set(CMAKE_CXX_COMPILER arm-linux-gnueabi-g++-${GCC_COMPILER_VERSION}) +set(FLOAT_ABI_SUFFIX "") + +if (NOT SOFTFP) + set(FLOAT_ABI_SUFFIX "hf") +endif() + +set(CMAKE_C_COMPILER arm-linux-gnueabi${FLOAT_ABI_SUFFIX}-gcc-${GCC_COMPILER_VERSION}) +set(CMAKE_CXX_COMPILER arm-linux-gnueabi${FLOAT_ABI_SUFFIX}-g++-${GCC_COMPILER_VERSION}) +set(ARM_LINUX_SYSROOT /usr/arm-linux-gnueabi${FLOAT_ABI_SUFFIX} CACHE PATH "ARM cross compilation system root") set(CMAKE_CXX_FLAGS "" CACHE STRING "c++ flags") set(CMAKE_C_FLAGS "" CACHE STRING "c flags") @@ -35,15 +42,13 @@ else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfpv3-d16") endif() -# can be any other plases -set(ARM_LINUX_SYSROOT /usr/arm-linux-gnueabihf CACHE PATH "ARM cross compilation system root") - set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${ARM_LINUX_SYSROOT}) if(EXISTS ${CUDA_TOOLKIT_ROOT_DIR}) set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${CUDA_TOOLKIT_ROOT_DIR}) endif() +set( CMAKE_SKIP_RPATH TRUE CACHE BOOL "If set, runtime paths are not added when using shared libraries." ) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) @@ -51,3 +56,45 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) if (CARMA) add_definitions(-DCARMA) endif() + +# macro to find programs on the host OS +macro( find_host_program ) + set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) + set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER ) + set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER ) + if( CMAKE_HOST_WIN32 ) + SET( WIN32 1 ) + SET( UNIX ) + elseif( CMAKE_HOST_APPLE ) + SET( APPLE 1 ) + SET( UNIX ) + endif() + find_program( ${ARGN} ) + SET( WIN32 ) + SET( APPLE ) + SET( UNIX 1 ) + set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) + set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) + set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) +endmacro() + +# macro to find packages on the host OS +macro( find_host_package ) + set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) + set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER ) + set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER ) + if( CMAKE_HOST_WIN32 ) + SET( WIN32 1 ) + SET( UNIX ) + elseif( CMAKE_HOST_APPLE ) + SET( APPLE 1 ) + SET( UNIX ) + endif() + find_package( ${ARGN} ) + SET( WIN32 ) + SET( APPLE ) + SET( UNIX 1 ) + set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) + set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) + set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) +endmacro() diff --git a/platforms/linux/scripts/cmake_arm_gnueabi_hardfp.sh b/platforms/linux/scripts/cmake_arm_gnueabi_hardfp.sh index 9d2732852b..f8df7859c3 100755 --- a/platforms/linux/scripts/cmake_arm_gnueabi_hardfp.sh +++ b/platforms/linux/scripts/cmake_arm_gnueabi_hardfp.sh @@ -4,5 +4,5 @@ cd `dirname $0`/.. mkdir -p build_hardfp cd build_hardfp -cmake -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=../arm-gnueabi-hardfp.toolchain.cmake $@ ../../.. +cmake -DCMAKE_TOOLCHAIN_FILE=../arm-gnueabi.toolchain.cmake $@ ../../.. diff --git a/platforms/linux/scripts/cmake_arm_gnueabi_softfp.sh b/platforms/linux/scripts/cmake_arm_gnueabi_softfp.sh index 52ff6d22cf..f4210fa829 100755 --- a/platforms/linux/scripts/cmake_arm_gnueabi_softfp.sh +++ b/platforms/linux/scripts/cmake_arm_gnueabi_softfp.sh @@ -4,5 +4,5 @@ cd `dirname $0`/.. mkdir -p build_softfp cd build_softfp -cmake -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=../arm-gnueabi-softfp.toolchain.cmake $@ ../../.. +cmake -DSOFTFP=ON -DCMAKE_TOOLCHAIN_FILE=../arm-gnueabi.toolchain.cmake $@ ../../.. diff --git a/platforms/linux/scripts/cmake_carma.sh b/platforms/linux/scripts/cmake_carma.sh index e1fba960ea..1c8db98046 100755 --- a/platforms/linux/scripts/cmake_carma.sh +++ b/platforms/linux/scripts/cmake_carma.sh @@ -1,17 +1,8 @@ #!/bin/sh -# -# Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved. -# -# NVIDIA Corporation and its licensors retain all intellectual property -# and proprietary rights in and to this software, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this software and related documentation without an express -# license agreement from NVIDIA Corporation is strictly prohibited. -# mkdir -p build_carma cd build_carma -cmake -DCARMA=ON -DWITH_TBB=ON -DBUILD_TBB=ON -DUSE_NEON=ON -DCUDA_TOOLKIT_ROOT_DIR=/usr/arm-linux-gnueabi/cuda/ \ +cmake -DSOFTFP=ON -DCARMA=ON -DWITH_TBB=ON -DBUILD_TBB=ON -DUSE_NEON=ON -DCUDA_TOOLKIT_ROOT_DIR=/usr/arm-linux-gnueabi/cuda/ \ -DCUDA_ARCH_BIN="2.1(2.0)" -DCUDA_ARCH_PTX="" -DCMAKE_SKIP_RPATH=ON -DWITH_CUDA=ON -DWITH_CUBLAS=ON \ --DCMAKE_TOOLCHAIN_FILE=../arm-gnueabi-softfp.toolchain.cmake $@ ../../.. +-DCMAKE_TOOLCHAIN_FILE=../arm-gnueabi.toolchain.cmake $@ ../../..