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
)
serenity_bin(Browser)
serenity_app(Browser ICON app-browser)
target_link_libraries(Browser LibWeb LibProtocol LibGUI LibDesktop)

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -164,6 +164,23 @@ function(serenity_bin target_name)
serenity_generated_sources(${target_name})
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)
set(source ${CMAKE_CURRENT_SOURCE_DIR}/${source})
add_custom_command(
@ -191,6 +208,19 @@ function(compile_ipc source output)
add_custom_target(generate_${output_name} DEPENDS ${output})
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)
if(CCACHE_PROGRAM)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -33,6 +33,6 @@ set(SOURCES
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)
add_dependencies(HackStudio CppLanguageServer)

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -5,5 +5,5 @@ set(SOURCES
SolitaireWidget.cpp
)
serenity_bin(Solitaire)
serenity_app(Solitaire ICON app-solitaire)
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