From 258f0265179044b16f9c8a9278bea50ec1a9671a Mon Sep 17 00:00:00 2001 From: Vladimir Pantelic Date: Tue, 25 Feb 2025 13:13:13 +0100 Subject: [PATCH 1/2] allow to have a different compiler for plugin and ttl generator Signed-off-by: Vladimir Pantelic --- makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/makefile b/makefile index f69b841..86a0f6d 100644 --- a/makefile +++ b/makefile @@ -2,7 +2,8 @@ # Makefile for converting SoundFont (.sf2) files into LV2 plugins # Compiler settings -CC = gcc +CC ?= gcc +HOST_CC = gcc CFLAGS = -Wall -fPIC `pkg-config --cflags fluidsynth` LDFLAGS = `pkg-config --libs fluidsynth` @@ -133,7 +134,7 @@ $(PLUGIN_DIR)/$(PLUGIN_NAME).so: $(PLUGIN_SRC) | $(PLUGIN_DIR) # Generate metadata $(PLUGIN_DIR)/metadata: $(METADATA_GEN) $(SF2_FILE) | $(PLUGIN_DIR) @echo "Building metadata generator..." - @$(CC) $(CFLAGS) -DPLUGIN_NAME=\"$(PLUGIN_NAME)\" $< -o $(BUILD_DIR)/ttl_generator $(LDFLAGS) + @$(HOST_CC) $(CFLAGS) -DPLUGIN_NAME=\"$(PLUGIN_NAME)\" $< -o $(BUILD_DIR)/ttl_generator $(LDFLAGS) @echo "Copying SoundFont and generating metadata..." @cp $(SF2_FILE) $(PLUGIN_DIR)/ @$(BUILD_DIR)/ttl_generator $(SF2_FILE) From 11eb2d7623c24c1207aea3000110d8c40547e35d Mon Sep 17 00:00:00 2001 From: Vladimir Pantelic Date: Tue, 25 Feb 2025 13:41:08 +0100 Subject: [PATCH 2/2] fix display of ANSI colors in bash shell Signed-off-by: Vladimir Pantelic --- makefile | 67 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/makefile b/makefile index 86a0f6d..32877ab 100644 --- a/makefile +++ b/makefile @@ -7,6 +7,8 @@ HOST_CC = gcc CFLAGS = -Wall -fPIC `pkg-config --cflags fluidsynth` LDFLAGS = `pkg-config --libs fluidsynth` +ECHO = echo -e + # Project configuration PLUGIN_NAME ?= SF2LV2-Default SF2_FILE ?= soundfont.sf2 @@ -30,16 +32,16 @@ PLUGIN_SRC = src/synth_plugin.c interactive: @clear @$(MAKE) --no-print-directory intro - @echo "\033[1;34m=== SF2LV2 Interactive Build ===\033[0m" - @echo -n "\033[1;32mWould you like to batch process all available .sf2 files? (y/n): \033[0m"; \ + @$(ECHO) "\033[1;34m=== SF2LV2 Interactive Build ===\033[0m" + @$(ECHO) -n "\033[1;32mWould you like to batch process all available .sf2 files? (y/n): \033[0m"; \ read batch_choice; \ if [ "$$batch_choice" = "y" ] || [ "$$batch_choice" = "Y" ]; then \ - echo -n "\033[1;32mInstall all plugins to system after build? (y/n): \033[0m"; \ + $(ECHO) -n "\033[1;32mInstall all plugins to system after build? (y/n): \033[0m"; \ read install_choice; \ for sf2_file in *.sf2; do \ if [ -f "$$sf2_file" ]; then \ plugin_name=$${sf2_file%.sf2}; \ - echo "\033[1;34mProcessing: $$sf2_file -> $$plugin_name\033[0m"; \ + $(ECHO) "\033[1;34mProcessing: $$sf2_file -> $$plugin_name\033[0m"; \ $(MAKE) --no-print-directory clean_plugin PLUGIN_NAME="$$plugin_name" > /dev/null; \ if [ "$$install_choice" = "y" ] || [ "$$install_choice" = "Y" ]; then \ $(MAKE) --no-print-directory build_plugin PLUGIN_NAME="$$plugin_name" SF2_FILE="$$sf2_file" && \ @@ -49,16 +51,16 @@ interactive: fi; \ fi; \ done; \ - echo "\033[1;32mBatch processing complete!\033[0m"; \ + $(ECHO) "\033[1;32mBatch processing complete!\033[0m"; \ else \ - echo -n "\033[1;32mEnter SoundFont filename (.sf2): \033[0m"; \ + $(ECHO) -n "\033[1;32mEnter SoundFont filename (.sf2): \033[0m"; \ read sf2_file; \ - echo -n "\033[1;32mEnter plugin name: \033[0m"; \ + $(ECHO) -n "\033[1;32mEnter plugin name: \033[0m"; \ read plugin_name; \ - echo -n "\033[1;32mInstall to system after build? (y/n): \033[0m"; \ + $(ECHO) -n "\033[1;32mInstall to system after build? (y/n): \033[0m"; \ read install_choice; \ if [ ! -f "$$sf2_file" ]; then \ - echo "\033[1;31mError: SoundFont file '$$sf2_file' not found\033[0m"; \ + $(ECHO) "\033[1;31mError: SoundFont file '$$sf2_file' not found\033[0m"; \ exit 1; \ fi; \ $(MAKE) --no-print-directory clean_plugin PLUGIN_NAME="$$plugin_name" > /dev/null; \ @@ -72,63 +74,63 @@ interactive: # Batch process target batch_process: - @echo "\033[1;34m=== Processing all .sf2 files ===\033[0m" + @$(ECHO) "\033[1;34m=== Processing all .sf2 files ===\033[0m" @for sf2_file in *.sf2; do \ if [ -f "$$sf2_file" ]; then \ plugin_name=$${sf2_file%.sf2}; \ - echo "\033[1;32mProcessing: $$sf2_file -> $$plugin_name\033[0m"; \ + $(ECHO) "\033[1;32mProcessing: $$sf2_file -> $$plugin_name\033[0m"; \ $(MAKE) --no-print-directory clean_plugin PLUGIN_NAME="$$plugin_name" > /dev/null; \ $(MAKE) --no-print-directory build_plugin PLUGIN_NAME="$$plugin_name" SF2_FILE="$$sf2_file" || exit 1; \ fi \ done - @echo "\033[1;32mBatch processing complete!\033[0m" + @$(ECHO) "\033[1;32mBatch processing complete!\033[0m" # Clean only specific plugin directory clean_plugin: @if [ -d "$(PLUGIN_DIR)" ]; then \ - echo "Cleaning plugin directory: $(PLUGIN_DIR)"; \ + $(ECHO) "Cleaning plugin directory: $(PLUGIN_DIR)"; \ rm -rf "$(PLUGIN_DIR)"; \ fi # Clean everything (only when explicitly called) clean: - @echo "Cleaning all build artifacts..." + @$(ECHO) "Cleaning all build artifacts..." @rm -rf $(BUILD_DIR) @rm -f *.ttl - @echo "Clean complete" + @$(ECHO) "Clean complete" # Silent build target for interactive mode build_plugin: $(PLUGIN_DIR)/$(PLUGIN_NAME).so $(PLUGIN_DIR)/metadata - @echo "Build complete: $(PLUGIN_DIR)" + @$(ECHO) "Build complete: $(PLUGIN_DIR)" # Normal build target with logo all: intro $(PLUGIN_DIR)/$(PLUGIN_NAME).so $(PLUGIN_DIR)/metadata - @echo "Build complete: $(PLUGIN_DIR)" + @$(ECHO) "Build complete: $(PLUGIN_DIR)" # Display intro message intro: - @echo "\033[1;31m _ ________ \033[38;5;203m___ _ _ _\033[0m" - @echo "\033[1;31m| || ____ | \033[38;5;203m/ | | | | | | |\033[0m" - @echo "\033[1;31m| || |___ | | \033[38;5;203m/ /| | | |_ __ ___| |_ _ __ _ _ _ __ __ ___ _ __ | |_ ___\033[0m" - @echo "\033[1;31m| ||___ || | \033[38;5;203m/ / | | | | '_ \/ __| _| '__| | | | '_ '_ \/ _ \| '_ \| _/ __|\033[0m" - @echo "\033[1;31m| |____| || |___\033[38;5;203m/ / | | | | | | \__ | |_| | | |_/ | | || | | __/| | | | |_\__ \\\033[0m" - @echo "\033[1;31m|________||______\033[38;5;203m/ |_| |_|_| |_|___\\___|_| \\___,_|_| || |_\\___||_| |_\\___|___/\033[0m" - @echo "\033[1;37m SF2LV2 Soundfont Plugin Creator v1.0 2025-01-06\033[0m" - @echo + @$(ECHO) "\033[1;31m _ ________ \033[38;5;203m___ _ _ _\033[0m" + @$(ECHO) "\033[1;31m| || ____ | \033[38;5;203m/ | | | | | | |\033[0m" + @$(ECHO) "\033[1;31m| || |___ | | \033[38;5;203m/ /| | | |_ __ ___| |_ _ __ _ _ _ __ __ ___ _ __ | |_ ___\033[0m" + @$(ECHO) "\033[1;31m| ||___ || | \033[38;5;203m/ / | | | | '_ \/ __| _| '__| | | | '_ '_ \/ _ \| '_ \| _/ __|\033[0m" + @$(ECHO) "\033[1;31m| |____| || |___\033[38;5;203m/ / | | | | | | \__ | |_| | | |_/ | | || | | __/| | | | |_\__ \\033[0m" + @$(ECHO) "\033[1;31m|________||______\033[38;5;203m/ |_| |_|_| |_|___\\___|_| \\___,_|_| || |_\\___||_| |_\\___|___/\033[0m" + @$(ECHO) "\033[1;37m SF2LV2 Soundfont Plugin Creator v1.0 2025-01-06\033[0m" + @$(ECHO) # Create build directory $(BUILD_DIR): - @echo "Creating build directory..." + @$(ECHO) "Creating build directory..." @mkdir -p $(BUILD_DIR) # Create plugin directory $(PLUGIN_DIR): $(BUILD_DIR) - @echo "Creating plugin directory..." + @$(ECHO) "Creating plugin directory..." @mkdir -p $(PLUGIN_DIR) # Build plugin binary $(PLUGIN_DIR)/$(PLUGIN_NAME).so: $(PLUGIN_SRC) | $(PLUGIN_DIR) - @echo "Building plugin binary..." + @$(ECHO) "Building plugin binary..." @$(CC) $(CFLAGS) -shared -DPLUGIN_NAME=\"$(PLUGIN_NAME)\" -DSF2_FILE=\"$(SF2_FILE)\" $< -o $@ $(LDFLAGS) # Generate metadata @@ -136,15 +138,18 @@ $(PLUGIN_DIR)/metadata: $(METADATA_GEN) $(SF2_FILE) | $(PLUGIN_DIR) @echo "Building metadata generator..." @$(HOST_CC) $(CFLAGS) -DPLUGIN_NAME=\"$(PLUGIN_NAME)\" $< -o $(BUILD_DIR)/ttl_generator $(LDFLAGS) @echo "Copying SoundFont and generating metadata..." + @$(ECHO) "Building metadata generator..." + @$(HOST_CC) $(CFLAGS) -DPLUGIN_NAME=\"$(PLUGIN_NAME)\" $< -o $(BUILD_DIR)/ttl_generator $(LDFLAGS) + @$(ECHO) "Copying SoundFont and generating metadata..." @cp $(SF2_FILE) $(PLUGIN_DIR)/ @$(BUILD_DIR)/ttl_generator $(SF2_FILE) - @echo "Cleaning up ttl_generator..." + @$(ECHO) "Cleaning up ttl_generator..." @rm -f $(BUILD_DIR)/ttl_generator @touch $@ # Install to system LV2 directory install: all - @echo "Installing to $(INSTALL_DIR)/$(PLUGIN_NAME).lv2..." + @$(ECHO) "Installing to $(INSTALL_DIR)/$(PLUGIN_NAME).lv2..." @sudo mkdir -p $(INSTALL_DIR)/$(PLUGIN_NAME).lv2 @sudo cp -r $(PLUGIN_DIR)/* $(INSTALL_DIR)/$(PLUGIN_NAME).lv2/ - @echo "Installation complete" \ No newline at end of file + @$(ECHO) "Installation complete"