Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix cmake setup for yocto #290

Merged
merged 9 commits into from
Mar 23, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
142 changes: 66 additions & 76 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
cmake_minimum_required(VERSION 3.0)

project(pigpio)
project(pigpio LANGUAGES C VERSION 0.71)

set(CMAKE_C_FLAGS "-O3 -Wall -pthread")
set(PIGPIO_FLAGS "-L. -lrt")
#set(DESTDIR ${CMAKE_CURRENT_SOURCE_DIR}/build/dest)
list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake)

if(NOT DEFINED BUILD_SHARED_LIBS)
set(BUILD_SHARED_LIBS "ON")
endif(NOT DEFINED BUILD_SHARED_LIBS)
find_package(Threads REQUIRED)
find_package(RT REQUIRED)

option(BUILD_SHARED_LIBS "Create shared libraries" ON)

add_compile_options(-Wall)

# libpigpio.(so|a)
add_library(pigpio pigpio.c command.c custom.cext)
Expand All @@ -19,119 +20,108 @@ add_library(pigpiod_if pigpiod_if.c command.c)
# libpigpiod_if2.(so|a)
add_library(pigpiod_if2 pigpiod_if2.c command.c)


# x_pigpio
add_executable(x_pigpio x_pigpio.c)
add_dependencies(x_pigpio pigpio)
target_link_libraries(x_pigpio
${PIGPIO_FLAGS}
-lpigpio
)
target_link_libraries(x_pigpio pigpio RT::RT Threads::Threads)

# x_pigpiod_if
add_executable(x_pigpiod_if x_pigpiod_if.c)
add_dependencies(x_pigpiod_if pigpiod_if)
target_link_libraries(x_pigpiod_if
${PIGPIO_FLAGS}
-lpigpiod_if
)
target_link_libraries(x_pigpiod_if pigpiod_if RT::RT Threads::Threads)

# x_pigpiod_if2
add_executable(x_pigpiod_if2 x_pigpiod_if2.c)
add_dependencies(x_pigpiod_if2 pigpiod_if2)
target_link_libraries(x_pigpiod_if2
${PIGPIO_FLAGS}
-lpigpiod_if2
)
target_link_libraries(x_pigpiod_if2 pigpiod_if2 RT::RT Threads::Threads)

# pigpiod
add_executable(pigpiod pigpiod.c)
add_dependencies(pigpiod pigpio)
target_link_libraries(pigpiod
${PIGPIO_FLAGS}
-lpigpio
)
target_link_libraries(pigpiod pigpio RT::RT Threads::Threads)

# pigs
add_executable(pigs pigs.c command.c)
target_link_libraries(pigs Threads::Threads)

# pig2vcd
add_executable(pig2vcd pig2vcd.c command.c)
target_link_libraries(pig2vcd Threads::Threads)

# install
install(DIRECTORY
DESTINATION ${DESTDIR}/opt/pigpio/cgi
PATTERN ""
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE
)
# Configure and install project

include (GenerateExportHeader)
include (CMakePackageConfigHelpers)

generate_export_header(${PROJECT_NAME})

install(TARGETS pigpio pigpiod_if pigpiod_if2 pig2vcd pigpiod pigs
LIBRARY DESTINATION ${DESTDIR}/usr/local/lib
RUNTIME DESTINATION ${DESTDIR}/usr/local/bin
ARCHIVE DESTINATION ${DESTDIR}/usr/local/lib
EXPORT ${PROJECT_NAME}Targets
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION bin
INCLUDES DESTINATION include
)

write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
VERSION ${${PROJECT_NAME}_VERSION}
COMPATIBILITY AnyNewerVersion
)

export(EXPORT ${PROJECT_NAME}Targets
FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake"
NAMESPACE pigpio::
)

set(ConfigPackageLocation lib/cmake/${PROJECT_NAME})
install(EXPORT ${PROJECT_NAME}Targets
FILE
${PROJECT_NAME}Targets.cmake
NAMESPACE
pigpio::
DESTINATION
${ConfigPackageLocation}
)

install(
FILES
${CMAKE_CURRENT_LIST_DIR}/cmake/${PROJECT_NAME}Config.cmake
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
DESTINATION
${ConfigPackageLocation}
)

install(FILES pigpio.h pigpiod_if.h pigpiod_if2.h
DESTINATION ${DESTDIR}/usr/local/include
DESTINATION include
PERMISSIONS OWNER_READ OWNER_WRITE
GROUP_READ
WORLD_READ
)

file(GLOB man_1_SRC "*.1")
install(FILES ${man_1_SRC}
DESTINATION ${DESTDIR}/usr/local/man/man1
DESTINATION man/man1
PERMISSIONS OWNER_READ OWNER_WRITE
GROUP_READ
WORLD_READ
)

file(GLOB man_3_SRC "*.3")
install(FILES ${man_3_SRC}
DESTINATION ${DESTDIR}/usr/local/man/man3
DESTINATION man/man3
PERMISSIONS OWNER_READ OWNER_WRITE
GROUP_READ
WORLD_READ
)

