Install Rust in docker image, add Rust library and build rules (#41)

* Install Rust in docker image

* Also install thumbv7em-none-eabi target

* Install Rust in docker image

* Also install thumbv7em-none-eabi target

* Add Rust example

* Link to the Rust example

* Call function from the Rust lib

* Move PROJECT_DIR to the 'paths' section

* Fix target_f1 build

* Link to the Rust library in target_f1

* Generate cbindgen bindings

* Add forgotten dependency line

* Use panic=abort instead of eh_personality lang item

* Install Rust in docker image

* Also install thumbv7em-none-eabi target

* Add Rust example

* Link to the Rust example

* Call function from the Rust lib

* Move PROJECT_DIR to the 'paths' section

* Link to the Rust library in target_f1

* Generate cbindgen bindings

* Add forgotten dependency line

* Use panic=abort instead of eh_personality lang item

* add rust call test

Co-authored-by: aanper <mail@s3f.ru>
This commit is contained in:
Vadim Kaushan
2020-08-26 13:08:20 +03:00
committed by GitHub
parent 046a20fa0e
commit 1bec8dd23a
11 changed files with 478 additions and 11 deletions

View File

@@ -13,6 +13,7 @@ OPT = -Og
#######################################
# paths
#######################################
PROJECT_DIR = $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
# Build path
BUILD_DIR = build
@@ -70,7 +71,26 @@ CP = objcopy
SZ = size
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S
#######################################
# Rust library
#######################################
RUST_LIB_SRC = $(realpath $(PROJECT_DIR)/../core-rs)
RUST_LIB_NAME = flipper_core
RUST_LIB_TARGET = x86_64-unknown-linux-gnu
RUST_LIB_FLAGS = --target=$(RUST_LIB_TARGET)
ifeq ($(DEBUG), 1)
RUST_LIB_PATH = $(RUST_LIB_SRC)/target/$(RUST_LIB_TARGET)/debug
else
RUST_LIB_FLAGS += --release
RUST_LIB_PATH = $(RUST_LIB_SRC)/target/$(RUST_LIB_TARGET)/release
endif
RUST_LIB_CMD = cd $(RUST_LIB_SRC) && cargo build $(RUST_LIB_FLAGS)
#######################################
# CFLAGS
#######################################
@@ -80,7 +100,8 @@ BIN = $(CP) -O binary -S
C_INCLUDES = \
-IInc \
-I../applications \
-I../core
-I../core \
-I../core-rs/bindings
# compile gcc flags
CFLAGS = $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections -pthread
@@ -100,8 +121,8 @@ CPPFLAGS = -fno-threadsafe-statics
#######################################
# libraries
LIBS = -lc -lm
LIBDIR =
LIBS = -lc -lm -l$(RUST_LIB_NAME)
LIBDIR = -L$(RUST_LIB_PATH)
LDFLAGS = $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections -pthread
# default action: build all
@@ -132,7 +153,10 @@ $(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)
$(BUILD_DIR)/%.o: %.cpp Makefile | $(BUILD_DIR)
$(CPP) -c $(CFLAGS) $(CPPFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
$(BUILD_DIR)/$(TARGET): $(OBJECTS) Makefile
$(RUST_LIB_PATH)/lib$(RUST_LIB_NAME).a:
$(RUST_LIB_CMD)
$(BUILD_DIR)/$(TARGET): $(RUST_LIB_PATH)/lib$(RUST_LIB_NAME).a $(OBJECTS) Makefile
$(CPP) $(OBJECTS) $(LDFLAGS) -o $@
$(SZ) $@
@@ -144,10 +168,12 @@ $(BUILD_DIR):
#######################################
clean:
-rm -fR $(BUILD_DIR)
cd $(RUST_LIB_SRC) && cargo clean
#######################################
# dependencies
#######################################
-include $(wildcard $(BUILD_DIR)/*.d)
-include $(wildcard $(RUST_LIB_PATH)/*.d)
# *** EOF ***

View File

@@ -5,8 +5,10 @@ Local fw build entry point.
*/
void app();
unsigned int add(unsigned int a, unsigned int b);
int main() {
add(2, 2);
app();
return 0;