Build: Embed application icons directly in the executables.

New serenity_app() targets can be defined which allows application
icons to be emedded directly into the executable. The embedded
icons will then be used when creating an icon for that file in
LibGUI.
This commit is contained in:
William Marlow 2020-12-20 18:26:09 +00:00 committed by Andreas Kling
parent d16eabed06
commit 39364bdda4
39 changed files with 94 additions and 37 deletions

View file

@ -15,5 +15,5 @@ set(SOURCES
TabGML.h TabGML.h
) )
serenity_bin(Browser) serenity_app(Browser ICON app-browser)
target_link_libraries(Browser LibWeb LibProtocol LibGUI LibDesktop) target_link_libraries(Browser LibWeb LibProtocol LibGUI LibDesktop)

View file

@ -5,5 +5,5 @@ set(SOURCES
Keypad.cpp Keypad.cpp
) )
serenity_bin(Calculator) serenity_app(Calculator ICON app-calculator)
target_link_libraries(Calculator LibGUI) target_link_libraries(Calculator LibGUI)

View file

@ -3,5 +3,5 @@ set(SOURCES
main.cpp main.cpp
) )
serenity_bin(Calendar) serenity_app(Calendar ICON app-calendar)
target_link_libraries(Calendar LibGUI) target_link_libraries(Calendar LibGUI)

View file

@ -4,5 +4,5 @@ set(SOURCES
MonitorWidget.cpp MonitorWidget.cpp
) )
serenity_bin(DisplaySettings) serenity_app(DisplaySettings ICON app-display-settings)
target_link_libraries(DisplaySettings LibGUI) target_link_libraries(DisplaySettings LibGUI)

View file

@ -9,5 +9,5 @@ set(SOURCES
PropertiesDialog.cpp PropertiesDialog.cpp
) )
serenity_bin(FileManager) serenity_app(FileManager ICON filetype-folder)
target_link_libraries(FileManager LibGUI LibDesktop) target_link_libraries(FileManager LibGUI LibDesktop)

View file

@ -7,5 +7,5 @@ set(SOURCES
main.cpp main.cpp
) )
serenity_bin(FontEditor) serenity_app(FontEditor ICON app-font-editor)
target_link_libraries(FontEditor LibGUI LibGfx) target_link_libraries(FontEditor LibGUI LibGfx)

View file

@ -6,5 +6,5 @@ set(SOURCES
ManualSectionNode.cpp ManualSectionNode.cpp
) )
serenity_bin(Help) serenity_app(Help ICON app-help)
target_link_libraries(Help LibWeb LibMarkdown LibGUI LibDesktop) target_link_libraries(Help LibWeb LibMarkdown LibGUI LibDesktop)

View file

@ -4,5 +4,5 @@ set(SOURCES
main.cpp main.cpp
) )
serenity_bin(HexEditor) serenity_app(HexEditor ICON app-hexeditor)
target_link_libraries(HexEditor LibGUI) target_link_libraries(HexEditor LibGUI)

View file

@ -10,5 +10,5 @@ set(SOURCES
main.cpp main.cpp
) )
serenity_bin(IRCClient) serenity_app(IRCClient ICON app-irc-client)
target_link_libraries(IRCClient LibWeb LibGUI) target_link_libraries(IRCClient LibWeb LibGUI)

View file

@ -2,5 +2,5 @@ set(SOURCES
main.cpp main.cpp
) )
serenity_bin(KeyboardSettings) serenity_app(KeyboardSettings ICON app-keyboard-settings)
target_link_libraries(KeyboardSettings LibGUI LibKeyboard) target_link_libraries(KeyboardSettings LibGUI LibKeyboard)

View file

@ -10,5 +10,5 @@ set(SOURCES
WaveWidget.cpp WaveWidget.cpp
) )
serenity_bin(Piano) serenity_app(Piano ICON app-piano)
target_link_libraries(Piano LibAudio LibGUI) target_link_libraries(Piano LibAudio LibGUI)

