Compare commits

...

14 Commits

Author SHA1 Message Date
Berk D. Demir
ab304e6915
Merge e959756f5a into bfe472e71c 2024-12-13 02:49:42 +03:00
Ben V. Brown
bfe472e71c
Merge pull request #65 from JetbladeDevsStuff/fix-build-macos
Fix lots of build problems on macOS
2024-12-12 13:05:16 +11:00
Terence Noone
2268e535d4 Fix linking with argtable3
CMake interpreted `argtable3` to mean add `-largtable3` rather than to
use the imported argtable3 target. This worked when using the bundled
library, but broke with native libraries.
2024-12-11 20:54:11 -05:00
Terence Noone
cb32800728 Do not build for both arm64 and x86_84 on macOS.
While this might work when using bundled libraries, this breaks with
system libraries as they are all compiled for arm64. Also, why would you
need to compile an x86_64 version on arm64, and vise versa.
2024-12-11 20:54:11 -05:00
Terence Noone
da463d79fd Use new find module for libserialport
This new find module will replace the old logic used to locate a native
copy of libserialport. THe old code didn't work on macOS, and was pretty
messy.
2024-12-11 20:54:11 -05:00
Ben V. Brown
1fb33da291
Merge pull request #60 from barracuda156/darwin
parse_file.h: include sys/types.h
2024-12-11 14:33:11 +11:00
Ben V. Brown
17f6234a4a
Merge pull request #62 from barracuda156/static_assert
blisp_struct.h: use _Static_assert for pre-C23 compatibility
2024-12-11 14:32:28 +11:00
Ben V. Brown
108c387d31
Merge pull request #71 from ia/checkout-v4
* workflows/build.yml: update checkout to v4 since v3 is deprecated

* workflows/build.yml: update upload-artifact to v4 since v3 is deprecated

* workflows/build.yml: remove extra space in the end of the lines
2024-12-11 14:25:01 +11:00
Ivan Zorin
ebae66c392 workflows/build.yml: remove extra space in the end of the lines 2024-12-03 02:32:38 +03:00
Ivan Zorin
c2fc20452c workflows/build.yml: update upload-artifact to v4 since v3 is deprecated 2024-12-03 02:31:26 +03:00
Ivan Zorin
39388c6b2c workflows/build.yml: update checkout to v4 since v3 is deprecated 2024-12-03 02:10:27 +03:00
Sergey Fedorov
be86373d37 blisp_struct.h: define static_assert when undefined to _Static_assert 2024-01-06 16:03:05 +08:00
Sergey Fedorov
81faf3f213 parse_file.h: include sys/types.h
Fixes: https://github.com/pine64/blisp/issues/59
2024-01-05 22:23:53 +08:00
Berk D. Demir
e959756f5a Refactor to address compiler warnings
- Unused function warnings
Move function definitions in include/blisp_util.h to lib/blisp_util.c.
Defining them as static leads to internal linkage, accessible in that
translation unit, hence the warning. Their references are to be handled
in other translation units, so they shouldn't be static.

- Unused function parameters
Use C attribute `[[maybe_unused]]` (introduced in C23) to suppress
unused parameter warnings.

  - `blisp_chip_xxxxx_get_eflash_loader` implementations accept clock type
    but don't use it.

  - `drain` function only has a body under macOS and FreeBSD with
    preprocessor predicates.

- Enable compiler warnings
Now that warnings are address enable them `-Wall -Wextra -Wpedantic` for
the library and the tool targets.

N.B. An equivalent of MSVC should be added to CMakeLists.txt, as these
would only work when using GCC or Clang.
2023-04-30 10:21:34 -07:00
12 changed files with 169 additions and 64 deletions

View File

