CMake first pass (#90)

* CMake first pass

* canbusload dep fix

* Add Eclipse Debug, and Android Studio generation examples

* travis additions

* Update .travis.yml

CMAKE_BUILT_TYPE typo fix

* add android ndk variants(less mips)
pull/93/merge
Joel Winarske 2018-08-17 00:50:30 -07:00 committed by Marc Kleine-Budde
parent 47f2e7a180
commit 8a3e0453aa
4 changed files with 162 additions and 0 deletions

View File

@ -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

57
CMakeLists.txt 100644
View File

@ -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")

View File

@ -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)

View File

@ -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()