View file

@ -23,5 +23,5 @@ set(SOURCES
Tool.cpp Tool.cpp
) )
serenity_bin(PixelPaint) serenity_app(PixelPaint ICON app-pixel-paint)
target_link_libraries(PixelPaint LibGUI LibGfx) target_link_libraries(PixelPaint LibGUI LibGfx)

View file

@ -3,5 +3,5 @@ set(SOURCES
QSWidget.cpp QSWidget.cpp
) )
serenity_bin(QuickShow) serenity_app(QuickShow ICON filetype-image)
target_link_libraries(QuickShow LibGUI LibGfx) target_link_libraries(QuickShow LibGUI LibGfx)

View file

@ -5,5 +5,5 @@ set(SOURCES
SoundPlayerWidget.cpp SoundPlayerWidget.cpp
) )
serenity_bin(SoundPlayer) serenity_app(SoundPlayer ICON app-sound-player)
target_link_libraries(SoundPlayer LibAudio LibGUI) target_link_libraries(SoundPlayer LibAudio LibGUI)

View file

@ -24,5 +24,5 @@ set(SOURCES
main.cpp main.cpp
) )
serenity_bin(Spreadsheet) serenity_app(Spreadsheet ICON app-spreadsheet)
target_link_libraries(Spreadsheet LibGUI LibJS LibWeb) target_link_libraries(Spreadsheet LibGUI LibJS LibWeb)

View file

@ -12,5 +12,5 @@ set(SOURCES
ThreadStackWidget.cpp ThreadStackWidget.cpp
) )
serenity_bin(SystemMonitor) serenity_app(SystemMonitor ICON app-system-monitor)
target_link_libraries(SystemMonitor LibGUI LibPCIDB) target_link_libraries(SystemMonitor LibGUI LibPCIDB)

View file

@ -2,5 +2,5 @@ set(SOURCES
main.cpp main.cpp
) )
serenity_bin(Terminal) serenity_app(Terminal ICON app-terminal)
target_link_libraries(Terminal LibGUI LibVT) target_link_libraries(Terminal LibGUI LibVT)

View file

@ -6,5 +6,5 @@ set(SOURCES
MainWindowGML.h MainWindowGML.h
) )
serenity_bin(TextEditor) serenity_app(TextEditor ICON app-text-editor)
target_link_libraries(TextEditor LibWeb LibMarkdown LibGUI LibShell LibRegex LibDesktop) target_link_libraries(TextEditor LibWeb LibMarkdown LibGUI LibShell LibRegex LibDesktop)

View file

@ -3,5 +3,5 @@ set(SOURCES
main.cpp main.cpp
) )
serenity_bin(ThemeEditor) serenity_app(ThemeEditor ICON app-theme-editor)
target_link_libraries(ThemeEditor LibGUI) target_link_libraries(ThemeEditor LibGUI)

View file