@ -24,7 +24,7 @@ jobs:
run:
shell: cmd
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- uses: lukka/get-cmake@latest
@ -35,7 +35,7 @@ jobs:
cmake .. -DBLISP_BUILD_CLI=ON -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release
- name: Upload results
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: blips-windows-x86_64.zip
path: |
@ -45,7 +45,7 @@ jobs:
build-macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- uses: lukka/get-cmake@latest
@ -56,7 +56,7 @@ jobs:
cmake .. -DBLISP_BUILD_CLI=ON -DCMAKE_BUILD_TYPE=Release
cmake --build .
- name: Upload results
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: blips-apple-universal.zip
path: |
@ -66,7 +66,7 @@ jobs:
build-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- uses: lukka/get-cmake@latest
@ -77,7 +77,7 @@ jobs:
cmake .. -DBLISP_BUILD_CLI=ON -DCMAKE_BUILD_TYPE=Release
cmake --build .
- name: Upload results
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: blips-linux-x86_64.zip
path: |
@ -99,7 +99,7 @@ jobs:
- arch: riscv64
distro: ubuntu_latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- uses: uraimo/run-on-arch-action@v2
@ -149,7 +149,7 @@ jobs:
echo "Produced artifact at /artifacts/${artifact_name}"
- name: Upload results
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: blisp-linux-${{ matrix.arch }}.zip
path: |

View File

@ -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)
@ -10,10 +11,13 @@ option(COMPILE_TESTS "Compile the tests" OFF)
add_library(libblisp_obj OBJECT
lib/blisp.c
lib/blisp_easy.c
lib/blisp_util.c
lib/chip/blisp_chip_bl60x.c
lib/chip/blisp_chip_bl70x.c lib/blisp_easy.c)
lib/chip/blisp_chip_bl70x.c)
target_include_directories(libblisp_obj PRIVATE ${CMAKE_SOURCE_DIR}/include/)
target_compile_options(libblisp_obj PRIVATE -Wall -Wextra -Wpedantic)
set_property(TARGET libblisp_obj PROPERTY POSITION_INDEPENDENT_CODE 1)
@ -42,11 +46,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

View File

@ -0,0 +1,79 @@
# SPDX-License-Identifier: MIT
#[=======================================================================[.rst:
FindLibserialport
-------
Finds the sigrok serial port library (``libserialport``)
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()

View File

