diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c73566..f9a7da7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,6 +21,18 @@ option(ENABLE_WERROR "Treat all compiler warnings as errors" OFF) option(ENABLE_GPS "Enable GPS support" OFF) option(BUILD_SHARED_LIBS "Build shared libraries" ON) +# Options for controlling targets. These groups correspond to the README. +option(ENABLE_BASIC_TOOLS "Build basic tools" ON) +option(ENABLE_IP_SERVER "Build tools providing CAN access via IP sockets" ON) +option(ENABLE_GATEWAY "Build in-kernel gateway configuration tools" ON) +option(ENABLE_MEASUREMENT "Build measurement tools" ON) +option(ENABLE_ISOTP "Build isotp tools" ON) +option(ENABLE_J1939 "Build J1939 tools" ON) +option(ENABLE_ISOBUSFS "Build ISOBUS tools" ON) +option(ENABLE_LOG_FILE "Build log file converter tools" ON) +option(ENABLE_SLCAN "Build slcan tools" ON) +option(ENABLE_MCP251XFD "Build MCP251XFD tools" ON) + find_package(PkgConfig REQUIRED) if(ENABLE_GPS) pkg_check_modules(GPS REQUIRED libgps) @@ -48,108 +60,167 @@ include_directories(./include) check_function_exists(fork HAVE_FORK) -set(PROGRAMS_CANLIB - asc2log - canbusload - candump - cangen - canplayer - cansend - cansequence - log2asc - log2long - slcanpty -) +if(NOT ANDROID) + # Not supported on Android. + set(ENABLE_J1939 OFF) + set(ENABLE_ISOBUSFS OFF) +endif() -if(HAVE_FORK) +# List of all programs to be built. +set(PROGRAMS) +# List of programs to link against can. +set(PROGRAMS_CANLIB) +# List of programs to link against j1939 and can. +set(PROGRAMS_J1939) +# List of programs to link against isobusfs. +set(PROGRAMS_ISOBUSFS) + +if(ENABLE_BASIC_TOOLS) + list(APPEND PROGRAMS cansniffer) + list(APPEND PROGRAMS_CANLIB + candump + canplayer + cansend + cangen + cansequence + ) +endif() + +if(ENABLE_IP_SERVER AND HAVE_FORK) + list(APPEND PROGRAMS bcmserver) list(APPEND PROGRAMS_CANLIB canlogserver) endif() -set(PROGRAMS_J1939 - j1939acd - j1939cat - j1939spy - j1939sr - testj1939 -) - -set(PROGRAMS_J1939_TIMEDATE - j1939-timedate-srv - j1939-timedate-cli -) - -set(PROGRAMS_J1939_VEHICLE_POSITION - j1939-vehicle-position-srv -) - -set(PROGRAMS_ISOBUSFS - isobusfs-srv - isobusfs-cli -) - -set(PROGRAMS - ${PROGRAMS_CANLIB} - canerrsim - canfdtest - cangw - cansniffer - isotpdump - isotpperf - isotprecv - isotpsend - isotpsniffer - isotptun - slcan_attach - slcand -) - -if(HAVE_FORK) - list(APPEND PROGRAMS bcmserver) - list(APPEND PROGRAMS isotpserver) +if(ENABLE_GATEWAY) + list(APPEND PROGRAMS cangw) endif() -add_executable(can-calc-bit-timing - calc-bit-timing/can-calc-bit-timing.c -) +if(ENABLE_MEASUREMENT) + list(APPEND PROGRAMS + can-calc-bit-timing + canfdtest + canerrsim + ) + list(APPEND PROGRAMS_CANLIB canbusload) +endif() -add_executable(mcp251xfd-dump - mcp251xfd/mcp251xfd-dev-coredump.c - mcp251xfd/mcp251xfd-dump.c - mcp251xfd/mcp251xfd-main.c - mcp251xfd/mcp251xfd-regmap.c -) - -if(NOT ANDROID) - list(APPEND PROGRAMS ${PROGRAMS_J1939}) - - add_library(j1939 STATIC - libj1939.c +if(ENABLE_ISOTP) + list(APPEND PROGRAMS + isotpdump + isotpperf + isotprecv + isotpsend + isotpsniffer + isotptun ) + if(HAVE_FORK) + list(APPEND PROGRAMS isotpserver) + endif() +endif() + +if(ENABLE_J1939) + list(APPEND PROGRAMS_J1939 + j1939acd + j1939cat + j1939spy + j1939sr + testj1939 + j1939-timedate-srv + j1939-timedate-cli + ) + if(ENABLE_GPS) + list(APPEND PROGRAMS_J1939 j1939-vehicle-position-srv) + endif() +endif() + +if(ENABLE_ISOBUSFS) + list(APPEND PROGRAMS_ISOBUSFS + isobusfs-srv + isobusfs-cli + ) +endif() + +if(ENABLE_LOG_FILE) + list(APPEND PROGRAMS_CANLIB + asc2log + log2asc + log2long + ) +endif() + +if(ENABLE_SLCAN) + list(APPEND PROGRAMS + slcan_attach + slcand + ) + list(APPEND PROGRAMS_CANLIB slcanpty) +endif() + +if(ENABLE_MCP251XFD) + list(APPEND PROGRAMS mcp251xfd-dump) +endif() + +list(APPEND PROGRAMS + ${PROGRAMS_CANLIB} + ${PROGRAMS_J1939} + ${PROGRAMS_ISOBUSFS} +) + +add_library(can STATIC EXCLUDE_FROM_ALL + lib.c + canframelen.c +) + +if(ENABLE_J1939) + add_library(j1939 STATIC EXCLUDE_FROM_ALL + libj1939.c + ) target_link_libraries(j1939 PRIVATE can ) +endif() - add_library(isobusfs +if(ENABLE_ISOBUSFS) + add_library(isobusfs EXCLUDE_FROM_ALL isobusfs/isobusfs_cmn.c isobusfs/isobusfs_cmn_dh.c ) - set(PUBLIC_HEADER_ISOBUSFS isobusfs/isobusfs_cmn.h isobusfs/isobusfs_cmn_cm.h ) - set_target_properties(isobusfs PROPERTIES PUBLIC_HEADER "${PUBLIC_HEADER_ISOBUSFS}" SOVERSION 0 ) - install(TARGETS isobusfs LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) +endif() +if(can-calc-bit-timing IN_LIST PROGRAMS) + list(REMOVE_ITEM PROGRAMS can-calc-bit-timing) + add_executable(can-calc-bit-timing + calc-bit-timing/can-calc-bit-timing.c + ) + install(TARGETS can-calc-bit-timing DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() + +if(mcp251xfd-dump IN_LIST PROGRAMS) + list(REMOVE_ITEM PROGRAMS mcp251xfd-dump) + add_executable(mcp251xfd-dump + mcp251xfd/mcp251xfd-dev-coredump.c + mcp251xfd/mcp251xfd-dump.c + mcp251xfd/mcp251xfd-main.c + mcp251xfd/mcp251xfd-regmap.c + ) + install(TARGETS mcp251xfd-dump DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() + +if(isobusfs-cli IN_LIST PROGRAMS) + list(REMOVE_ITEM PROGRAMS isobusfs-cli) add_executable(isobusfs-cli isobusfs/isobusfs_cli.c isobusfs/isobusfs_cli_cm.c @@ -158,11 +229,14 @@ if(NOT ANDROID) isobusfs/isobusfs_cli_selftests.c isobusfs/isobusfs_cli_int.c ) - target_link_libraries(isobusfs-cli PRIVATE isobusfs can j1939 ) + install(TARGETS isobusfs-cli DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() +if(isobusfs-srv IN_LIST PROGRAMS) + list(REMOVE_ITEM PROGRAMS isobusfs-srv) add_executable(isobusfs-srv isobusfs/isobusfs_srv.c isobusfs/isobusfs_srv_cm.c @@ -172,65 +246,43 @@ if(NOT ANDROID) isobusfs/isobusfs_srv_fh.c isobusfs/isobusfs_srv_vh.c ) - target_link_libraries(isobusfs-srv PRIVATE isobusfs can j1939 ) + install(TARGETS isobusfs-srv DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() - install(TARGETS - isobusfs-cli - isobusfs-srv - DESTINATION ${CMAKE_INSTALL_BINDIR}) - - set(PUBLIC_HEADER_j1939_TIMEDATE - j1939_timedate/j1939_timedate_cmn.h - ) - +if(j1939-timedate-cli IN_LIST PROGRAMS) + list(REMOVE_ITEM PROGRAMS j1939-timedate-cli) add_executable(j1939-timedate-cli j1939_timedate/j1939_timedate_cli.c ) - target_link_libraries(j1939-timedate-cli PRIVATE can j1939 ) + install(TARGETS j1939-timedate-cli DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() +if(j1939-timedate-srv IN_LIST PROGRAMS) add_executable(j1939-timedate-srv j1939_timedate/j1939_timedate_srv.c ) - target_link_libraries(j1939-timedate-srv PRIVATE can j1939 ) - - install(TARGETS - j1939-timedate-cli - j1939-timedate-srv - DESTINATION ${CMAKE_INSTALL_BINDIR}) - - if(ENABLE_GPS) - set(PUBLIC_HEADER_J1939_VEHICLE_POSITION - j1939_vehicle_position/j1939_vehicle_position_cmn.h - ) - - add_executable(j1939-vehicle-position-srv - j1939_vehicle_position/j1939_vehicle_position_srv.c - ) - - target_link_libraries(j1939-vehicle-position-srv - PRIVATE can j1939 ${GPS_LIBRARIES} - ) - - install(TARGETS - j1939-vehicle-position-srv - DESTINATION ${CMAKE_INSTALL_BINDIR}) - endif() - + install(TARGETS j1939-timedate-srv DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() -add_library(can STATIC - lib.c - canframelen.c -) +if(j1939-vehicle-position-srv IN_LIST PROGRAMS) + list(REMOVE_ITEM PROGRAMS j1939-vehicle-position-srv) + add_executable(j1939-vehicle-position-srv + j1939_vehicle_position/j1939_vehicle_position_srv.c + ) + target_link_libraries(j1939-vehicle-position-srv + PRIVATE can j1939 ${GPS_LIBRARIES} + ) + install(TARGETS j1939-vehicle-position-srv DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() foreach(name ${PROGRAMS}) add_executable(${name} ${name}.c) @@ -243,17 +295,15 @@ foreach(name ${PROGRAMS}) target_link_libraries(${name} PRIVATE can ) + elseif("${name}" IN_LIST PROGRAMS_ISOBUSFS) + target_link_libraries(${name} + PRIVATE isobusfs can j1939 + ) endif() install(TARGETS ${name} DESTINATION ${CMAKE_INSTALL_BINDIR}) endforeach() -install(TARGETS - can-calc-bit-timing - mcp251xfd-dump - DESTINATION ${CMAKE_INSTALL_BINDIR} -) - add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_SOURCE_DIR}/cmake/make_uninstall.cmake" COMMENT "Add uninstall target" diff --git a/README.md b/README.md index 83bd3a5..49fa367 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,10 @@ subsystem (aka SocketCAN): Follow the link to see examples on how this tools can be used: [Kickstart guide to can-j1939 on linux](https://github.com/linux-can/can-utils/blob/master/can-j1939-kickstart.md) +#### ISOBus File server tools +* isobusfs-cli : ISOBus file client +* isobusfs-srv : ISOBus file server + #### Log file converters * asc2log : convert ASC logfile to compact CAN frame logfile * log2asc : convert compact CAN frame logfile to ASC logfile