Compare commits

..

3 Commits

Author SHA1 Message Date
Terence Noone
5634b678f3
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-03-03 00:46:22 -05:00
Terence Noone
8dbb58353b
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-03-03 00:41:37 -05:00
Terence Noone
f1fcdb9587
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-03-03 00:41:29 -05:00
12 changed files with 12 additions and 202 deletions

1
.envrc
View File

@ -1 +0,0 @@
use flake .

View File

@ -2,29 +2,13 @@ name: Build
on: [push, pull_request] on: [push, pull_request]
jobs: jobs:
check-nix-flake:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: cachix/install-nix-action@v30
- name: Check Nix Flake
run: nix flake check --print-build-logs
check-nix-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: cachix/install-nix-action@v30
- name: Build package
run: nix build --print-build-logs
build-windows: build-windows:
runs-on: windows-2022 runs-on: windows-2022
defaults: defaults:
run: run:
shell: cmd shell: cmd
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v3
with: with:
submodules: 'recursive' submodules: 'recursive'
- uses: lukka/get-cmake@latest - uses: lukka/get-cmake@latest
@ -35,7 +19,7 @@ jobs:
cmake .. -DBLISP_BUILD_CLI=ON -DCMAKE_BUILD_TYPE=Release cmake .. -DBLISP_BUILD_CLI=ON -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release cmake --build . --config Release
- name: Upload results - name: Upload results
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v3
with: with:
name: blips-windows-x86_64.zip name: blips-windows-x86_64.zip
path: | path: |
@ -45,7 +29,7 @@ jobs:
build-macos: build-macos:
runs-on: macos-latest runs-on: macos-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v3
with: with:
submodules: 'recursive' submodules: 'recursive'
- uses: lukka/get-cmake@latest - uses: lukka/get-cmake@latest
@ -56,7 +40,7 @@ jobs:
cmake .. -DBLISP_BUILD_CLI=ON -DCMAKE_BUILD_TYPE=Release cmake .. -DBLISP_BUILD_CLI=ON -DCMAKE_BUILD_TYPE=Release
cmake --build . cmake --build .
- name: Upload results - name: Upload results
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v3
with: with:
name: blips-apple-universal.zip name: blips-apple-universal.zip
path: | path: |
@ -66,7 +50,7 @@ jobs:
build-linux: build-linux:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v3
with: with:
submodules: 'recursive' submodules: 'recursive'
- uses: lukka/get-cmake@latest - uses: lukka/get-cmake@latest
@ -77,12 +61,12 @@ jobs:
cmake .. -DBLISP_BUILD_CLI=ON -DCMAKE_BUILD_TYPE=Release cmake .. -DBLISP_BUILD_CLI=ON -DCMAKE_BUILD_TYPE=Release
cmake --build . cmake --build .
- name: Upload results - name: Upload results
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v3
with: with:
name: blips-linux-x86_64.zip name: blips-linux-x86_64.zip
path: | path: |
build/tools/blisp/blisp build/tools/blisp/blisp
if-no-files-found: error if-no-files-found: error
build-linux-alternative-arch: build-linux-alternative-arch:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -99,7 +83,7 @@ jobs:
- arch: riscv64 - arch: riscv64
distro: ubuntu_latest distro: ubuntu_latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v3
with: with:
submodules: 'recursive' submodules: 'recursive'
- uses: uraimo/run-on-arch-action@v2 - uses: uraimo/run-on-arch-action@v2
@ -149,9 +133,9 @@ jobs:
echo "Produced artifact at /artifacts/${artifact_name}" echo "Produced artifact at /artifacts/${artifact_name}"
- name: Upload results - name: Upload results
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v3
with: with:
name: blisp-linux-${{ matrix.arch }}.zip name: blisp-linux-${{ matrix.arch }}.zip
path: | path: |
artifacts/blisp-* artifacts/blisp-*
if-no-files-found: error if-no-files-found: error

View File

@ -1,49 +0,0 @@
{
lib,
self,
stdenv,
fetchFromGitHub,
argtable,
cmake,
libserialport,
pkg-config,
testers,
IOKit ? null,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "blisp";
version = "0.0.4-unstable";
src = self;
nativeBuildInputs = [
cmake
pkg-config
];
buildInputs = [
argtable
libserialport
] ++ lib.optional stdenv.hostPlatform.isDarwin IOKit;
cmakeFlags = [
"-DBLISP_BUILD_CLI=ON"
"-DBLISP_USE_SYSTEM_LIBRARIES=ON"
];
env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isDarwin "-Wno-error=implicit-function-declaration";
passthru.tests.version = testers.testVersion {
package = finalAttrs.finalPackage;
version = "v${finalAttrs.version}";
};
meta = with lib; {
description = "In-System-Programming (ISP) tool & library for Bouffalo Labs RISC-V Microcontrollers and SoCs";
license = licenses.mit;
mainProgram = "blisp";
homepage = "https://github.com/pine64/blisp";
platforms = platforms.unix;
maintainers = [ maintainers.bdd ];
};
})

View File

@ -1,9 +0,0 @@
(import (
let
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
in
fetchTarball {
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
sha256 = lock.nodes.flake-compat.locked.narHash;
}
) { src = ./.; }).defaultNix

27
flake.lock generated
View File

@ -1,27 +0,0 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1731319897,
"narHash": "sha256-PbABj4tnbWFMfBp6OcUK5iGy1QY+/Z96ZcLpooIbuEI=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "dc460ec76cbff0e66e269457d7b728432263166c",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

View File