@ -164,6 +164,23 @@ function(serenity_bin target_name)
serenity_generated_sources(${target_name}) serenity_generated_sources(${target_name})
endfunction() endfunction()
function(serenity_app target_name)
cmake_parse_arguments(SERENITY_APP "" "ICON" "" ${ARGN})
serenity_bin("${target_name}")
set(small_icon "${CMAKE_SOURCE_DIR}/Base/res/icons/16x16/${SERENITY_APP_ICON}.png")
set(medium_icon "${CMAKE_SOURCE_DIR}/Base/res/icons/32x32/${SERENITY_APP_ICON}.png")
if (EXISTS "${small_icon}")
embed_resource("${target_name}" serenity_icon_s "${small_icon}")
endif()
if (EXISTS "${medium_icon}")
embed_resource("${target_name}" serenity_icon_m "${medium_icon}")
endif()
# TODO: Issue warnings if the app icons don't exist
endfunction()
function(compile_gml source output string_name) function(compile_gml source output string_name)
set(source ${CMAKE_CURRENT_SOURCE_DIR}/${source}) set(source ${CMAKE_CURRENT_SOURCE_DIR}/${source})
add_custom_command( add_custom_command(
@ -191,6 +208,19 @@ function(compile_ipc source output)
add_custom_target(generate_${output_name} DEPENDS ${output}) add_custom_target(generate_${output_name} DEPENDS ${output})
endfunction() endfunction()
function(embed_resource target section file)
get_filename_component(asm_file "${file}" NAME)
set(asm_file "${CMAKE_CURRENT_BINARY_DIR}/${target}-${section}.s")
get_filename_component(input_file "${file}" ABSOLUTE)
add_custom_command(
OUTPUT "${asm_file}"
COMMAND "${CMAKE_SOURCE_DIR}/Meta/generate-embedded-resource-assembly.sh" "${asm_file}" "${section}" "${input_file}"
DEPENDS "${input_file}" "${CMAKE_SOURCE_DIR}/Meta/generate-embedded-resource-assembly.sh"
COMMENT "Generating ${asm_file}"
)
target_sources("${target}" PRIVATE "${asm_file}")
endfunction()
find_program(CCACHE_PROGRAM ccache) find_program(CCACHE_PROGRAM ccache)
if(CCACHE_PROGRAM) if(CCACHE_PROGRAM)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")

View file

@ -2,5 +2,5 @@ set(SOURCES
Cube.cpp Cube.cpp
) )
serenity_bin(Cube) serenity_app(Cube ICON app-cube)
target_link_libraries(Cube LibGUI) target_link_libraries(Cube LibGUI)

View file

@ -3,5 +3,5 @@ set(SOURCES
EyesWidget.cpp EyesWidget.cpp
) )
serenity_bin(Eyes) serenity_app(Eyes ICON app-eyes)
target_link_libraries(Eyes LibGUI LibGfx) target_link_libraries(Eyes LibGUI LibGfx)

View file

@ -2,5 +2,5 @@ set(SOURCES
Fire.cpp Fire.cpp
) )
serenity_bin(Fire) serenity_app(Fire ICON app-fire)
target_link_libraries(Fire LibGUI LibCore LibGfx) target_link_libraries(Fire LibGUI LibCore LibGfx)

View file

@ -2,5 +2,5 @@ set(SOURCES
main.cpp main.cpp
) )
serenity_bin(HelloWorld) serenity_app(HelloWorld ICON app-hello-world)
target_link_libraries(HelloWorld LibGUI) target_link_libraries(HelloWorld LibGUI)

View file

@ -2,5 +2,5 @@ set(SOURCES
main.cpp main.cpp
) )
serenity_bin(LibGfxDemo) serenity_app(LibGfxDemo ICON app-libgfx-demo)
target_link_libraries(LibGfxDemo LibGUI LibIPC LibGfx LibCore) target_link_libraries(LibGfxDemo LibGUI LibIPC LibGfx LibCore)

View file

@ -2,5 +2,5 @@ set(SOURCES
main.cpp main.cpp
) )
serenity_bin(Mouse) serenity_app(Mouse ICON app-mouse)
target_link_libraries(Mouse LibGUI LibGfx) target_link_libraries(Mouse LibGUI LibGfx)

View file

@ -2,5 +2,5 @@ set(SOURCES
Screensaver.cpp Screensaver.cpp
) )
serenity_bin(Screensaver) serenity_app(Screensaver ICON app-screensaver)
target_link_libraries(Screensaver LibGUI LibCore LibGfx) target_link_libraries(Screensaver LibGUI LibCore LibGfx)

View file

@ -2,5 +2,5 @@ set(SOURCES
main.cpp main.cpp
) )
serenity_bin(WidgetGallery) serenity_app(WidgetGallery ICON app-widget-gallery)
target_link_libraries(WidgetGallery LibGUI) target_link_libraries(WidgetGallery LibGUI)

View file

