summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2025-09-07 08:24:32 +0800
committerGitHub <[email protected]>2025-09-07 08:24:32 +0800
commitb0bcb8b825b7538ad3523ce5b2cf8f4328fce6b8 (patch)
tree4e9454166ef8d61f684b6672498a2fa106c1890f
parent85c59645d59cfab5f61b5f75160b676621544890 (diff)
parentaa523879502d51a0f6d131c34825ed478cc59442 (diff)
Merge pull request #6779 from xmake-io/embeddirs
add #embed and embedirs support #6762
-rw-r--r--tests/projects/c/embeddirs/.gitignore8
-rw-r--r--tests/projects/c/embeddirs/assets/message.txt1
-rw-r--r--tests/projects/c/embeddirs/src/main.c14
-rw-r--r--tests/projects/c/embeddirs/xmake.lua9
-rw-r--r--xmake/languages/c/load.lua1
-rw-r--r--xmake/languages/c/xmake.lua1
-rw-r--r--xmake/modules/core/tools/gcc.lua5
7 files changed, 39 insertions, 0 deletions
diff --git a/tests/projects/c/embeddirs/.gitignore b/tests/projects/c/embeddirs/.gitignore
new file mode 100644
index 000000000..152105761
--- /dev/null
+++ b/tests/projects/c/embeddirs/.gitignore
@@ -0,0 +1,8 @@
+# Xmake cache
+.xmake/
+build/
+
+# MacOS Cache
+.DS_Store
+
+
diff --git a/tests/projects/c/embeddirs/assets/message.txt b/tests/projects/c/embeddirs/assets/message.txt
new file mode 100644
index 000000000..d2e2629bf
--- /dev/null
+++ b/tests/projects/c/embeddirs/assets/message.txt
@@ -0,0 +1 @@
+Hello from an embedded C23 file!
diff --git a/tests/projects/c/embeddirs/src/main.c b/tests/projects/c/embeddirs/src/main.c
new file mode 100644
index 000000000..b5d55e8c1
--- /dev/null
+++ b/tests/projects/c/embeddirs/src/main.c
@@ -0,0 +1,14 @@
+#include <stdio.h>
+#include <string.h>
+
+static const unsigned char message_data[] = {
+#embed "message.txt"
+ , '\0'
+};
+
+int main(int argc, char** argv) {
+ printf("Embedded message: %s\n", (const char*)message_data);
+ printf("Size of embedded data (including null terminator): %zu bytes\n", sizeof(message_data));
+ printf("Length of embedded string: %zu characters\n", strlen((const char*)message_data));
+ return 0;
+}
diff --git a/tests/projects/c/embeddirs/xmake.lua b/tests/projects/c/embeddirs/xmake.lua
new file mode 100644
index 000000000..1363e3db9
--- /dev/null
+++ b/tests/projects/c/embeddirs/xmake.lua
@@ -0,0 +1,9 @@
+add_rules("mode.debug", "mode.release")
+
+set_languages("c23")
+
+target("embeddirs")
+ set_kind("binary")
+ add_files("src/*.c")
+ add_embeddirs("assets")
+
diff --git a/xmake/languages/c/load.lua b/xmake/languages/c/load.lua
index 69bb815bb..a265f0dbd 100644
--- a/xmake/languages/c/load.lua
+++ b/xmake/languages/c/load.lua
@@ -100,6 +100,7 @@ function _get_apis()
, "target.add_includedirs"
, "target.add_sysincludedirs"
, "target.add_frameworkdirs"
+ , "target.add_embeddirs"
-- option.add_xxx
, "option.add_linkdirs"
, "option.add_includedirs"
diff --git a/xmake/languages/c/xmake.lua b/xmake/languages/c/xmake.lua
index 5f94df5c9..9225add1c 100644
--- a/xmake/languages/c/xmake.lua
+++ b/xmake/languages/c/xmake.lua
@@ -44,6 +44,7 @@ language("c")
, "target.languages"
, "target.pcheader"
, "target.includedirs"
+ , "target.embeddirs"
, "target.defines"
, "target.undefines"
, "target.frameworkdirs"
diff --git a/xmake/modules/core/tools/gcc.lua b/xmake/modules/core/tools/gcc.lua
index ed8bebdbc..e27fb3401 100644
--- a/xmake/modules/core/tools/gcc.lua
+++ b/xmake/modules/core/tools/gcc.lua
@@ -661,6 +661,11 @@ function nf_includedir(self, dir)
return {"-I" .. path.translate(dir)}
end
+-- make the embeddir flag
+function nf_embeddir(self, dir)
+ return {"--embed-dir=" .. path.translate(dir)}
+end
+
-- make the sysincludedir flag
function nf_sysincludedir(self, dir)
return {"-isystem", path.translate(dir)}