@ -1,44 +0,0 @@
{
description = "A very basic flake";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
};
outputs =
{ self, nixpkgs, ... }@inputs:
let
systems = [
"x86_64-linux"
"aarch64-linux"
];
forEachSystem = nixpkgs.lib.genAttrs systems;
in
{
packages = forEachSystem (
system:
let
pkgs = nixpkgs.legacyPackages.${system};
in
with pkgs;
{
blisp = callPackage ./blisp.nix { inherit self; };
default = self.packages.${system}.blisp;
}
);
devShells = forEachSystem (
system:
let
pkgs = nixpkgs.legacyPackages.${system};
in
with pkgs;
{
default = mkShell {
name = "blisp-dev";
nativeBuildInputs = [ self.packages.${system}.default ];
};
}
);
};
}

View File

@ -9,12 +9,6 @@
#include <assert.h> #include <assert.h>
#include <stdint.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) #pragma pack(push, 1)
typedef struct { typedef struct {

View File

@ -1,9 +0,0 @@
(import (
let
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
in
fetchTarball {
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
sha256 = lock.nodes.flake-compat.locked.narHash;
}
) { src = ./.; }).shellNix

View File

@ -2,14 +2,6 @@
#ifndef BLISP_CMD_H #ifndef BLISP_CMD_H
#define BLISP_CMD_H #define BLISP_CMD_H
#if defined (__unix__) || (defined (__APPLE__) && defined (__MACH__))
#include <unistd.h>
#elif defined(_WIN32) || defined(WIN32)
#include <io.h>
#define R_OK 4
#define access _access
#endif
#include <stdint.h> #include <stdint.h>
#include "error_codes.h" #include "error_codes.h"
struct cmd { struct cmd {

View File

@ -13,20 +13,11 @@ static struct arg_str *port_name, *chip_type; // TODO: Make this common
static struct arg_lit* reset; static struct arg_lit* reset;
static struct arg_end* end; static struct arg_end* end;
static void* cmd_iot_argtable[7]; static void* cmd_iot_argtable[7];
static void cmd_iot_args_print_glossary();
blisp_return_t blisp_single_download() { blisp_return_t blisp_single_download() {
struct blisp_device device; struct blisp_device device;
blisp_return_t ret; blisp_return_t ret;
if (access(single_download->filename[0], R_OK) != 0) {
// File not accessible, error out.
fprintf(stderr, "Input firmware not found: %s\n", single_download->filename[0]);
cmd_iot_args_print_glossary(); /* Print help to assist user */
/* No need to free memory, will now exit with ret code 1 */
return 1;
}
ret = blisp_common_init_device(&device, port_name, chip_type); ret = blisp_common_init_device(&device, port_name, chip_type);
if (ret != BLISP_OK) { if (ret != BLISP_OK) {
return ret; return ret;

View File

@ -20,7 +20,6 @@ static struct arg_str *port_name, *chip_type;
static struct arg_lit* reset; static struct arg_lit* reset;
static struct arg_end* end; static struct arg_end* end;
static void* cmd_write_argtable[6]; static void* cmd_write_argtable[6];
static void cmd_write_args_print_glossary();
void fill_up_boot_header(struct bfl_boot_header* boot_header) { void fill_up_boot_header(struct bfl_boot_header* boot_header) {
memcpy(boot_header->magiccode, "BFNP", 4); memcpy(boot_header->magiccode, "BFNP", 4);
@ -169,15 +168,6 @@ void fill_up_boot_header(struct bfl_boot_header* boot_header) {
blisp_return_t blisp_flash_firmware() { blisp_return_t blisp_flash_firmware() {
struct blisp_device device; struct blisp_device device;
blisp_return_t ret; blisp_return_t ret;
if (access(binary_to_write->filename[0], R_OK) != 0) {
// File not accessible, error out.
fprintf(stderr, "Input firmware not found: %s\n", binary_to_write->filename[0]);
cmd_write_args_print_glossary(); /* Print help to assist user */
/* No need to free memory, will now exit with ret code 1 */
return 1;
}
ret = blisp_common_init_device(&device, port_name, chip_type); ret = blisp_common_init_device(&device, port_name, chip_type);
if (ret != 0) { if (ret != 0) {
@ -188,7 +178,6 @@ blisp_return_t blisp_flash_firmware() {
// TODO: Error handling // TODO: Error handling
goto exit1; goto exit1;
} }
parsed_firmware_file_t parsed_file; parsed_firmware_file_t parsed_file;
memset(&parsed_file, 0, sizeof(parsed_file)); memset(&parsed_file, 0, sizeof(parsed_file));
int parsed_result = int parsed_result =
@ -233,13 +222,13 @@ blisp_return_t blisp_flash_firmware() {
if (ret != BLISP_OK) { if (ret != BLISP_OK) {
fprintf(stderr, fprintf(stderr,
"Failed to erase flash. Tried to erase from 0x%08lu to 0x%08lu\n", "Failed to erase flash. Tried to erase from 0x%08X to 0x%08X\n",
parsed_file.payload_address, parsed_file.payload_address,
parsed_file.payload_address + parsed_file.payload_length + 1); parsed_file.payload_address + parsed_file.payload_length + 1);
goto exit2; goto exit2;
} }
printf("Flashing the firmware %lu bytes @ 0x%08lu...\n", printf("Flashing the firmware %d bytes @ 0x%08X...\n",
parsed_file.payload_length, parsed_file.payload_address); parsed_file.payload_length, parsed_file.payload_address);
struct blisp_easy_transport data_transport = struct blisp_easy_transport data_transport =
blisp_easy_transport_new_from_memory(parsed_file.payload, blisp_easy_transport_new_from_memory(parsed_file.payload,

View File

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