Skip to content

Commit

Permalink
Give each firmware its own build folder; fix crash in tt5 scene deser…
Browse files Browse the repository at this point in the history
…ialization

Remove change to make dep
  • Loading branch information
Dewb committed Sep 14, 2023
1 parent 8d4b004 commit 168ff7e
Show file tree
Hide file tree
Showing 5 changed files with 133 additions and 5 deletions.
1 change: 0 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ firmware-build: firmware/*.mk firmware/**/*.c firmware/**/*.h firmware/**/**/*.r
cd firmware && $(MAKE) -f ansible.mk

firmware-clean:
rm -rfv firmware/build
rm -fv res/firmware/*.dll
rm -fv res/firmware/*.dylib
rm -fv res/firmware/*.so
Expand Down
3 changes: 2 additions & 1 deletion firmware/common.mk
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ SHELL := /bin/bash -O extglob
RACK_DIR ?= ../../..

TARGET_DIR := ../res/firmware/
BUILD_DIR := ../build/firmware/$(TARGET_NAME)

FLAGS += \
-DDEBUG \
Expand Down Expand Up @@ -33,7 +34,7 @@ ifeq ($(ARCH_WIN), 1)
TARGET = $(TARGET_DIR)$(TARGET_NAME).dll
endif

include $(RACK_DIR)/compile.mk
include compile.mk

all: $(TARGET)

Expand Down
114 changes: 114 additions & 0 deletions firmware/compile.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
# Rack SDK compile.mk modified to support configurable build products folder

ifndef RACK_DIR
$(error RACK_DIR is not defined)
endif

include $(RACK_DIR)/arch.mk

BUILD_DIR ?= build
OBJCOPY ?= objcopy
STRIP ?= strip
INSTALL_NAME_TOOL ?= install_name_tool
OTOOL ?= otool

# Generate dependency files alongside the object files
FLAGS += -MMD -MP
# Debugger symbols. These are removed with `strip`.
FLAGS += -g
# Optimization
FLAGS += -O3 -funsafe-math-optimizations -fno-omit-frame-pointer
# Warnings
FLAGS += -Wall -Wextra -Wno-unused-parameter
# C++ standard
CXXFLAGS += -std=c++11

# Define compiler/linker target if cross-compiling
ifdef CROSS_COMPILE
FLAGS += --target=$(MACHINE)
LDFLAGS += --target=$(MACHINE)
endif

# Architecture-independent flags
ifdef ARCH_X64
FLAGS += -DARCH_X64
FLAGS += -march=nehalem
endif
ifdef ARCH_ARM64
FLAGS += -DARCH_ARM64
FLAGS += -march=armv8-a+fp+simd
endif

ifdef ARCH_LIN
FLAGS += -DARCH_LIN
CXXFLAGS += -Wsuggest-override
endif
ifdef ARCH_MAC
FLAGS += -DARCH_MAC
CXXFLAGS += -stdlib=libc++
LDFLAGS += -stdlib=libc++
MAC_SDK_FLAGS := -mmacosx-version-min=10.9
FLAGS += $(MAC_SDK_FLAGS)
LDFLAGS += $(MAC_SDK_FLAGS)
endif
ifdef ARCH_WIN
FLAGS += -DARCH_WIN
FLAGS += -D_USE_MATH_DEFINES
FLAGS += -municode
CXXFLAGS += -Wsuggest-override
endif

# Allow *appending* rather than prepending to common flags.
# This is useful to force-redefine compiler settings instead of merely setting defaults that may be overwritten.
FLAGS += $(EXTRA_FLAGS)
CFLAGS += $(EXTRA_CFLAGS)
CXXFLAGS += $(EXTRA_CXXFLAGS)
LDFLAGS += $(EXTRA_LDFLAGS)

# Apply FLAGS to language-specific flags
CFLAGS += $(FLAGS)
CXXFLAGS += $(FLAGS)

# Derive object files from sources and place them before user-defined objects
OBJECTS := $(patsubst %, $(BUILD_DIR)/%.o, $(SOURCES)) $(OBJECTS)
OBJECTS += $(patsubst %, $(BUILD_DIR)/%.bin.o, $(BINARIES))
DEPENDENCIES := $(patsubst %, $(BUILD_DIR)/%.d, $(SOURCES))

# Final targets

$(TARGET): $(OBJECTS)
$(CXX) -o $@ $^ $(LDFLAGS)

-include $(DEPENDENCIES)

$(BUILD_DIR)/%.c.o: %.c
@mkdir -p $(@D)
$(CC) $(CFLAGS) -c -o $@ $<

$(BUILD_DIR)/%.cpp.o: %.cpp
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) -c -o $@ $<

$(BUILD_DIR)/%.cc.o: %.cc
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) -c -o $@ $<

$(BUILD_DIR)/%.m.o: %.m
@mkdir -p $(@D)
$(CC) $(CFLAGS) -c -o $@ $<

$(BUILD_DIR)/%.bin.o: %
@mkdir -p $(@D)
ifdef ARCH_LIN
$(OBJCOPY) -I binary -O elf64-x86-64 -B i386:x86-64 --rename-section .data=.rodata,alloc,load,readonly,data,contents $< $@
endif
ifdef ARCH_WIN
$(OBJCOPY) -I binary -O pe-x86-64 -B i386:x86-64 --rename-section .data=.rodata,alloc,load,readonly,data,contents $< $@
endif
ifdef ARCH_MAC
@# Apple makes this needlessly complicated, so just generate a C file with an array.
xxd -i $< | $(CC) $(MAC_SDK_FLAGS) -c -o $@ -xc -
endif

$(BUILD_DIR)/%.html: %.md
markdown $< > $@
18 changes: 16 additions & 2 deletions firmware/mock_hardware/modules/teletype/adapter_teletype.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
#include "module/globals.h"
#include "module/live_mode.h"
#include "module/preset_w_mode.h"
#include "src/serialize.h"
#include "src/scene_serialization.h"
#include "src/teletype_io.h"
#include "types.h"

Expand Down Expand Up @@ -62,8 +62,16 @@ void fake_flash_read(scene_state_t* src_scene, scene_state_t* dest_scene,
uint8_t init_i2c_op_address)
{
memcpy(ss_scripts_ptr(dest_scene), ss_scripts_ptr(src_scene),

// handle difference in macros between TT 5 and 4
#ifdef EDITABLE_SCRIPT_COUNT
ss_scripts_size(EDITABLE_SCRIPT_COUNT)
#else
// Exclude size of TEMP script as above
ss_scripts_size() - sizeof(scene_script_t));
ss_scripts_size() - sizeof(scene_script_t)
#endif

);

if (init_pattern)
{
Expand All @@ -77,7 +85,13 @@ void fake_flash_read(scene_state_t* src_scene, scene_state_t* dest_scene,
memcpy(dest_text, src_text, SCENE_TEXT_LINES * SCENE_TEXT_CHARS);
// need to reset timestamps
uint32_t ticks = tele_get_ticks();

// handle difference in macros between TT 5 and 4
#ifdef TOTAL_SCRIPT_COUNT
for (size_t i = 0; i < TOTAL_SCRIPT_COUNT; i++)
#else
for (size_t i = 0; i < TEMP_SCRIPT; i++)
#endif
dest_scene->scripts[i].last_time = ticks;
dest_scene->variables.time = 0;

Expand Down
2 changes: 1 addition & 1 deletion firmware/teletype4

0 comments on commit 168ff7e

Please sign in to comment.