@ -60,5 +60,4 @@ int32_t blisp_device_flash_write(struct blisp_device* device,
int32_t blisp_device_program_check(struct blisp_device* device);
int32_t blisp_device_reset(struct blisp_device* device);
void blisp_device_close(struct blisp_device* device);
#endif

View File

@ -9,6 +9,12 @@
#include <assert.h>
#include <stdint.h>
#if !defined(static_assert) && (defined(__GNUC__) || defined(__clang__)) \
&& defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \
&& __STDC_VERSION__ <= 201710L
#define static_assert _Static_assert
#endif
#pragma pack(push, 1)
typedef struct {

View File

@ -2,35 +2,18 @@
#ifndef _BLISP_UTIL_H
#define _BLISP_UTIL_H
#include <stdarg.h>
#include <stdio.h>
#include <stdint.h>
#ifdef WIN32
# include <windows.h>
#else
# include <time.h>
#endif
static void blisp_dlog(const char* format, ...)
{
fflush(stdout);
va_list args;
va_start(args, format);
vfprintf(stderr, format, args);
va_end(args);
fputc('\n', stderr);
}
void blisp_dlog(const char* format, ...);
void sleep_ms(int milliseconds);
static void sleep_ms(int milliseconds) {
#ifdef WIN32
Sleep(milliseconds);
#else
struct timespec ts;
ts.tv_sec = milliseconds / 1000;
ts.tv_nsec = (milliseconds % 1000) * 1000000;
nanosleep(&ts, NULL);
#endif
}
uint32_t crc32_calculate(const void *data, size_t data_len);
/**
* * Generated on Mon Jan 9 19:56:36 2023
@ -44,7 +27,6 @@ static void sleep_ms(int milliseconds) {
* - ReflectOut = True
* - Algorithm = table-driven
*/
static const uint32_t crc_table[256] = {
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
@ -80,19 +62,4 @@ static const uint32_t crc_table[256] = {
0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
};
static uint32_t crc32_calculate(const void *data, size_t data_len)
{
uint32_t crc = 0xffffffff;
const unsigned char *d = (const unsigned char *)data;
unsigned int tbl_idx;
while (data_len--) {
tbl_idx = (crc ^ *d) & 0xff;
crc = (crc_table[tbl_idx] ^ (crc >> 8)) & 0xffffffff;
d++;
}
return (crc & 0xffffffff) ^ 0xffffffff;
}
#endif

View File

@ -13,7 +13,7 @@
#define DEBUG
static void drain(struct sp_port* port) {
static void drain([[maybe_unused]] struct sp_port* port) {
#if defined(__APPLE__) || defined(__FreeBSD__)
sp_drain(port);
#endif

48
lib/blisp_util.c Normal file
View File

@ -0,0 +1,48 @@
// SPDX-License-Identifier: MIT
#include <stdarg.h>
#include <stdint.h>
#include <stdio.h>
#ifdef WIN32
# include <windows.h>
#else
# include <time.h>
#endif
#include "blisp_util.h"
void blisp_dlog(const char* format, ...)
{
fflush(stdout);
va_list args;
va_start(args, format);
vfprintf(stderr, format, args);
va_end(args);
fputc('\n', stderr);
}
void sleep_ms(int milliseconds) {
#ifdef WIN32
Sleep(milliseconds);
#else
struct timespec ts;
ts.tv_sec = milliseconds / 1000;
ts.tv_nsec = (milliseconds % 1000) * 1000000;
nanosleep(&ts, NULL);
#endif
}
uint32_t crc32_calculate(const void *data, size_t data_len)
{
uint32_t crc = 0xffffffff;
const unsigned char *d = (const unsigned char *)data;
unsigned int tbl_idx;
while (data_len--) {
tbl_idx = (crc ^ *d) & 0xff;
crc = (crc_table[tbl_idx] ^ (crc >> 8)) & 0xffffffff;
d++;
}
return (crc & 0xffffffff) ^ 0xffffffff;
}

View File

@ -4,7 +4,7 @@
#include "../../data/bl60x_eflash_loader.h"
#include "blisp.h"
int64_t blisp_chip_bl60x_get_eflash_loader(uint8_t clk_type, uint8_t** firmware_buf_ptr)
int64_t blisp_chip_bl60x_get_eflash_loader([[maybe_unused]] uint8_t clk_type, uint8_t** firmware_buf_ptr)
{
uint8_t* firmware_buf = malloc(sizeof(bl60x_eflash_loader_bin));
memcpy(firmware_buf, bl60x_eflash_loader_bin, sizeof(bl60x_eflash_loader_bin));

View File

@ -4,7 +4,7 @@
#include "../../data/bl70x_eflash_loader.h"
#include "blisp.h"
int64_t blisp_chip_bl70x_get_eflash_loader(uint8_t clk_type, uint8_t** firmware_buf_ptr)
int64_t blisp_chip_bl70x_get_eflash_loader([[maybe_unused]] uint8_t clk_type, uint8_t** firmware_buf_ptr)
{
uint8_t* firmware_buf = malloc(sizeof(bl70x_eflash_loader_bin));
memcpy(firmware_buf, bl70x_eflash_loader_bin, sizeof(bl70x_eflash_loader_bin));

View File

@ -20,9 +20,11 @@ target_include_directories(blisp PRIVATE
"${CMAKE_SOURCE_DIR}/include")
target_link_libraries(blisp PRIVATE
argtable3
argtable3::argtable3
libblisp_static file_parsers)
target_compile_options(blisp PRIVATE -Wall -Wextra -Wpedantic)
if (WIN32)
target_link_libraries(blisp PRIVATE Setupapi.lib)
elseif (APPLE)

View File

@ -2,6 +2,7 @@
#define PARSE_FILE_H_
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h> /* ssize_t */
#if defined(_MSC_VER)
#include <BaseTsd.h>
typedef SSIZE_T ssize_t;