@ -33,6 +33,6 @@ set(SOURCES
main.cpp main.cpp
) )
serenity_bin(HackStudio) serenity_app(HackStudio ICON app-hack-studio)
target_link_libraries(HackStudio LibWeb LibMarkdown LibGUI LibGfx LibCore LibVT LibDebug LibX86 LibDiff LibShell) target_link_libraries(HackStudio LibWeb LibMarkdown LibGUI LibGfx LibCore LibVT LibDebug LibX86 LibDiff LibShell)
add_dependencies(HackStudio CppLanguageServer) add_dependencies(HackStudio CppLanguageServer)

View file

@ -6,5 +6,5 @@ set(SOURCES
RemoteProcess.cpp RemoteProcess.cpp
) )
serenity_bin(Inspector) serenity_app(Inspector ICON app-inspector)
target_link_libraries(Inspector LibGUI) target_link_libraries(Inspector LibGUI)

View file

@ -6,5 +6,5 @@ set(SOURCES
ProfileTimelineWidget.cpp ProfileTimelineWidget.cpp
) )
serenity_bin(Profiler) serenity_app(Profiler ICON app-profiler)
target_link_libraries(Profiler LibGUI LibX86 LibCoreDump) target_link_libraries(Profiler LibGUI LibX86 LibCoreDump)

View file

@ -5,5 +5,5 @@ set(SOURCES
main.cpp main.cpp
) )
serenity_bin(2048) serenity_app(2048 ICON app-2048)
target_link_libraries(2048 LibGUI) target_link_libraries(2048 LibGUI)

View file

@ -4,5 +4,5 @@ set(SOURCES
LevelSelectDialog.cpp LevelSelectDialog.cpp
) )
serenity_bin(Breakout) serenity_app(Breakout ICON app-breakout)
target_link_libraries(Breakout LibGUI) target_link_libraries(Breakout LibGUI)

View file

@ -5,5 +5,5 @@ set(SOURCES
Engine.cpp Engine.cpp
) )
serenity_bin(Chess) serenity_app(Chess ICON app-chess)
target_link_libraries(Chess LibChess LibGUI LibCore) target_link_libraries(Chess LibChess LibGUI LibCore)

View file

@ -3,5 +3,5 @@ set(SOURCES
main.cpp main.cpp
) )
serenity_bin(Minesweeper) serenity_app(Minesweeper ICON app-minesweeper)
target_link_libraries(Minesweeper LibGUI) target_link_libraries(Minesweeper LibGUI)

View file

@ -3,5 +3,5 @@ set(SOURCES
Game.cpp Game.cpp
) )
serenity_bin(Pong) serenity_app(Pong ICON app-pong)
target_link_libraries(Pong LibGUI) target_link_libraries(Pong LibGUI)

View file

@ -3,5 +3,5 @@ set(SOURCES
SnakeGame.cpp SnakeGame.cpp
) )
serenity_bin(Snake) serenity_app(Snake ICON app-snake)
target_link_libraries(Snake LibGUI) target_link_libraries(Snake LibGUI)

View file

@ -5,5 +5,5 @@ set(SOURCES
SolitaireWidget.cpp SolitaireWidget.cpp
) )
serenity_bin(Solitaire) serenity_app(Solitaire ICON app-solitaire)
target_link_libraries(Solitaire LibGUI LibGfx LibCore) target_link_libraries(Solitaire LibGUI LibGfx LibCore)

View file

@ -0,0 +1,27 @@
#!/bin/bash
set -e
if [ -z "$1" ]; then
echo "ERROR: No output file specified"
exit 1
fi
OUTPUT_FILE="$1"
shift
rm -f "${OUTPUT_FILE}"
while (( "$#" >= 2)); do
SECTION_NAME="$1"
INPUT_FILE="$2"
{
printf ' .section %s\n' "${SECTION_NAME}"
printf ' .type %s, @object\n' "${SECTION_NAME}"
printf ' .align 4\n'
printf ' .incbin "%s"\n' "${INPUT_FILE}"
printf '\n'
} >> "${OUTPUT_FILE}"
shift 2
done