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 lots of build problems on macOS #65

Merged
merged 3 commits into from
Dec 12, 2024
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
12 changes: 6 additions & 6 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
cmake_minimum_required(VERSION 3.16)
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
# set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE)
project(blisp C)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_C_STANDARD 11)
Expand Down Expand Up @@ -42,11 +43,10 @@ set_target_properties(libblisp_static PROPERTIES
OUTPUT_NAME "blisp")

if(BLISP_USE_SYSTEM_LIBRARIES)
find_package(PkgConfig)
pkg_search_module(LIBSERIALPORT REQUIRED libserialport)
target_link_libraries(libblisp PUBLIC ${LIBSERIALPORT_LIBRARIES})
target_link_libraries(libblisp_static PUBLIC ${LIBSERIALPORT_LIBRARIES})
target_include_directories(libblisp_obj PUBLIC ${LIBSERIALPORT_INCLUDE_DIRS})
find_package(Libserialport REQUIRED)
target_link_libraries(libblisp PUBLIC Libserialport::Libserialport)
target_link_libraries(libblisp_static PUBLIC Libserialport::Libserialport)
target_include_directories(libblisp_obj PUBLIC ${Libserialport_INCLUDE_DIRS})
else()
if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
target_sources(libblisp_obj PRIVATE
Expand Down
79 changes: 79 additions & 0 deletions cmake/FindLibserialport.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# SPDX-License-Identifier: MIT

#[=======================================================================[.rst:
FindLibserialport
-------

Finds the sigrok serial port library (``libserialport``)
Copy link
Collaborator

@robertlipe robertlipe Mar 3, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tying it to sigrok seems super weird.
It's not like this library is optional, IIRC. You either have it correctly installed or you don't, so adding layers to go hunt for it seems a distraction.

Copy link
Contributor Author

@JetbladeDevsStuff JetbladeDevsStuff Mar 3, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Agree, wasn't sure if there were any other libserialport libraries since it felt like a pretty common name.
  2. I don't really get what you're trying to say. In CMake, using a find script is the normal way to link to other libraries. With a find script, standard errors are given when the library isn't found, the call site is much cleaner, and this script can be reused in other projects.


Imported Targets
^^^^^^^^^^^^^^^^

This module defines the following imported targets, if found:

``Libserialport::Libserialport``
The serialport library

Result Variables
^^^^^^^^^^^^^^^^

This module will define the following variables:

``Libserialport_FOUND``
True if the system has the serialport library.
``Libserialport_VERSION``
The version of the serialport library which was found.
``Libserialport_INCLUDE_DIRS``
Include directories needed to use ``libserialport``.
``Libserialport_LIBRARIES``
Libraries needed to link to ``libserialport``.

Cache Variables
^^^^^^^^^^^^^^^

The following cache variables may also be set:

``Libserialport_INCLUDE_DIR``
The directory containing ``libserialport.h``.
``Libserialport_LIBRARY``
The path to the ``libserialport`` library.

#]=======================================================================]

find_package(PkgConfig)
pkg_check_modules(PC_Libserialport QUIET libserialport)

find_path(Libserialport_INCLUDE_DIR
NAMES libserialport.h
PATHS "${PC_Libserialport_INCLUDE_DIRS}"
)
find_library(Libserialport_LIBRARY
NAMES serialport
HINTS "${PC_Libserialport_LIBRARY_DIRS}"
)

set(Foo_VERSION ${PC_Foo_VERSION})

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Libserialport
FOUND_VAR Libserialport_FOUND
REQUIRED_VARS
Libserialport_LIBRARY
Libserialport_INCLUDE_DIR
VERSION_VAR Libserialport_VERSION
)

if(Libserialport_FOUND)
set(Libserialport_LIBRARIES ${Libserialport_LIBRARY})
set(Libserialport_INCLUDE_DIRS ${Libserialport_INCLUDE_DIR})
set(Libserialport_DEFINITIONS ${PC_Liberialport_CFLAGS_OTHER})
endif()

if(Libserialport_FOUND AND NOT TARGET Libserialport::Libserialport)
add_library(Libserialport::Libserialport UNKNOWN IMPORTED)
set_target_properties(Libserialport::Libserialport PROPERTIES
IMPORTED_LOCATION "${Libserialport_LIBRARY}"
INTERFACE_COMPILE_OPTIONS "${PC_Libserialport_CFLAGS_OTHER}"
INTERFACE_INCLUDE_DIRECTORIES "${Libserialport_INCLUDE_DIR}"
)
endif()
2 changes: 1 addition & 1 deletion tools/blisp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ target_include_directories(blisp PRIVATE
"${CMAKE_SOURCE_DIR}/include")

target_link_libraries(blisp PRIVATE
argtable3
argtable3::argtable3
libblisp_static file_parsers)

if (WIN32)
Expand Down
Loading