file(GLOB setup_SRC "setup.py")
find_program(PYTHON2_FOUND python2)
if(PYTHON2_FOUND)
install(CODE "execute_process(COMMAND cd ${CMAKE_SOURCE_DIR} && python2 ${setup_SRC} install)")
endif()
find_program(PYTHON3_FOUND python3)
if(PYTHON3_FOUND)
install(CODE "execute_process(COMMAND cd ${CMAKE_SOURCE_DIR} && python3 ${setup_SRC} install)")
endif()
# Install python modules.
find_package(Python COMPONENTS Interpreter QUIET)

install(CODE "execute_process(COMMAND ldconfig)")
if(Python_FOUND)
configure_file(${CMAKE_CURRENT_LIST_DIR}/cmake/setup.py.in
${CMAKE_CURRENT_BINARY_DIR}/setup.py
)

# uninstall
if(PYTHON2_FOUND)
set(PY2_CMD python2 ${setup_SRC} install --record /tmp/pigpio > /dev/null)
set(PY2_CMD ${PY2_CMD} && xargs rm -f < /tmp/pigpio > /dev/null)
install(CODE "execute_process(COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/setup.py install)")
endif()

if(PYTHON3_FOUND)
set(PY3_CMD python3 ${setup_SRC} install --record /tmp/pigpio > /dev/null)
set(PY3_CMD ${PY3_CMD} && xargs rm -f < /tmp/pigpio > /dev/null)
endif()
# package project

add_custom_target(uninstall
COMMAND rm -f ${DESTDIR}/usr/local/include/pigpio.h
COMMAND rm -f ${DESTDIR}/usr/local/include/pigpiod_if.h
COMMAND rm -f ${DESTDIR}/usr/local/include/pigpiod_if2.h
COMMAND rm -f ${DESTDIR}/usr/local/lib/libpigpio.so
COMMAND rm -f ${DESTDIR}/usr/local/lib/libpigpiod_if.so
COMMAND rm -f ${DESTDIR}/usr/local/lib/libpigpiod_if2.so
COMMAND rm -f ${DESTDIR}/usr/local/bin/pig2vcd
COMMAND rm -f ${DESTDIR}/usr/local/bin/pigpiod
COMMAND rm -f ${DESTDIR}/usr/local/bin/pigs
COMMAND cd ${CMAKE_SOURCE_DIR} && ${PY2_CMD}
COMMAND cd ${CMAKE_SOURCE_DIR} && ${PY3_CMD}
COMMAND rm -f ${DESTDIR}/usr/local/man/man1/pig*.1
COMMAND rm -f ${DESTDIR}/usr/local/man/man3/pig*.3
COMMAND ldconfig
)
include (CPack)
39 changes: 39 additions & 0 deletions cmake/FindRT.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# FindRT.cmake - Try to find the RT library
# Once done this will define
#
# RT_FOUND - System has rt
# RT_INCLUDE_DIR - The rt include directory
# RT_LIBRARIES - The libraries needed to use rt
# RT_DEFINITIONS - Compiler switches required for using rt
#
# Also creates an import target called RT::RT

find_path (RT_INCLUDE_DIR NAMES time.h
PATHS
/usr
/usr/local
/opt
PATH_SUFFIXES
)

find_library(RT_LIBRARIES NAMES rt
PATHS
/usr
/usr/local
/opt
)

include(FindPackageHandleStandardArgs)

FIND_PACKAGE_HANDLE_STANDARD_ARGS(rt DEFAULT_MSG RT_LIBRARIES RT_INCLUDE_DIR)

mark_as_advanced(RT_INCLUDE_DIR RT_LIBRARIES)

if (NOT TARGET RT::RT)
add_library(RT::RT INTERFACE IMPORTED)

set_target_properties(RT::RT PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${RT_INCLUDE_DIR}
INTERFACE_LINK_LIBRARIES ${RT_LIBRARIES}
)
endif()
1 change: 1 addition & 0 deletions cmake/pigpioConfig.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
include (${CMAKE_CURRENT_LIST_DIR}/pigpioTargets.cmake)
24 changes: 24 additions & 0 deletions cmake/setup.py.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/usr/bin/env python

from distutils.core import setup

setup(name='pigpio',
version='1.44',
author='joan',
author_email='joan@abyz.me.uk',
maintainer='joan',
maintainer_email='joan@abyz.me.uk',
url='http://abyz.me.uk/rpi/pigpio/python.html',
description='Raspberry Pi GPIO module',
long_description='Raspberry Pi Python module to access the pigpio daemon',
download_url='http://abyz.me.uk/rpi/pigpio/pigpio.zip',
license='unlicense.org',
py_modules=['pigpio'],
keywords=['raspberrypi', 'gpio',],
classifiers=[
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 3",
],
package_dir={ '': '${CMAKE_CURRENT_SOURCE_DIR}'}
)