|
| 1 | +cmake_minimum_required(VERSION 3.5) |
| 2 | +project(libethercat VERSION 0.4.0) |
| 3 | + |
| 4 | +set(ECAT_DEVICE "sock_raw" CACHE STRING "EtherCAT device layer") |
| 5 | + |
| 6 | +include(CheckIncludeFiles) |
| 7 | +include(CheckSymbolExists) |
| 8 | +include(CheckLibraryExists) |
| 9 | +include(ExternalProject) |
| 10 | + |
| 11 | +set(CMAKE_CXX_STANDARD 11) |
| 12 | +set(CMAKE_C_STANDARD 11) |
| 13 | + |
| 14 | +set(LIBETHERCAT_STDC_HEADERS 1) |
| 15 | +set(LIBETHERCAT_PACKAGE_VERSION "${CMAKE_PROJECT_VERSION}") |
| 16 | +set(LIBETHERCAT_VERSION "${CMAKE_PROJECT_VERSION}") |
| 17 | +set(LIBETHERCAT_PACKAGE_URL "${CMAKE_PROJECT_HOMEPAGE_URL}") |
| 18 | +set(LIBETHERCAT_PACKAGE "${CMAKE_PROJECT_NAME}") |
| 19 | +set(LIBETHERCAT_PACKAGE_NAME "${CMAKE_PROJECT_NAME}") |
| 20 | +set(LIBETHERCAT_PACKAGE_TARNAME "${CMAKE_PROJECT_NAME}") |
| 21 | +set(LIBETHERCAT_PACKAGE_STRING "${CMAKE_PROJECT_NAME} ${CMAKE_PROJECT_VERSION}") |
| 22 | + |
| 23 | +check_include_files("arpa/inet.h" LIBETHERCAT_HAVE_ARPA_INET_H) |
| 24 | +check_symbol_exists("clock_gettime" "time.h" LIBETHERCAT_HAVE_CLOCK_GETTIME) |
| 25 | +check_include_files("dlfcn.h" LIBETHERCAT_HAVE_DLFCN_H) |
| 26 | +check_include_files("fcntl.h" LIBETHERCAT_HAVE_FCNTL_H) |
| 27 | +check_include_files("inttypes.h" LIBETHERCAT_HAVE_INTTYPES_H) |
| 28 | +find_library(HAS_RT_RAW rt) |
| 29 | +if(HAS_RT_RAW) |
| 30 | + SET(LIBETHERCAT_HAVE_LIBRT 1) |
| 31 | +endif() |
| 32 | +check_include_files("limits.h" LIBETHERCAT_HAVE_LIMITS_H) |
| 33 | +check_symbol_exists("malloc" "stdlib.h" LIBETHERCAT_HAVE_MALLOC) |
| 34 | +check_include_files("memory.h" LIBETHERCAT_HAVE_MEMORY_H) |
| 35 | +check_symbol_exists("memset" "string.h" LIBETHERCAT_HAVE_MALLOC) |
| 36 | +check_include_files("net/bpf.h" LIBETHERCAT_HAVE_NET_BPF_H) |
| 37 | +check_include_files("net/if.h" LIBETHERCAT_HAVE_NET_IF_H) |
| 38 | +check_include_files("pthread.h" LIBETHERCAT_HAVE_PTHREAD) |
| 39 | +list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE) |
| 40 | +check_symbol_exists("pthread_setaffinity_np" "pthread.h" LIBETHERCAT_HAVE_PTHREAD_SETAFFINITY_NP) |
| 41 | +check_symbol_exists("realloc" "stdlib.h" LIBETHERCAT_HAVE_REALLOC) |
| 42 | +check_symbol_exists("socket" "sys/socket.h" LIBETHERCAT_HAVE_SOCKET) |
| 43 | +check_include_files("stdint.h" LIBETHERCAT_HAVE_STDINT_H) |
| 44 | +check_include_files("stdlib.h" LIBETHERCAT_HAVE_STDLIB_H) |
| 45 | +check_symbol_exists("strdup" "string.h" LIBETHERCAT_HAVE_STRDUP) |
| 46 | +check_symbol_exists("strerror" "string.h" LIBETHERCAT_HAVE_STRERROR) |
| 47 | +check_include_files("strings.h" LIBETHERCAT_HAVE_STRINGS_H) |
| 48 | +check_include_files("string.h" LIBETHERCAT_HAVE_STRING_H) |
| 49 | +check_symbol_exists("strndup" "string.h" LIBETHERCAT_HAVE_STRNDUP) |
| 50 | +check_include_files("sys/ioctl.h" LIBETHERCAT_HAVE_SYS_IOCTL_H) |
| 51 | +check_include_files("sys/socket.h" LIBETHERCAT_HAVE_SYS_SOCKET_H) |
| 52 | +check_include_files("sys/stat.h" LIBETHERCAT_HAVE_SYS_STAT_H) |
| 53 | +check_include_files("sys/time.h" LIBETHERCAT_HAVE_SYS_TIME_H) |
| 54 | +check_include_files("sys/types.h" LIBETHERCAT_HAVE_SYS_TYPES_H) |
| 55 | +check_include_files("unistd.h" LIBETHERCAT_HAVE_UNISTD_H) |
| 56 | + |
| 57 | +find_package(libosal REQUIRED) |
| 58 | +find_package (Threads REQUIRED) |
| 59 | + |
| 60 | +include_directories(${libosal_INCLUDE_DIRS} include) |
| 61 | +link_directories(${libosal_LIB_DIR}) |
| 62 | + |
| 63 | +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/include/libethercat/config.h) |
| 64 | + |
| 65 | + |
| 66 | +set(SRC_ETHERCAT |
| 67 | + src/async_loop.c |
| 68 | + src/coe.c |
| 69 | + src/coe_master.c |
| 70 | + src/datagram.c |
| 71 | + src/dc.c |
| 72 | + src/ec.c |
| 73 | + src/eeprom.c |
| 74 | + src/eoe.c |
| 75 | + src/foe.c |
| 76 | + src/hw.c |
| 77 | + src/idx.c |
| 78 | + src/mbx.c |
| 79 | + src/mii.c |
| 80 | + src/pool.c |
| 81 | + src/slave.c |
| 82 | + src/soe.c) |
| 83 | + |
| 84 | +if (${ECAT_DEVICE} STREQUAL "sock_raw") |
| 85 | + set(SRC_HW_LAYER src/hw_sock_raw.c) |
| 86 | + add_compile_definitions(LIBETHERCAT_BUILD_DEVICE_SOCK_RAW_LEGACY) |
| 87 | +elseif (${ECAT_DEVICE} STREQUAL "sock_raw_mmaped") |
| 88 | + set(SRC_HW_LAYER src/hw_file.c) |
| 89 | + add_compile_definitions(LIBETHERCAT_BUILD_DEVICE_SOCK_RAW_MMAPED) |
| 90 | +elseif (${ECAT_DEVICE} STREQUAL "file") |
| 91 | + set(SRC_HW_LAYER src/hw_file.c) |
| 92 | + add_compile_definitions(LIBETHERCAT_BUILD_DEVICE_FILE) |
| 93 | +elseif (${ECAT_DEVICE} STREQUAL "pikeos") |
| 94 | + set(SRC_HW_LAYER src/hw_pikeos.c) |
| 95 | + add_compile_definitions(LIBETHERCAT_BUILD_DEVICE_PIKEOS) |
| 96 | +elseif (${ECAT_DEVICE} STREQUAL "bpf") |
| 97 | + set(SRC_HW_LAYER src/hw_bpf.c) |
| 98 | + add_compile_definitions(LIBETHERCAT_BUILD_DEVICE_BPD) |
| 99 | +endif() |
| 100 | + |
| 101 | +# LIBS |
| 102 | +add_library(ethercat ${SRC_ETHERCAT} ${SRC_HW_LAYER}) |
| 103 | +target_link_libraries (ethercat ${CMAKE_THREAD_LIBS_INIT} ${libosal_LIBS}) |
| 104 | + |
| 105 | +# TOOLS |
| 106 | +add_executable(eepromtool tools/eepromtool/eepromtool.c) |
| 107 | +target_link_libraries (eepromtool ethercat ${libosal_LIBS}) |
| 108 | + |
| 109 | +add_executable(ethercatdiag tools/ethercatdiag/ethercatdiag.c) |
| 110 | +target_link_libraries (ethercatdiag ethercat ${libosal_LIBS}) |
| 111 | + |
| 112 | +add_executable(example_with_dc tools/example_with_dc/example_with_dc.c) |
| 113 | +target_link_libraries (example_with_dc ethercat ${libosal_LIBS} m) |
| 114 | + |
0 commit comments