diff cmake/function/MalikaniaBuildAssets.cmake @ 49:2804ae55c70f

CMake: big cleanup, closes #598
author David Demelier <markand@malikania.fr>
date Fri, 09 Dec 2016 13:28:45 +0100
parents
children 858621081b95
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmake/function/MalikaniaBuildAssets.cmake	Fri Dec 09 13:28:45 2016 +0100
@@ -0,0 +1,61 @@
+#
+# MalikaniaBuildAssets.cmake -- CMake build system for malikania
+#
+# Copyright (c) 2013-2016 Malikania Authors
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+
+#
+# malikania_build_assets
+# ----------------------
+#
+# malikania_build_assets(inputs outputs)
+#
+# Create binary data as C++ arrays for inclusion in source code. Static assets
+# increases the executable size so use this when really needed.
+#
+# The macro iterates over the input data which can be any files and generates
+# outputs file in the form CMAKE_CURRENT_BINARY_DIR/assets/basename.cpp.
+#
+# The macro removes the extension from the filename and create a static array
+# with that name, thus you need to specify a filename that is compatible with
+# C++ identifiers!
+#
+# Correct:
+#   - myfile.png
+#   - startup_logo.png
+#
+# Incorrect:
+#   - useful-code.ogg
+#   - archive.tar.xz
+#
+# Note: this macro requires the target mlk-bcc (tools/bcc directory).
+#
+
+macro(malikania_build_assets inputs outputs)
+    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/assets)
+
+    foreach (in ${inputs})
+        get_filename_component(basename ${in} NAME_WE)
+        set(out ${CMAKE_CURRENT_BINARY_DIR}/assets/${basename}.cpp)
+        add_custom_command(
+            OUTPUT ${out}
+            COMMENT "Generating binary data from ${in}"
+            DEPENDS ${in}
+            COMMAND
+                $<TARGET_FILE:mlk-bcc> ${basename} ${in} ${out}
+        )
+        list(APPEND ${outputs} ${out})
+    endforeach ()
+endmacro()