Add WUFFS_CONFIG__MODULE__BASE__ETC sub-modules
$ ls -l gen/lib/c/*/{lib*,*base*} | awk '{print $5 " " $9}'
Before:
167976 gen/lib/c/clang-5.0-dynamic/libwuffs.so
40824 gen/lib/c/clang-5.0-dynamic/wuffs-base.lo
203306 gen/lib/c/clang-5.0-static/libwuffs.a
41816 gen/lib/c/clang-5.0-static/wuffs-base.o
188080 gen/lib/c/gcc-dynamic/libwuffs.so
53976 gen/lib/c/gcc-dynamic/wuffs-base.lo
230002 gen/lib/c/gcc-static/libwuffs.a
53976 gen/lib/c/gcc-static/wuffs-base.o
After:
168024 gen/lib/c/clang-5.0-dynamic/libwuffs.so
20664 gen/lib/c/clang-5.0-dynamic/wuffs-base-core.lo
10784 gen/lib/c/clang-5.0-dynamic/wuffs-base-f64conv.lo
11640 gen/lib/c/clang-5.0-dynamic/wuffs-base-pixconv.lo
205752 gen/lib/c/clang-5.0-static/libwuffs.a
20960 gen/lib/c/clang-5.0-static/wuffs-base-core.o
11024 gen/lib/c/clang-5.0-static/wuffs-base-f64conv.o
12096 gen/lib/c/clang-5.0-static/wuffs-base-pixconv.o
188128 gen/lib/c/gcc-dynamic/libwuffs.so
18936 gen/lib/c/gcc-dynamic/wuffs-base-core.lo
10672 gen/lib/c/gcc-dynamic/wuffs-base-f64conv.lo
27232 gen/lib/c/gcc-dynamic/wuffs-base-pixconv.lo
232984 gen/lib/c/gcc-static/libwuffs.a
18920 gen/lib/c/gcc-static/wuffs-base-core.o
10640 gen/lib/c/gcc-static/wuffs-base-f64conv.o
27216 gen/lib/c/gcc-static/wuffs-base-pixconv.o
diff --git a/cmd/wuffs-c/genlib.go b/cmd/wuffs-c/genlib.go
index a7bb1d5..31a1712 100644
--- a/cmd/wuffs-c/genlib.go
+++ b/cmd/wuffs-c/genlib.go
@@ -22,6 +22,8 @@
"path/filepath"
"strings"
+ "github.com/google/wuffs/internal/cgen"
+
cf "github.com/google/wuffs/cmd/commonflags"
)
@@ -35,9 +37,15 @@
}
args = flags.Args()
- filenames := make([]string, len(args))
- for i, arg := range args {
- filenames[i] = "wuffs-" + strings.Replace(filepath.ToSlash(arg), "/", "-", -1)
+ filenames := []string(nil)
+ for _, arg := range args {
+ if arg != "base" {
+ filenames = append(filenames, "wuffs-"+strings.Replace(filepath.ToSlash(arg), "/", "-", -1))
+ } else {
+ for _, subModule := range cgen.BaseSubModules {
+ filenames = append(filenames, "wuffs-base-"+subModule)
+ }
+ }
}
if *dstdirFlag == "" {
@@ -83,11 +91,24 @@
func genObj(outDir string, inDir string, cc string, dynamism string, filenames []string) error {
for _, filename := range filenames {
- in := filepath.Join(inDir, filename+".c")
+ in := ""
out := genlibOutFilename(outDir, dynamism, filename)
args := []string(nil)
args = append(args, "-O3", "-std=c99", "-DWUFFS_IMPLEMENTATION")
+
+ const wuffsBasePrefix = "wuffs-base-"
+ if strings.HasPrefix(filename, wuffsBasePrefix) {
+ in = filepath.Join(inDir, "wuffs-base.c")
+ suffix := filename[len(wuffsBasePrefix):]
+ args = append(args,
+ "-DWUFFS_CONFIG__MODULES",
+ "-DWUFFS_CONFIG__MODULE__BASE__"+strings.ToUpper(suffix),
+ )
+ } else {
+ in = filepath.Join(inDir, filename+".c")
+ }
+
if dynamism == "dynamic" {
args = append(args, "-fPIC", "-DPIC")
}
diff --git a/doc/changelog.md b/doc/changelog.md
index c80763d..3e1d713 100644
--- a/doc/changelog.md
+++ b/doc/changelog.md
@@ -3,6 +3,7 @@
## Work In Progress
+- Added `WUFFS_CONFIG__MODULE__BASE__ETC` sub-modules.
- Added `WUFFS_BASE__PIXEL_BLEND__SRC_OVER`.
- Added `WUFFS_BASE__PIXEL_FORMAT__BGR_565`.
- Added `base` library support for UTF-8.
diff --git a/internal/cgen/base/all-impl.c b/internal/cgen/base/all-impl.c
index 894207d..931bd1e 100644
--- a/internal/cgen/base/all-impl.c
+++ b/internal/cgen/base/all-impl.c
@@ -62,7 +62,8 @@
// ----------------
-#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE)
+#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE) || \
+ defined(WUFFS_CONFIG__MODULE__BASE__CORE)
const uint8_t wuffs_base__low_bits_mask__u8[9] = {
0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF,
@@ -116,21 +117,26 @@
// !! INSERT base/strconv-impl.c.
#endif // !defined(WUFFS_CONFIG__MODULES) ||
- // defined(WUFFS_CONFIG__MODULE__BASE)
+ // defined(WUFFS_CONFIG__MODULE__BASE) ||
+ // defined(WUFFS_CONFIG__MODULE__BASE__CORE)
-#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE)
+#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE) || \
+ defined(WUFFS_CONFIG__MODULE__BASE__F64CONV)
// !! INSERT base/f64conv-submodule.c.
#endif // !defined(WUFFS_CONFIG__MODULES) ||
- // defined(WUFFS_CONFIG__MODULE__BASE)
+ // defined(WUFFS_CONFIG__MODULE__BASE) ||
+ // defined(WUFFS_CONFIG__MODULE__BASE__F64CONV)
-#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE)
+#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE) || \
+ defined(WUFFS_CONFIG__MODULE__BASE__PIXCONV)
// !! INSERT base/pixconv-submodule.c.
#endif // !defined(WUFFS_CONFIG__MODULES) ||
- // defined(WUFFS_CONFIG__MODULE__BASE)
+ // defined(WUFFS_CONFIG__MODULE__BASE) ||
+ // defined(WUFFS_CONFIG__MODULE__BASE__PIXCONV)
#ifdef __cplusplus
} // extern "C"
diff --git a/internal/cgen/cgen.go b/internal/cgen/cgen.go
index 7f6491d..916c831 100644
--- a/internal/cgen/cgen.go
+++ b/internal/cgen/cgen.go
@@ -93,6 +93,14 @@
iopPrefix = "iop_" // Pointer.
)
+// BaseSubModules is the list of lower-cased XXX's in the base module's
+// WUFFS_CONFIG__MODULE__BASE__XXX sub-modules.
+var BaseSubModules = []string{
+ "core",
+ "f64conv",
+ "pixconv",
+}
+
// Do transpiles a Wuffs program to a C program.
//
// The arguments list the source Wuffs files. If no arguments are given, it
diff --git a/internal/cgen/data.go b/internal/cgen/data.go
index 9d08a41..c4c364d 100644
--- a/internal/cgen/data.go
+++ b/internal/cgen/data.go
@@ -21,10 +21,10 @@
"" +
"// ----------------\n\n#ifdef __cplusplus\n} // extern \"C\"\n#endif\n\n// WUFFS C HEADER ENDS HERE.\n#ifdef WUFFS_IMPLEMENTATION\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n// !! INSERT base/all-private.h.\n\n" +
"" +
- "// ----------------\n\n#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE)\n\nconst uint8_t wuffs_base__low_bits_mask__u8[9] = {\n 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF,\n};\n\nconst uint16_t wuffs_base__low_bits_mask__u16[17] = {\n 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF,\n 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF,\n};\n\nconst uint32_t wuffs_base__low_bits_mask__u32[33] = {\n 0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000F, 0x0000001F,\n 0x0000003F, 0x0000007F, 0x000000FF, 0x000001FF, 0x000003FF, 0x000007FF,\n 0x00000FFF, 0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF, 0x0001FFFF,\n 0x0003FFFF, 0x0007FFFF, 0x000FFFFF, 0x001FFFFF, 0x003FFFFF, 0x007FFFFF,\n 0x00FFFFFF, 0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF, 0x0FFFFFFF, 0x1FFFFFFF,\n 0x3FFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF,\n};\n\nconst uint64_t wuffs_base__low_bits_mask__u64[65] = {\n 0x0000000000000000, 0x0000000000000001, 0x0000000000000003,\n 0x0000000000" +
- "000007, 0x000000000000000F, 0x000000000000001F,\n 0x000000000000003F, 0x000000000000007F, 0x00000000000000FF,\n 0x00000000000001FF, 0x00000000000003FF, 0x00000000000007FF,\n 0x0000000000000FFF, 0x0000000000001FFF, 0x0000000000003FFF,\n 0x0000000000007FFF, 0x000000000000FFFF, 0x000000000001FFFF,\n 0x000000000003FFFF, 0x000000000007FFFF, 0x00000000000FFFFF,\n 0x00000000001FFFFF, 0x00000000003FFFFF, 0x00000000007FFFFF,\n 0x0000000000FFFFFF, 0x0000000001FFFFFF, 0x0000000003FFFFFF,\n 0x0000000007FFFFFF, 0x000000000FFFFFFF, 0x000000001FFFFFFF,\n 0x000000003FFFFFFF, 0x000000007FFFFFFF, 0x00000000FFFFFFFF,\n 0x00000001FFFFFFFF, 0x00000003FFFFFFFF, 0x00000007FFFFFFFF,\n 0x0000000FFFFFFFFF, 0x0000001FFFFFFFFF, 0x0000003FFFFFFFFF,\n 0x0000007FFFFFFFFF, 0x000000FFFFFFFFFF, 0x000001FFFFFFFFFF,\n 0x000003FFFFFFFFFF, 0x000007FFFFFFFFFF, 0x00000FFFFFFFFFFF,\n 0x00001FFFFFFFFFFF, 0x00003FFFFFFFFFFF, 0x00007FFFFFFFFFFF,\n 0x0000FFFFFFFFFFFF, 0x0001FFFFFFFFFFFF, 0x0003FFFFFFFFFFFF,\n 0x0007FFFFFF" +
- "FFFFFF, 0x000FFFFFFFFFFFFF, 0x001FFFFFFFFFFFFF,\n 0x003FFFFFFFFFFFFF, 0x007FFFFFFFFFFFFF, 0x00FFFFFFFFFFFFFF,\n 0x01FFFFFFFFFFFFFF, 0x03FFFFFFFFFFFFFF, 0x07FFFFFFFFFFFFFF,\n 0x0FFFFFFFFFFFFFFF, 0x1FFFFFFFFFFFFFFF, 0x3FFFFFFFFFFFFFFF,\n 0x7FFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,\n};\n\n// !! INSERT wuffs_base__status strings.\n\n// !! INSERT InterfaceDefinitions.\n\n// !! INSERT base/image-impl.c.\n\n// !! INSERT base/strconv-impl.c.\n\n#endif // !defined(WUFFS_CONFIG__MODULES) ||\n // defined(WUFFS_CONFIG__MODULE__BASE)\n\n#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE)\n\n// !! INSERT base/f64conv-submodule.c.\n\n#endif // !defined(WUFFS_CONFIG__MODULES) ||\n // defined(WUFFS_CONFIG__MODULE__BASE)\n\n#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE)\n\n// !! INSERT base/pixconv-submodule.c.\n\n#endif // !defined(WUFFS_CONFIG__MODULES) ||\n // defined(WUFFS_CONFIG__MODULE__BASE)\n\n#ifdef __cplusplus\n} // extern \"C\"\n#endif\n\n#endif // WUFFS_IMPLEMENTATION\n" +
- "\n// !! WUFFS MONOLITHIC RELEASE DISCARDS EVERYTHING BELOW.\n\n#endif // WUFFS_INCLUDE_GUARD__BASE\n" +
+ "// ----------------\n\n#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE) || \\\n defined(WUFFS_CONFIG__MODULE__BASE__CORE)\n\nconst uint8_t wuffs_base__low_bits_mask__u8[9] = {\n 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF,\n};\n\nconst uint16_t wuffs_base__low_bits_mask__u16[17] = {\n 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF,\n 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF,\n};\n\nconst uint32_t wuffs_base__low_bits_mask__u32[33] = {\n 0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000F, 0x0000001F,\n 0x0000003F, 0x0000007F, 0x000000FF, 0x000001FF, 0x000003FF, 0x000007FF,\n 0x00000FFF, 0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF, 0x0001FFFF,\n 0x0003FFFF, 0x0007FFFF, 0x000FFFFF, 0x001FFFFF, 0x003FFFFF, 0x007FFFFF,\n 0x00FFFFFF, 0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF, 0x0FFFFFFF, 0x1FFFFFFF,\n 0x3FFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF,\n};\n\nconst uint64_t wuffs_base__low_bits_mask__u64[65] = {\n 0x0000000000000000, 0x000" +
+ "0000000000001, 0x0000000000000003,\n 0x0000000000000007, 0x000000000000000F, 0x000000000000001F,\n 0x000000000000003F, 0x000000000000007F, 0x00000000000000FF,\n 0x00000000000001FF, 0x00000000000003FF, 0x00000000000007FF,\n 0x0000000000000FFF, 0x0000000000001FFF, 0x0000000000003FFF,\n 0x0000000000007FFF, 0x000000000000FFFF, 0x000000000001FFFF,\n 0x000000000003FFFF, 0x000000000007FFFF, 0x00000000000FFFFF,\n 0x00000000001FFFFF, 0x00000000003FFFFF, 0x00000000007FFFFF,\n 0x0000000000FFFFFF, 0x0000000001FFFFFF, 0x0000000003FFFFFF,\n 0x0000000007FFFFFF, 0x000000000FFFFFFF, 0x000000001FFFFFFF,\n 0x000000003FFFFFFF, 0x000000007FFFFFFF, 0x00000000FFFFFFFF,\n 0x00000001FFFFFFFF, 0x00000003FFFFFFFF, 0x00000007FFFFFFFF,\n 0x0000000FFFFFFFFF, 0x0000001FFFFFFFFF, 0x0000003FFFFFFFFF,\n 0x0000007FFFFFFFFF, 0x000000FFFFFFFFFF, 0x000001FFFFFFFFFF,\n 0x000003FFFFFFFFFF, 0x000007FFFFFFFFFF, 0x00000FFFFFFFFFFF,\n 0x00001FFFFFFFFFFF, 0x00003FFFFFFFFFFF, 0x00007FFFFFFFFFFF,\n 0x0000FFFFFFFFFFFF, 0x000" +
+ "1FFFFFFFFFFFF, 0x0003FFFFFFFFFFFF,\n 0x0007FFFFFFFFFFFF, 0x000FFFFFFFFFFFFF, 0x001FFFFFFFFFFFFF,\n 0x003FFFFFFFFFFFFF, 0x007FFFFFFFFFFFFF, 0x00FFFFFFFFFFFFFF,\n 0x01FFFFFFFFFFFFFF, 0x03FFFFFFFFFFFFFF, 0x07FFFFFFFFFFFFFF,\n 0x0FFFFFFFFFFFFFFF, 0x1FFFFFFFFFFFFFFF, 0x3FFFFFFFFFFFFFFF,\n 0x7FFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,\n};\n\n// !! INSERT wuffs_base__status strings.\n\n// !! INSERT InterfaceDefinitions.\n\n// !! INSERT base/image-impl.c.\n\n// !! INSERT base/strconv-impl.c.\n\n#endif // !defined(WUFFS_CONFIG__MODULES) ||\n // defined(WUFFS_CONFIG__MODULE__BASE) ||\n // defined(WUFFS_CONFIG__MODULE__BASE__CORE)\n\n#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE) || \\\n defined(WUFFS_CONFIG__MODULE__BASE__F64CONV)\n\n// !! INSERT base/f64conv-submodule.c.\n\n#endif // !defined(WUFFS_CONFIG__MODULES) ||\n // defined(WUFFS_CONFIG__MODULE__BASE) ||\n // defined(WUFFS_CONFIG__MODULE__BASE__F64CONV)\n\n#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODU" +
+ "LE__BASE) || \\\n defined(WUFFS_CONFIG__MODULE__BASE__PIXCONV)\n\n// !! INSERT base/pixconv-submodule.c.\n\n#endif // !defined(WUFFS_CONFIG__MODULES) ||\n // defined(WUFFS_CONFIG__MODULE__BASE) ||\n // defined(WUFFS_CONFIG__MODULE__BASE__PIXCONV)\n\n#ifdef __cplusplus\n} // extern \"C\"\n#endif\n\n#endif // WUFFS_IMPLEMENTATION\n\n// !! WUFFS MONOLITHIC RELEASE DISCARDS EVERYTHING BELOW.\n\n#endif // WUFFS_INCLUDE_GUARD__BASE\n" +
""
const baseImageImplC = "" +
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index b5161ef..54289f1 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -7849,7 +7849,8 @@
// ----------------
-#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE)
+#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE) || \
+ defined(WUFFS_CONFIG__MODULE__BASE__CORE)
const uint8_t wuffs_base__low_bits_mask__u8[9] = {
0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF,
@@ -9273,9 +9274,11 @@
}
#endif // !defined(WUFFS_CONFIG__MODULES) ||
- // defined(WUFFS_CONFIG__MODULE__BASE)
+ // defined(WUFFS_CONFIG__MODULE__BASE) ||
+ // defined(WUFFS_CONFIG__MODULE__BASE__CORE)
-#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE)
+#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE) || \
+ defined(WUFFS_CONFIG__MODULE__BASE__F64CONV)
// ---------------- IEEE 754 Floating Point
@@ -10527,9 +10530,11 @@
}
#endif // !defined(WUFFS_CONFIG__MODULES) ||
- // defined(WUFFS_CONFIG__MODULE__BASE)
+ // defined(WUFFS_CONFIG__MODULE__BASE) ||
+ // defined(WUFFS_CONFIG__MODULE__BASE__F64CONV)
-#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE)
+#if !defined(WUFFS_CONFIG__MODULES) || defined(WUFFS_CONFIG__MODULE__BASE) || \
+ defined(WUFFS_CONFIG__MODULE__BASE__PIXCONV)
// ---------------- Pixel Swizzler
@@ -11707,7 +11712,8 @@
}
#endif // !defined(WUFFS_CONFIG__MODULES) ||
- // defined(WUFFS_CONFIG__MODULE__BASE)
+ // defined(WUFFS_CONFIG__MODULE__BASE) ||
+ // defined(WUFFS_CONFIG__MODULE__BASE__PIXCONV)
#ifdef __cplusplus
} // extern "C"