Skip to content

Commit

Permalink
Merge pull request #177 from snprajwal/port-magicgen-script
Browse files Browse the repository at this point in the history
chore(magicgen): migrate script to Python
  • Loading branch information
rst0git committed Jul 17, 2024
2 parents e2c048f + 76a006a commit 664a3fd
Show file tree
Hide file tree
Showing 7 changed files with 170 additions and 234 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@ scripts/magic-gen/expected.go
scripts/magic-gen/output.go
crit/bin
crit/test-imgs/
__pycache__
14 changes: 7 additions & 7 deletions scripts/magic-gen/Makefile
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
GO ?= go
PY ?= python3

MAGIC_DEST ?= ../../magic/magic.go

magic-gen: clean magic.h
$(GO) run magicgen.go magic.h $(MAGIC_DEST)
magic-gen: clean magic.h magicgen.py
@$(PY) magicgen.py magic.h $(MAGIC_DEST)

magic.h:
curl -s https://raw.githubusercontent.com/checkpoint-restore/criu/criu-dev/criu/include/magic.h -o magic.h

test:
@echo "Running unit test"
$(GO) test -v
@echo "Running E2E test"
test: test_magicgen.py magicgen-test.sh
@echo "Running unit tests..."
@$(PY) test_magicgen.py
@echo "Running E2E tests..."
@./magicgen-test.sh
@rm -f input.h output.go expected.go

Expand Down
10 changes: 3 additions & 7 deletions scripts/magic-gen/magicgen-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,14 @@ func LoadMagic() MagicMap {
}
EOF

if [ -n "$GOCOVERDIR" ]; then
export LOCALFLAGS="-cover"
fi

go run $LOCALFLAGS magicgen.go input.h output.go
python3 magicgen.py input.h output.go
cmp output.go expected.go
if [[ $? -eq 0 ]]
then
echo "PASS"
echo "---PASS---"
exit 0
else
echo "FAIL"
echo "---FAIL---"
diff output.go expected.go
exit 1
fi
110 changes: 0 additions & 110 deletions scripts/magic-gen/magicgen.go

This file was deleted.

86 changes: 86 additions & 0 deletions scripts/magic-gen/magicgen.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
import sys
import re
import argparse


def main():
parser = argparse.ArgumentParser(
description="A script to generate Go bindings for the CRIU magic values provided by magic.h"
)
parser.add_argument("src", help="Input path (magic.h)", type=str)
parser.add_argument("dest", help="Output path (magic.go)", type=str)

args = parser.parse_args()

try:
with open(args.src, "r") as src:
magics = read_magics(src)
except IOError:
sys.exit("Failed to open magic.h")

try:
with open(args.dest, "w") as dest:
write_magics(dest, magics)
except IOError:
sys.exit("Failed to open magic.py")


def read_magics(src):
magics = {}
# The magic.h header file contains lines like below:
# #define MAGIC_NAME MAGIC_VALUE
# where the magic value can be a hexadecimal or regular
# integer value. The regex below matches lines in the
# header and extracts the name and value as regex groups.
pattern = re.compile(r"#define\s+(\S+)\s+(0x[0-9A-Fa-f]+|\d+)")

for line in src:
match = pattern.match(line)
if match:
name = match.group(1)
value_str = match.group(2)
# If the magic is defined as another magic, skip it
if value_str in magics:
continue
try:
value = int(value_str, 16)
magics[name] = value
except ValueError:
print(f"Failed to parse magic {name}")
continue

return magics


def write_magics(dest, magics):
dest.write(
"""// Code generated by magicgen. DO NOT EDIT.
package magic
type MagicMap struct {
\tByName map[string]uint64
\tByValue map[uint64]string
}
func LoadMagic() MagicMap {
\tmagicMap := MagicMap{
\t\tByName: make(map[string]uint64),
\t\tByValue: make(map[uint64]string),
\t}"""
)

for name in sorted(magics.keys()):
value = magics[name]
# Ignore RAW_IMAGE_MAGIC and V1 magic
if value == 0 or value == 1:
continue
name = name.replace("_MAGIC", "")
dest.write(f'\n\tmagicMap.ByName["{name}"] = {value}')
dest.write(f'\n\tmagicMap.ByValue[{value}] = "{name}"')

dest.write("\n\treturn magicMap\n}\n")


if __name__ == "__main__":
main()
110 changes: 0 additions & 110 deletions scripts/magic-gen/magicgen_test.go

This file was deleted.

Loading

0 comments on commit 664a3fd

Please sign in to comment.