Skip to content

Commit 3107378

Browse files
libsocketcan auto-downloaded and configured
1 parent 91acdb0 commit 3107378

2 files changed

Lines changed: 61 additions & 19 deletions

File tree

CMakeLists.txt

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ set(CMAKE_CXX_STANDARD 17)
77
set(CMAKE_CXX_STANDARD_REQUIRED ON)
88
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
99

10-
include_directories(src/include
11-
${PROJECT_BINARY_DIR}/src/include/)
10+
include_directories(
11+
src/include
12+
${PROJECT_BINARY_DIR}/src/include/
13+
)
1214

1315
include(cmake/version.cmake)
1416

@@ -23,16 +25,17 @@ set(SOURCES
2325

2426
include(cmake/env.cmake)
2527

26-
2728
set(VENDOR_SOURCES
2829
src/main/CanVendorAnagate.cpp
2930
)
3031

3132
if (UNIX)
33+
include(cmake/libsocketcan.cmake)
34+
include_directories(${LIBSOCKETCAN_INCLUDE_DIR})
3235
list(APPEND VENDOR_SOURCES
33-
src/main/CanVendorSocketCan.cpp
34-
src/main/CanVendorSocketCanSystec.cpp
35-
)
36+
src/main/CanVendorSocketCan.cpp
37+
src/main/CanVendorSocketCanSystec.cpp
38+
)
3639
endif()
3740

3841
if (NOT DEFINED CAN_MODULE_MAIN_ONLY)
@@ -44,31 +47,36 @@ endif()
4447

4548
include(cmake/anagate.cmake)
4649

50+
4751
add_library(CanModuleMain ${SOURCES} ${VENDOR_SOURCES})
48-
target_include_directories(CanModuleMain PUBLIC ${LOGIT_INCLUDE} ${anagate_SOURCE_DIR}/)
52+
53+
target_include_directories(CanModuleMain PUBLIC
54+
${LOGIT_INCLUDE}
55+
${anagate_SOURCE_DIR}/
56+
)
57+
4958
if (UNIX)
5059
target_link_libraries(CanModuleMain PUBLIC
51-
${anagate_SOURCE_DIR}/Linux64/CentOS_9/libCANDLLStaticRelease64.a
52-
${anagate_SOURCE_DIR}/Linux64/CentOS_9/libAnaGateStaticRelease.a
53-
${anagate_SOURCE_DIR}/Linux64/CentOS_9/libAnaGateExtStaticRelease.a
54-
socketcan)
60+
${anagate_SOURCE_DIR}/Linux64/CentOS_9/libCANDLLStaticRelease64.a
61+
${anagate_SOURCE_DIR}/Linux64/CentOS_9/libAnaGateStaticRelease.a
62+
${anagate_SOURCE_DIR}/Linux64/CentOS_9/libAnaGateExtStaticRelease.a
63+
libsocketcan
64+
)
5565
else()
5666
target_link_libraries(CanModuleMain PUBLIC
57-
${anagate_SOURCE_DIR}/Win64/AnaGateCanDll64.lib)
58-
file(COPY "${anagate_SOURCE_DIR}/Win64/AnaGateCan64.dll" DESTINATION "${CMAKE_BINARY_DIR}/Release")
67+
${anagate_SOURCE_DIR}/Win64/AnaGateCanDll64.lib
68+
)
69+
file(COPY "${anagate_SOURCE_DIR}/Win64/AnaGateCan64.dll"
70+
DESTINATION "${CMAKE_BINARY_DIR}/Release")
5971
endif()
6072

61-
# Treat warnings as errors
6273
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
63-
target_compile_options(CanModuleMain PRIVATE -Wall -Wextra -Werror)
74+
target_compile_options(CanModuleMain PRIVATE -Wall -Wextra -Werror)
6475
elseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
65-
# target_compile_options(CanModuleMain PRIVATE /W4 /WX)
66-
# I need to disable that feature due to a macro redefinition
67-
# in the header of Anagate software
76+
# Disabled because of AnaGate macro redefinition issues
6877
endif()
6978

7079
if (NOT DEFINED CAN_MODULE_MAIN_ONLY)
71-
# Build Python Support and Google Unit Tests
7280
include(cmake/pybind11.cmake)
7381
include(cmake/gtest.cmake)
7482
endif()

cmake/libsocketcan.cmake

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
FetchContent_Declare(
2+
libsocketcan
3+
GIT_REPOSITORY https://github.com/linux-can/libsocketcan.git
4+
GIT_TAG v0.0.12
5+
DOWNLOAD_EXTRACT_TIMESTAMP True
6+
)
7+
8+
FetchContent_MakeAvailable(libsocketcan)
9+
10+
set(LIBSOCKETCAN_INCLUDE_DIR ${libsocketcan_SOURCE_DIR}/include)
11+
12+
set(LIBSOCKETCAN_LIB ${libsocketcan_SOURCE_DIR}/src/.libs/libsocketcan.a)
13+
14+
add_custom_command(
15+
OUTPUT ${LIBSOCKETCAN_LIB}
16+
WORKING_DIRECTORY ${libsocketcan_SOURCE_DIR}
17+
COMMAND bash autogen.sh
18+
COMMAND bash configure --enable-static --disable-shared CFLAGS=-fPIC CXXFLAGS=-fPIC
19+
COMMAND make
20+
DEPENDS ${libsocketcan_SOURCE_DIR}
21+
)
22+
23+
add_library(libsocketcan STATIC IMPORTED GLOBAL)
24+
25+
set_target_properties(libsocketcan PROPERTIES
26+
IMPORTED_LOCATION ${LIBSOCKETCAN_LIB}
27+
INTERFACE_INCLUDE_DIRECTORIES ${LIBSOCKETCAN_INCLUDE_DIR}
28+
)
29+
30+
add_custom_target(libsocketcan_build ALL
31+
DEPENDS ${LIBSOCKETCAN_LIB}
32+
)
33+
34+
add_dependencies(libsocketcan libsocketcan_build)

0 commit comments

Comments
 (0)