Skip to content

Commit db58a02

Browse files
Merge pull request #211 from riscv/209-params-json-to-adoc
209 params json to adoc
2 parents 1108f25 + 4c7d8f4 commit db58a02

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+2717
-2742
lines changed

Makefile

Lines changed: 79 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ PARAMS_TESTS_DIR := $(TESTS_DIR)/params
2323
TAGS_TESTS_DIR := $(TESTS_DIR)/tags
2424
TAG_CHANGES_TESTS_DIR := $(TESTS_DIR)/tag-changes
2525
ADOC2HTML_TESTS_DIR := $(TESTS_DIR)/adoc2html
26+
SHARED_UTILS_TESTS_DIR := $(TESTS_DIR)/shared_utils
27+
TEXT_TO_HTML_TESTS_DIR := $(TESTS_DIR)/text_to_html
2628
NORM_RULE_DEF_DIR := $(NORM_RULE_TESTS_DIR)
2729
NORM_RULE_EXPECTED_DIR := $(NORM_RULE_TESTS_DIR)/expected
2830
PARAMS_DEF_DIR := $(PARAMS_TESTS_DIR)
@@ -36,6 +38,11 @@ DETECT_TAG_CHANGES_TOOL := $(TOOLS_DIR)/detect_tag_changes.py
3638
DETECT_TAG_CHANGES_PYTHON := python3 $(DETECT_TAG_CHANGES_TOOL)
3739
CREATE_PARAMS_TOOL := $(TOOLS_DIR)/create_params.py
3840
CREATE_PARAMS_PYTHON := python3 $(CREATE_PARAMS_TOOL)
41+
CREATE_PARAM_ADOC_FILES_TOOL := $(TOOLS_DIR)/create_param_appendix.py
42+
CREATE_PARAM_ADOC_FILES_PYTHON := python3 $(CREATE_PARAM_ADOC_FILES_TOOL)
43+
PARAM_ADOC_TEST_SCRIPT := $(PARAMS_TESTS_DIR)/test_param_appendix.py
44+
PARAM_ADOC_TEST_PYTHON := python3 $(PARAM_ADOC_TEST_SCRIPT)
45+
PARAMS_ADOC_TEMPLATE := $(PARAMS_TESTS_DIR)/test-param-appendix-template.adoc
3946

4047
# Stuff for building test standards document in HTML to have links into it.
4148
DOCS = test-ch1 test-ch2
@@ -78,6 +85,9 @@ BUILT_NORM_RULES_HTML := $(BUILD_DIR)/$(NORM_RULE_HTML_OUTPUT_FNAME)
7885
BUILT_NORM_RULES_TAGS_NO_RULES := $(BUILD_DIR)/$(NORM_RULE_TAGS_NO_RULES_OUTPUT_FNAME)
7986
BUILT_PARAMS_JSON := $(BUILD_DIR)/$(PARAMS_JSON_OUTPUT_FNAME)
8087
BUILT_PARAMS_HTML := $(BUILD_DIR)/$(PARAMS_HTML_OUTPUT_FNAME)
88+
BUILT_PARAM_ADOC_DIR := $(BUILD_DIR)/test-param-appendix-adoc-includes
89+
BUILT_PARAM_ADOC_STAMP := $(BUILD_DIR)/test-param-adoc.done
90+
BUILT_PARAMS_ADOC := $(BUILD_DIR)/test-param-appendix.adoc
8191

