Merge branch 'backport/1.5.2-conan' into backport/1.5.3-conan
This commit is contained in:
commit
564f5cc887
|
|
@ -38,6 +38,7 @@ lib/libethercat.la
|
||||||
lib/libethercat.pc
|
lib/libethercat.pc
|
||||||
libtool
|
libtool
|
||||||
master/*.o.d
|
master/*.o.d
|
||||||
|
script/ethercat
|
||||||
script/ethercat.service
|
script/ethercat.service
|
||||||
script/ethercatctl
|
script/ethercatctl
|
||||||
script/init.d/ethercat
|
script/init.d/ethercat
|
||||||
|
|
@ -46,3 +47,9 @@ tool/ethercat
|
||||||
device_drivers.md
|
device_drivers.md
|
||||||
generated_table.md
|
generated_table.md
|
||||||
doxygen-output/
|
doxygen-output/
|
||||||
|
build/
|
||||||
|
build_test/
|
||||||
|
|
||||||
|
# Conan
|
||||||
|
test_package/build/
|
||||||
|
CMakeUserPresets.json
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,92 @@
|
||||||
|
cmake_minimum_required(VERSION 3.15)
|
||||||
|
|
||||||
|
project(
|
||||||
|
ethercat
|
||||||
|
VERSION 1.5.3
|
||||||
|
DESCRIPTION "IgH EtherCAT Master userspace client library"
|
||||||
|
LANGUAGES C)
|
||||||
|
|
||||||
|
# Options
|
||||||
|
option(BUILD_SHARED_LIBS "Build shared library" ON)
|
||||||
|
set(EC_MAX_NUM_DEVICES
|
||||||
|
1
|
||||||
|
CACHE STRING
|
||||||
|
"Max number of Ethernet devices per master (must match kernel module)"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Library sources
|
||||||
|
set(LIB_SOURCES
|
||||||
|
lib/common.c
|
||||||
|
lib/domain.c
|
||||||
|
lib/master.c
|
||||||
|
lib/reg_request.c
|
||||||
|
lib/sdo_request.c
|
||||||
|
lib/slave_config.c
|
||||||
|
lib/soe_request.c
|
||||||
|
lib/voe_handler.c)
|
||||||
|
|
||||||
|
set(LIB_PUBLIC_HEADERS include/ecrt.h include/ectty.h)
|
||||||
|
|
||||||
|
# Create the library
|
||||||
|
add_library(ethercat ${LIB_SOURCES})
|
||||||
|
add_library(EtherLab::ethercat ALIAS ethercat)
|
||||||
|
|
||||||
|
# Set library properties
|
||||||
|
set_target_properties(
|
||||||
|
ethercat
|
||||||
|
PROPERTIES VERSION ${PROJECT_VERSION}
|
||||||
|
SOVERSION 3
|
||||||
|
PUBLIC_HEADER "${LIB_PUBLIC_HEADERS}")
|
||||||
|
|
||||||
|
# Compile definitions These defines substitute for config.h which is generated
|
||||||
|
# by autotools and primarily used for kernel module. The userspace library only
|
||||||
|
# needs VERSION, REV, and EC_MAX_NUM_DEVICES.
|
||||||
|
target_compile_definitions(
|
||||||
|
ethercat PRIVATE ethercat_EXPORTS EC_MAX_NUM_DEVICES=${EC_MAX_NUM_DEVICES}
|
||||||
|
VERSION="${PROJECT_VERSION}" REV="")
|
||||||
|
|
||||||
|
# Create a minimal config.h that just checks if defines already exist
|
||||||
|
file(
|
||||||
|
WRITE ${CMAKE_CURRENT_BINARY_DIR}/config.h
|
||||||
|
"/* Minimal config.h for CMake build */
|
||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
#ifndef VERSION
|
||||||
|
#define VERSION \"${PROJECT_VERSION}\"
|
||||||
|
#endif
|
||||||
|
#ifndef REV
|
||||||
|
#define REV \"\"
|
||||||
|
#endif
|
||||||
|
// #ifndef EC_MAX_NUM_DEVICES
|
||||||
|
// #define EC_MAX_NUM_DEVICES 1
|
||||||
|
// #endif
|
||||||
|
#endif
|
||||||
|
")
|
||||||
|
|
||||||
|
# Include directories
|
||||||
|
target_include_directories(
|
||||||
|
ethercat
|
||||||
|
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/lib
|
||||||
|
# client lib still needs some header from kernel module
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/master)
|
||||||
|
|
||||||
|
# Compile options
|
||||||
|
target_compile_options(ethercat PRIVATE -fno-strict-aliasing -Wall
|
||||||
|
-Wmissing-prototypes)
|
||||||
|
|
||||||
|
# Link libraries
|
||||||
|
if(UNIX)
|
||||||
|
target_link_libraries(ethercat PRIVATE rt)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
install(
|
||||||
|
TARGETS ethercat
|
||||||
|
EXPORT ethercatTargets
|
||||||
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
|
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||||
|
|
@ -0,0 +1,99 @@
|
||||||
|
from conan import ConanFile
|
||||||
|
from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout
|
||||||
|
from conan.tools.files import copy
|
||||||
|
from conan.errors import ConanInvalidConfiguration
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
class IgHEtherCATConan(ConanFile):
|
||||||
|
name = "igh-ethercat"
|
||||||
|
version = "1.5.3"
|
||||||
|
license = "LGPL-2.1-only"
|
||||||
|
author = "Florian Pose <fp@igh.de>"
|
||||||
|
url = "https://gitlab.com/etherlab.org/ethercat"
|
||||||
|
description = "IgH EtherCAT Master userspace client library"
|
||||||
|
topics = ("ethercat", "industrial", "automation", "fieldbus", "realtime")
|
||||||
|
settings = "os", "compiler", "build_type", "arch"
|
||||||
|
options = {
|
||||||
|
"shared": [True, False],
|
||||||
|
"fPIC": [True, False],
|
||||||
|
"max_num_devices": ["ANY"],
|
||||||
|
}
|
||||||
|
default_options = {
|
||||||
|
"shared": True,
|
||||||
|
"fPIC": True,
|
||||||
|
"max_num_devices": 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
exports_sources = (
|
||||||
|
"CMakeLists.txt",
|
||||||
|
"include/*",
|
||||||
|
"lib/*",
|
||||||
|
"master/globals.h",
|
||||||
|
"master/ioctl.h",
|
||||||
|
"globals.h",
|
||||||
|
"COPYING",
|
||||||
|
"COPYING.LESSER",
|
||||||
|
)
|
||||||
|
|
||||||
|
def validate(self):
|
||||||
|
if self.settings.os != "Linux":
|
||||||
|
raise ConanInvalidConfiguration("IgH EtherCAT Master is only supported on Linux")
|
||||||
|
|
||||||
|
# Validate max_num_devices is a positive integer
|
||||||
|
try:
|
||||||
|
max_devices = int(self.options.max_num_devices)
|
||||||
|
if max_devices < 1:
|
||||||
|
raise ConanInvalidConfiguration("max_num_devices must be >= 1")
|
||||||
|
except ValueError:
|
||||||
|
raise ConanInvalidConfiguration("max_num_devices must be an integer")
|
||||||
|
|
||||||
|
def config_options(self):
|
||||||
|
if self.settings.os == "Windows":
|
||||||
|
del self.options.fPIC
|
||||||
|
|
||||||
|
def configure(self):
|
||||||
|
# This is a C library
|
||||||
|
self.settings.rm_safe("compiler.libcxx")
|
||||||
|
self.settings.rm_safe("compiler.cppstd")
|
||||||
|
|
||||||
|
def requirements(self):
|
||||||
|
self.build_requires("cmake/[>=3.15]")
|
||||||
|
|
||||||
|
def layout(self):
|
||||||
|
cmake_layout(self, src_folder=".")
|
||||||
|
|
||||||
|
def generate(self):
|
||||||
|
tc = CMakeToolchain(self)
|
||||||
|
tc.variables["BUILD_SHARED_LIBS"] = self.options.shared
|
||||||
|
tc.variables["EC_MAX_NUM_DEVICES"] = str(self.options.max_num_devices)
|
||||||
|
tc.generate()
|
||||||
|
|
||||||
|
def build(self):
|
||||||
|
cmake = CMake(self)
|
||||||
|
cmake.configure()
|
||||||
|
cmake.build()
|
||||||
|
|
||||||
|
def package(self):
|
||||||
|
copy(
|
||||||
|
self,
|
||||||
|
"COPYING.LESSER",
|
||||||
|
src=self.source_folder,
|
||||||
|
dst=os.path.join(self.package_folder, "licenses"),
|
||||||
|
)
|
||||||
|
copy(
|
||||||
|
self,
|
||||||
|
"COPYING",
|
||||||
|
src=self.source_folder,
|
||||||
|
dst=os.path.join(self.package_folder, "licenses"),
|
||||||
|
)
|
||||||
|
cmake = CMake(self)
|
||||||
|
cmake.install()
|
||||||
|
|
||||||
|
def package_info(self):
|
||||||
|
self.cpp_info.libs = ["ethercat"]
|
||||||
|
self.cpp_info.set_property("cmake_file_name", "ethercat")
|
||||||
|
self.cpp_info.set_property("cmake_target_name", "EtherLab::ethercat")
|
||||||
|
self.cpp_info.set_property("pkg_config_name", "libethercat")
|
||||||
|
if self.settings.os == "Linux":
|
||||||
|
self.cpp_info.system_libs = ["rt", "pthread"]
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
cmake_minimum_required(VERSION 3.15)
|
||||||
|
project(test_package C)
|
||||||
|
|
||||||
|
find_package(ethercat REQUIRED CONFIG)
|
||||||
|
|
||||||
|
add_executable(test_package test_package.c)
|
||||||
|
target_link_libraries(test_package EtherLab::ethercat)
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
from conan import ConanFile
|
||||||
|
from conan.tools.cmake import CMake, cmake_layout
|
||||||
|
from conan.tools.build import can_run
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
class IgHEtherCATTestConan(ConanFile):
|
||||||
|
settings = "os", "compiler", "build_type", "arch"
|
||||||
|
generators = "CMakeToolchain", "CMakeDeps"
|
||||||
|
|
||||||
|
def requirements(self):
|
||||||
|
self.requires(self.tested_reference_str)
|
||||||
|
|
||||||
|
def build(self):
|
||||||
|
cmake = CMake(self)
|
||||||
|
cmake.configure()
|
||||||
|
cmake.build()
|
||||||
|
|
||||||
|
def layout(self):
|
||||||
|
cmake_layout(self)
|
||||||
|
|
||||||
|
def test(self):
|
||||||
|
if can_run(self):
|
||||||
|
cmd = os.path.join(self.cpp.build.bindir, "test_package")
|
||||||
|
self.run(cmd, env="conanrun")
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
#include <ecrt.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
printf("IgH EtherCAT Master Library - Conan Package Test\n");
|
||||||
|
printf("ECRT Version: %d.%d\n", ECRT_VER_MAJOR, ECRT_VER_MINOR);
|
||||||
|
printf("Version magic: 0x%04X\n", ecrt_version_magic());
|
||||||
|
// EC_IOCTL_VERSION_MAGIC is defined in internal header
|
||||||
|
|
||||||
|
/* Verify that the version magic matches what we expect */
|
||||||
|
if (ecrt_version_magic() != ECRT_VERSION_MAGIC) {
|
||||||
|
fprintf(stderr, "ERROR: Version magic mismatch!\n");
|
||||||
|
fprintf(stderr, " Expected: 0x%04X\n", ECRT_VERSION_MAGIC);
|
||||||
|
fprintf(stderr, " Got: 0x%04X\n", ecrt_version_magic());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Package test passed!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue