diff --git a/.travis.yml b/.travis.yml index de7d6f9..12f64b1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,6 +20,79 @@ matrix: compiler: clang script: ./autogen.sh && ./configure && make distcheck + - env: test="x64 4.8.4 (CMake gcc)" + os: linux + dist: trusty + compiler: gcc + before_script: + - mkdir gcc_rel && cd gcc_rel + - cmake .. + script: make + + - env: test="x64 5.0 (CMake clang)" + os: linux + dist: trusty + compiler: clang + before_script: + - mkdir clang_rel && cd clang_rel + - cmake .. + script: make + + - env: test="x64 5.0 (CMake clang - Ninja) Debug" + os: linux + dist: trusty + compiler: clang + before_script: + - mkdir clang_ninja_dbg && cd clang_ninja_dbg + - cmake .. -GNinja -DCMAKE_BUILD_TYPE=Debug + script: ninja + + - env: test="Android NDK (CMake)" + os: linux + language: android + android: + components: + - build-tools-25.0.2 + install: + - echo y | sdkmanager "ndk-bundle" + - echo y | sdkmanager "cmake;3.6.4111459" + before_script: + - export ANDROID_NDK_HOME=$ANDROID_HOME/ndk-bundle + - export ANDROID_CMAKE=$ANDROID_HOME/cmake/3.6.4111459/bin/cmake + - export ANDROID_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake + script: + - pushd . && mkdir android15_armeabiv7a_rel && cd android15_armeabiv7a_rel + - $ANDROID_CMAKE -DANDROID_PLATFORM=android-15 -DANDROID_ABI=armeabi-v7a -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=$ANDROID_TOOLCHAIN_FILE .. + - make && popd + + - pushd . && mkdir android15_x86_rel && cd android15_x86_rel + - $ANDROID_CMAKE -DANDROID_PLATFORM=android-15 -DANDROID_ABI=x86 -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=$ANDROID_TOOLCHAIN_FILE .. + - make && popd + + - pushd . && mkdir android21_arm64-v8a_rel && cd android21_arm64-v8a_rel + - $ANDROID_CMAKE -DANDROID_PLATFORM=android-21 -DANDROID_ABI=arm64-v8a -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=$ANDROID_TOOLCHAIN_FILE .. + - make && popd + + - pushd . && mkdir android21_x86_64_rel && cd android21_x86_64_rel + - $ANDROID_CMAKE -DANDROID_PLATFORM=android-21 -DANDROID_ABI=x86_64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=$ANDROID_TOOLCHAIN_FILE .. + - make && popd + + - pushd . && mkdir android15_armeabiv7a_dbg && cd android15_armeabiv7a_dbg + - $ANDROID_CMAKE -DANDROID_PLATFORM=android-15 -DANDROID_ABI=armeabi-v7a -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=$ANDROID_TOOLCHAIN_FILE .. + - make && popd + + - pushd . && mkdir android15_x86_dbg && cd android15_x86_dbg + - $ANDROID_CMAKE -DANDROID_PLATFORM=android-15 -DANDROID_ABI=x86 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=$ANDROID_TOOLCHAIN_FILE .. + - make && popd + + - pushd . && mkdir android21_arm64-v8a_dbg && cd android21_arm64-v8a_dbg + - $ANDROID_CMAKE -DANDROID_PLATFORM=android-21 -DANDROID_ABI=arm64-v8a -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=$ANDROID_TOOLCHAIN_FILE .. + - make && popd + + - pushd . && mkdir android21_x86_64_dbg && cd android21_x86_64_dbg + - $ANDROID_CMAKE -DANDROID_PLATFORM=android-21 -DANDROID_ABI=x86_64 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=$ANDROID_TOOLCHAIN_FILE .. + - make && popd + addons: apt: packages: @@ -27,5 +100,7 @@ addons: - automake - libtool - m4 + - cmake + - ninja-build sources: - ubuntu-toolchain-r-test diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..f7fbcc0 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,57 @@ +cmake_minimum_required(VERSION 3.3) + +project(can-utils LANGUAGES C) + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") + add_definitions(-D_GNU_SOURCE) +endif() + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-parentheses") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-strict-aliasing") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSO_RXQ_OVFL=40") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DPF_CAN=29") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DAF_CAN=PF_CAN") + +include_directories (.) +include_directories (./include) + +set(PROGRAMS_ISOTP isotpdump isotprecv isotpsend isotpsniffer + isotptun isotpserver isotpperf) +set(PROGRAMS_CANGW cangw) +set(PROGRAMS_SLCAN slcan_attach slcand) +set(PROGRAMS_J1939 jacd jspy jsr testj1939) +set(PROGRAMS_CANLIB cansend cangen candump canplayer canlogserver + canbusload log2long log2asc asc2log) + +set(PROGRAMS can-calc-bit-timing cansniffer bcmserver + ${PROGRAMS_CANLIB} + ${PROGRAMS_ISOTP} + ${PROGRAMS_CANGW} + ${PROGRAMS_SLCAN} + slcanpty canfdtest +) + +if(NOT ANDROID) + list(APPEND PROGRAMS ${PROGRAMS_J1939}) +endif() + +foreach(name ${PROGRAMS}) + set(SRC_DEPS) + if("${name}" STREQUAL "canbusload") + set(SRC_DEPS canframelen.c) + elseif("${name}" IN_LIST PROGRAMS_J1939) + set(SRC_DEPS libj1939.c) + elseif("${name}" IN_LIST PROGRAMS_CANLIB) + set(SRC_DEPS lib.c) + endif() + + add_executable(${name} ${name}.c ${SRC_DEPS}) + install(TARGETS ${name} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) +endforeach() + + +ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_SOURCE_DIR}/cmake/make_uninstall.cmake") diff --git a/README.md b/README.md index d1de366..6086f94 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,17 @@ subsystem (aka SocketCAN): * slcand : daemon for serial line CAN interface configuration * slcanpty : creates a pty for applications using the slcan ASCII protocol +#### CMake Project Generator +* Place your build folder anywhere, passing CMake the path. Relative or absolute. +* Some examples using a build folder under the source tree root: +* Android : cmake -DCMAKE_TOOLCHAIN_FILE=/home/joel/Android/Sdk/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-21 -DANDROID_ABI=armeabi-v7a .. && make +* Android Studio : Copy repo under your project's "app" folder, add "add_subdirectory(can-utils)" to your CMakeLists.txt file after "cmake_minimum_required()". Generating project will build Debug/Release for all supported EABI types. ie. arm64-v8a, armeabi-v7a, x86, x86_64. +* Raspberry Pi : cmake -DCMAKE_TOOLCHAIN_FILE=/home/joel/rpi/tools/build/cmake/rpi.toolchain.cmake .. && make +* Linux : cmake -GNinja .. && ninja +* Linux Eclipse Photon (Debug) : CC=clang cmake -G"Eclipse CDT4 - Unix Makefiles" ../can-utils/ -DCMAKE_BUILD_TYPE=Debug -DCMAKE_ECLIPSE_VERSION=4.8.0 +* To override the base installation directory use: CMAKE_INSTALL_PREFIX +* ie. CC=clang cmake -DCMAKE_INSTALL_PREFIX=./out .. && make install + ### Additional Information: * [SocketCAN Documentation (Linux Kernel)](https://www.kernel.org/doc/Documentation/networking/can.txt) diff --git a/cmake/make_uninstall.cmake b/cmake/make_uninstall.cmake new file mode 100644 index 0000000..451614e --- /dev/null +++ b/cmake/make_uninstall.cmake @@ -0,0 +1,19 @@ + +if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt") + message(FATAL_ERROR "Cannot find install manifest: ${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt") +endif() + +file(READ "${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt" files) +string(REGEX REPLACE "[\r\n]" ";" files "${files}") + +foreach(file ${files}) + message(STATUS "Uninstalling ${file}") + if(EXISTS "${file}") + file(REMOVE ${file}) + if (EXISTS "${file}") + message(FATAL_ERROR "Problem when removing ${file}, please check your permissions") + endif() + else() + message(STATUS "File ${file} does not exist.") + endif() +endforeach()