8292
# Combine separate fnames into lists.
8393
BUILT_TEST_HTML_FNAMES := $(BUILT_TEST_CH1_HTML_FNAME) $(BUILT_TEST_CH2_HTML_FNAME)
@@ -91,12 +101,18 @@ EXPECTED_NORM_RULES_JSON := $(NORM_RULE_EXPECTED_DIR)/$(NORM_RULE_JSON_OUTPUT_FN
91101
EXPECTED_NORM_RULES_HTML := $(NORM_RULE_EXPECTED_DIR)/$(NORM_RULE_HTML_OUTPUT_FNAME)
92102
EXPECTED_PARAMS_JSON := $(PARAMS_EXPECTED_DIR)/$(PARAMS_JSON_OUTPUT_FNAME)
93103
EXPECTED_PARAMS_HTML := $(PARAMS_EXPECTED_DIR)/$(PARAMS_HTML_OUTPUT_FNAME)
104+
EXPECTED_PARAMS_ADOC := $(PARAMS_EXPECTED_DIR)/test-param-appendix.adoc
105+
EXPECTED_PARAM_ADOC_DIR := $(PARAMS_EXPECTED_DIR)/test-param-appendix-adoc-includes
94106

95107
# Normative rule definition input YAML files.
96108
GOOD_NORM_RULE_DEF_FILES := $(NORM_RULE_DEF_DIR)/test-ch1.yaml $(NORM_RULE_DEF_DIR)/test-ch2.yaml
97109
BAD_NORM_RULE_DEF_FILES := $(NORM_RULE_DEF_DIR)/missing_tag_refs.yaml
98110
PARAM_DEF_TEST_FILES := $(PARAMS_TESTS_DIR)/test-ch1.yaml $(PARAMS_TESTS_DIR)/test-ch2.yaml
99111
ADOC2HTML_TEST_SCRIPT := $(ADOC2HTML_TESTS_DIR)/test_adoc_to_html.py
112+
SHARED_UTILS_TEST_SCRIPT := $(SHARED_UTILS_TESTS_DIR)/test_shared_utils.py
113+
ADOC_TO_HTML_UNIT_TEST_SCRIPT := $(TEXT_TO_HTML_TESTS_DIR)/test_adoc_to_html_unit.py
114+
DEF_TEXT_TO_HTML_UNIT_TEST_SCRIPT := $(TEXT_TO_HTML_TESTS_DIR)/test_def_text_to_html_unit.py
115+
TAG_TEXT_TO_HTML_UNIT_TEST_SCRIPT := $(TEXT_TO_HTML_TESTS_DIR)/test_tag_text_to_html_unit.py
100116

101117
# Add -t to each normative tag input filename and add prefix of "/" to make into absolute pathname.
102118
NORM_TAG_FILE_ARGS := $(foreach relative_pname,$(BUILT_TEST_NORM_TAGS_FNAMES),-t /$(relative_pname))
@@ -174,21 +190,22 @@ all: test
174190

175191
# Build tests and compare against expected
176192
.PHONY: test
177-
test: build-tests compare-tests test-tag-changes test-adoc2html
193+
test: build-tests compare-tests test-tag-changes test-adoc2html test-shared-utils test-text-to-html
178194

179195
# Build tests
180-
.PHONY: build-tests build-test-tags build-test-norm-rules-json build-test-norm-rules-html build-test-tags-without-rules build-test-params-json build-test-params-html
181-
build-tests: build-test-tags build-test-norm-rules-json build-test-norm-rules-html build-test-tags-without-rules build-test-params-json build-test-params-html
196+
.PHONY: build-tests build-test-tags build-test-norm-rules-json build-test-norm-rules-html build-test-tags-without-rules build-test-params-json build-test-params-html build-test-param-adoc
197+
build-tests: build-test-tags build-test-norm-rules-json build-test-norm-rules-html build-test-tags-without-rules build-test-params-json build-test-params-html build-test-param-adoc
182198
build-test-tags: $(BUILT_TEST_NORM_TAGS_FNAMES) $(BUILT_DUPLICATE_NORM_TAGS_FNAME)
183199
build-test-norm-rules-json: $(BUILT_NORM_RULES_JSON)
184200
build-test-norm-rules-html: $(BUILT_NORM_RULES_HTML)
185201
build-test-tags-without-rules: $(BUILT_NORM_RULES_TAGS_NO_RULES)
186202
build-test-params-json: $(BUILT_PARAMS_JSON)
187203
build-test-params-html: $(BUILT_PARAMS_HTML)
204+
build-test-param-adoc: $(BUILT_PARAM_ADOC_STAMP)
188205

189206
# Compare tests against expected
190207
.PHONY: compare-tests
191-
compare-tests: compare-test-tags compare-test-norm-rules-json compare-test-norm-rules-html compare-test-params-json compare-test-params-html
208+
compare-tests: compare-test-tags compare-test-norm-rules-json compare-test-norm-rules-html compare-test-params-json compare-test-params-html compare-test-params-adoc compare-test-param-adoc-files
192209

193210
.PHONY: compare-test-tags
194211
compare-test-tags: compare-test-ch1-tags compare-test-ch2-tags
@@ -223,6 +240,16 @@ compare-test-params-html: $(EXPECTED_PARAMS_HTML) $(BUILT_PARAMS_HTML)
223240
@echo "CHECKING HTML BUILT PARAMS AGAINST EXPECTED PARAMS"
224241
diff $(EXPECTED_PARAMS_HTML) $(BUILT_PARAMS_HTML) && echo "diff PASSED" || (echo "diff FAILED"; exit 1)
225242

243+
.PHONY: compare-test-params-adoc
244+
compare-test-params-adoc: $(EXPECTED_PARAMS_ADOC) $(BUILT_PARAMS_ADOC)
245+
@echo "CHECKING PARAMS ADOC AGAINST EXPECTED"
246+
diff $(EXPECTED_PARAMS_ADOC) $(BUILT_PARAMS_ADOC) && echo "diff PASSED" || (echo "diff FAILED"; exit 1)
247+
248+
.PHONY: compare-test-param-adoc-files
249+
compare-test-param-adoc-files: $(EXPECTED_PARAM_ADOC_DIR) $(BUILT_PARAM_ADOC_DIR)
250+
@echo "CHECKING GENERATED PARAM ADOC FILES AGAINST EXPECTED"
251+
diff -r $(EXPECTED_PARAM_ADOC_DIR) $(BUILT_PARAM_ADOC_DIR) && echo "diff PASSED" || (echo "diff FAILED"; exit 1)
252+
226253
# Test tag change detection
227254
.PHONY: test-tag-changes test-tag-changes-basic test-tag-changes-verbose test-tag-changes-no-changes test-tag-changes-additions-only test-tag-changes-whitespace-only test-tag-changes-formatting-only test-tag-changes-update
228255
test-tag-changes: test-tag-changes-basic test-tag-changes-verbose test-tag-changes-no-changes test-tag-changes-additions-only test-tag-changes-whitespace-only test-tag-changes-formatting-only test-tag-changes-update
@@ -264,9 +291,34 @@ test-adoc2html: $(ADOC2HTML_TEST_SCRIPT) $(TOOLS_DIR)/adoc_to_html.py
264291
@echo "TESTING ADOC2HTML CONVERSION"
265292
python3 $(ADOC2HTML_TEST_SCRIPT) && echo "test-adoc2html PASSED" || (echo "test-adoc2html FAILED"; exit 1)
266293

294+
# Test shared_utils helpers in isolation.
295+
.PHONY: test-shared-utils
296+
test-shared-utils: $(SHARED_UTILS_TEST_SCRIPT) $(TOOLS_DIR)/shared_utils.py
297+
@echo "TESTING SHARED_UTILS HELPERS"
298+
python3 $(SHARED_UTILS_TEST_SCRIPT) && echo "test-shared-utils PASSED" || (echo "test-shared-utils FAILED"; exit 1)
299+
300+
# Test converter helpers in isolation.
301+
.PHONY: test-text-to-html
302+
test-text-to-html: test-adoc-to-html-unit test-def-text-to-html-unit test-tag-text-to-html-unit
303+
304+
.PHONY: test-adoc-to-html-unit
305+
test-adoc-to-html-unit: $(ADOC_TO_HTML_UNIT_TEST_SCRIPT) $(TOOLS_DIR)/adoc_to_html.py
306+
@echo "TESTING ADOC_TO_HTML UNIT HELPERS"
307+
python3 $(ADOC_TO_HTML_UNIT_TEST_SCRIPT) && echo "test-adoc-to-html-unit PASSED" || (echo "test-adoc-to-html-unit FAILED"; exit 1)
308+
309+
.PHONY: test-def-text-to-html-unit
310+
test-def-text-to-html-unit: $(DEF_TEXT_TO_HTML_UNIT_TEST_SCRIPT) $(TOOLS_DIR)/def_text_to_html.py $(TOOLS_DIR)/adoc_to_html.py
311+
@echo "TESTING DEF_TEXT_TO_HTML UNIT HELPERS"
312+
python3 $(DEF_TEXT_TO_HTML_UNIT_TEST_SCRIPT) && echo "test-def-text-to-html-unit PASSED" || (echo "test-def-text-to-html-unit FAILED"; exit 1)
313+
314+
.PHONY: test-tag-text-to-html-unit
315+
test-tag-text-to-html-unit: $(TAG_TEXT_TO_HTML_UNIT_TEST_SCRIPT) $(TOOLS_DIR)/tag_text_to_html.py $(TOOLS_DIR)/def_text_to_html.py $(TOOLS_DIR)/adoc_to_html.py
316+
@echo "TESTING TAG_TEXT_TO_HTML UNIT HELPERS"
317+
python3 $(TAG_TEXT_TO_HTML_UNIT_TEST_SCRIPT) && echo "test-tag-text-to-html-unit PASSED" || (echo "test-tag-text-to-html-unit FAILED"; exit 1)
318+
267319
# Update expected files from built files
268320
.PHONY: update-expected
269-
update-expected: update-test-tags update-test-norm-rules-json update-test-norm-rules-html update-test-params-json update-test-params-html
321+
update-expected: update-test-tags update-test-norm-rules-json update-test-norm-rules-html update-test-params-json update-test-params-html update-test-params-adoc update-test-param-adoc-files
270322

271323
.PHONY: update-test-tags
272324
update-test-tags: update-test-ch1-tags update-test-ch2-tags
@@ -297,6 +349,17 @@ update-test-params-html: $(BUILT_PARAMS_HTML)
297349
mkdir -p $(PARAMS_EXPECTED_DIR)
298350
cp -f $(BUILT_PARAMS_HTML) $(EXPECTED_PARAMS_HTML)
299351

352+
.PHONY: update-test-params-adoc
353+
update-test-params-adoc: $(BUILT_PARAMS_ADOC)
354+
mkdir -p $(PARAMS_EXPECTED_DIR)
355+
cp -f $(BUILT_PARAMS_ADOC) $(EXPECTED_PARAMS_ADOC)
356+
357+
.PHONY: update-test-param-adoc-files
358+
update-test-param-adoc-files: $(BUILT_PARAM_ADOC_DIR)
359+
rm -rf $(EXPECTED_PARAM_ADOC_DIR)
360+
mkdir -p $(EXPECTED_PARAM_ADOC_DIR)
361+
cp -f $(BUILT_PARAM_ADOC_DIR)/*.adoc $(EXPECTED_PARAM_ADOC_DIR)
362+
300363
# Build normative tags with ch1 adoc input
301364
$(BUILT_TEST_CH1_NORM_TAGS_FNAME): $(NORM_RULE_TESTS_DIR)/$(TEST_CH1_INPUT_ADOC_FNAME) $(CONVERTERS_DIR)/$(TAGS_BACKEND)
302365
$(WORKDIR_SETUP)
@@ -337,6 +400,17 @@ $(BUILT_PARAMS_HTML): $(BUILT_NORM_RULES_JSON) $(PARAM_DEF_TEST_FILES) $(CREATE_
337400
$(DOCKER_CMD) $(DOCKER_QUOTE) $(CREATE_PARAMS_PYTHON) --html --norm-rules $(BUILT_NORM_RULES_JSON) $(PARAM_DEF_TEST_ARGS) --output $(BUILT_PARAMS_HTML) $(DOCKER_QUOTE)
338401
$(WORKDIR_TEARDOWN)
339402

403+
# Build parameter AsciiDoc row fragments from generated params JSON.
404+
$(BUILT_PARAM_ADOC_STAMP): $(BUILD_DIR)/$(PARAMS_JSON_OUTPUT_FNAME) $(CREATE_PARAM_ADOC_FILES_TOOL) $(PARAM_ADOC_TEST_SCRIPT) $(PARAMS_ADOC_TEMPLATE)
405+
$(WORKDIR_SETUP)
406+
cp -f $(BUILD_DIR)/$(PARAMS_JSON_OUTPUT_FNAME) $@.workdir/$(BUILD_DIR)
407+
$(DOCKER_CMD) $(DOCKER_QUOTE) $(CREATE_PARAM_ADOC_FILES_PYTHON) --input $(BUILD_DIR)/$(PARAMS_JSON_OUTPUT_FNAME) --output-dir $(BUILT_PARAM_ADOC_DIR) && touch $(BUILT_PARAM_ADOC_STAMP) $(DOCKER_QUOTE)
408+
$(DOCKER_CMD) $(DOCKER_QUOTE) $(PARAM_ADOC_TEST_PYTHON) --template $(PARAMS_ADOC_TEMPLATE) --adoc-dir $(BUILT_PARAM_ADOC_DIR) --output $(BUILT_PARAMS_ADOC) $(DOCKER_QUOTE)
409+
rm -rf $(BUILT_PARAM_ADOC_DIR)
410+
mv $@.workdir/$(BUILT_PARAM_ADOC_DIR) $(BUILT_PARAM_ADOC_DIR)
411+
mv $@.workdir/$(BUILT_PARAMS_ADOC) $(BUILT_PARAMS_ADOC)
412+
$(WORKDIR_TEARDOWN)
413+
340414
# Build normative rules with HTML output format
341415
$(BUILT_NORM_RULES_HTML): $(BUILT_TEST_NORM_TAGS_FNAMES) $(GOOD_NORM_RULE_DEF_FILES) $(BUILT_TEST_HTML_FNAMES)
342416
$(WORKDIR_SETUP)

tests/norm-rule/expected/test-ch1-norm-tags.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@
6464
"norm:int64": "This is a 64-bit signed integer.",
6565
"norm:uint-1to100": "This is an unsigned integer in the range of 1 to 100.",
6666
"norm:list-str": "Name|Description\n===\nABC|Letters \"ABC\"¶DEF|Letters \"DEF\"¶GHI|Letters \"GHI\"\n===",
67-
"norm:list-int": "This is a list with values 1, 2 and 4."
67+
"norm:list-int": "This is a list with values 1, 2 and 4.",
68+
"norm:foobar-ch1": "This is the Ch1 part of the foobar normative rule."
6869
},
6970
"sections": {
7071
"title": "",
@@ -195,7 +196,8 @@
195196
"norm:int64",
196197
"norm:uint-1to100",
197198
"norm:list-str",
198-
"norm:list-int"
199+
"norm:list-int",
200+
"norm:foobar-ch1"
199201
]
200202
}
201203
],

tests/norm-rule/expected/test-ch2-norm-tags.json

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@
1010
"norm:ROSE_COLORS": "You can use red or yellow roses. The tags backend removes some adoc formating so I don't see bold text but I can see ^superscript^ as long as I use the inline anchor and not the paragraph anchor.",
1111
"norm:XLEN": "We use the term XLEN to refer to the width of an integer register in bits (either 32 or 64). No superscript in paragraph anchors for some reason.",
1212
"norm:ASIDLEN": "The number of ASID bits is UNSPECIFIED and may be zero. The number of implemented ASID bits, termed ASIDLEN, may be determined by writing one to every bit position in the ASID field, then reading back the value in satp to see which bit positions in the ASID field hold a one.",
13+
"norm:foobar-ch2": "This is the Ch2 part of the foobar normative rule.",
14+
"norm:mock-inst-x": "Here’s a normative rule for mock instruction \"X\".",
15+
"norm:base-rv32i": "Here’s a normative rule for the RV32I base ISA.",
16+
"norm:base-rv32i-rv64i": "Here’s a normative rule for the RV32I or RV64I base ISA.",
17+
"norm:mock-csr-x": "Here’s a normative rule for mock CSR \"X\".",
18+
"norm:mock-csr-field-y": "Here’s a normative rule for mock CSR field \"Y\".",
19+
"norm:mock-ext-dep-A-on-B": "Here’s a normative rule for mock extension dependency of extension A on extension B.",
1320
"norm:csr_field_warl1": "This field is write-any-read-legal.",
1421
"norm:csr_field_wlrl": "This field is write-legal-read-legal.",
1522
"norm:csr_field_warl2": "This field is also write-any-read-legal."
@@ -37,13 +44,20 @@
3744
]
3845
},
3946
{
40-
"title": "Chapter 2.2 - Implementation-Defined Rules",
41-
"id": "_chapter_2_2_implementation_defined_rules",
47+
"title": "Chapter 2.2 - Implementation-Defined Behaviors",
48+
"id": "_chapter_2_2_implementation_defined_behaviors",
4249
"children": [],
4350
"tags": [
4451
"norm:ROSE_COLORS",
4552
"norm:XLEN",
46-
"norm:ASIDLEN"
53+
"norm:ASIDLEN",
54+
"norm:foobar-ch2",
55+
"norm:mock-inst-x",
56+
"norm:base-rv32i",
57+
"norm:base-rv32i-rv64i",
58+
"norm:mock-csr-x",
59+
"norm:mock-csr-field-y",
60+
"norm:mock-ext-dep-A-on-B"
4761
]
4862
},
4963
{

0 commit comments

Comments
 (0)