Skip to content

refactor: move mock data into arch_overlay #755

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions .github/workflows/regress.yml
Original file line number Diff line number Diff line change
Expand Up @@ -93,24 +93,28 @@ jobs:
runs-on: ubuntu-latest
env:
SINGULARITY: 1
MODEL: MockProcessor
CONFIG: mocks
steps:
- name: Clone Github Repo Action
uses: actions/checkout@v4
- name: singularity setup
uses: ./.github/actions/singularity-setup
- name: Generate extension PDF
run: ./do gen:proc_crd_pdf[MockProcessor]
run: ./do gen:proc_crd_pdf
regress-gen-profile:
runs-on: ubuntu-latest
env:
SINGULARITY: 1
RELEASE: Mock
CONFIG: mocks
steps:
- name: Clone Github Repo Action
uses: actions/checkout@v4
- name: singularity setup
uses: ./.github/actions/singularity-setup
- name: Generate extension PDF
run: ./do gen:profile_release_pdf[Mock]
run: ./do gen:profile_release_pdf
build-llvm:
runs-on: ubuntu-latest
steps:
Expand Down
33 changes: 31 additions & 2 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,14 @@ namespace :gen do
end
end

desc "Resolve the standard in arch/, and write it to gen/resolved_arch/_"
task "resolved_arch" => "#{$root}/.stamps/resolve-_.stamp"
desc <<~DESC
Resolve the architecture files, and write it to gen/resolved_arch/<CONFIG_NAME>

By default, resolves the standard architecture ("_") under arch.

To resolve an overlay, set the CONFIG enviornment variable to a config name that uses the overlay
DESC
task "resolved_arch" => "#{$root}/.stamps/resolve-#{ENV.key?('CONFIG') ? ENV['CONFIG'] : '_'}.stamp"
end

# rule to generate standard for any configurations with an overlay
Expand Down Expand Up @@ -496,12 +502,18 @@ namespace :test do
Rake::Task["gen:html"].invoke("example_rv64_with_overlay")

$logger.info "Generating MockProcessor-CRD.pdf"
ENV["CONFIG"] = "mocks"
ENV["MODEL"] = "MockProcessor"
Rake::Task["#{$root}/gen/proc_crd/pdf/MockProcessor-CRD.pdf"].invoke

$logger.info "Generating MockProcessor-CTP.pdf"
ENV["CONFIG"] = "mocks"
ENV["MODEL"] = "MockProcessor"
Rake::Task["#{$root}/gen/proc_ctp/pdf/MockProcessor-CTP.pdf"].invoke

$logger.info "Generating MockProfileRelease.pdf"
ENV["CONFIG"] = "mocks"
ENV["RELEASE"] = "Mock"
Rake::Task["#{$root}/gen/profile/pdf/MockProfileRelease.pdf"].invoke

$logger.info "Generating Go Language Support"
Expand All @@ -528,38 +540,55 @@ desc <<~DESC
DESC
task :portfolios do
portfolio_start_msg("MockProcessor-CRD")
ENV["CONFIG"] = "mocks"
Rake::Task["#{$root}/gen/proc_crd/pdf/MockProcessor-CRD.pdf"].invoke
portfolio_start_msg("MockProcessor-CTP")
ENV["CONFIG"] = "mocks"
Rake::Task["#{$root}/gen/proc_ctp/pdf/MockProcessor-CTP.pdf"].invoke
portfolio_start_msg("MockProfileRelease")
ENV["CONFIG"] = "mocks"
Rake::Task["#{$root}/gen/profile/pdf/MockProfileRelease.pdf"].invoke
portfolio_start_msg("MC100-32-CTP")
ENV["CONFIG"] = "_"
Rake::Task["#{$root}/gen/proc_ctp/pdf/MC100-32-CTP.pdf"].invoke
portfolio_start_msg("MC100-32-CRD")
ENV["CONFIG"] = "_"
Rake::Task["#{$root}/gen/proc_crd/pdf/MC100-32-CRD.pdf"].invoke
portfolio_start_msg("MC100-64-CRD")
ENV["CONFIG"] = "_"
Rake::Task["#{$root}/gen/proc_crd/pdf/MC100-64-CRD.pdf"].invoke
portfolio_start_msg("MC200-32-CRD")
ENV["CONFIG"] = "_"
Rake::Task["#{$root}/gen/proc_crd/pdf/MC200-32-CRD.pdf"].invoke
portfolio_start_msg("MC200-64-CRD")
ENV["CONFIG"] = "_"
Rake::Task["#{$root}/gen/proc_crd/pdf/MC200-64-CRD.pdf"].invoke
portfolio_start_msg("MC300-32-CRD")
ENV["CONFIG"] = "_"
Rake::Task["#{$root}/gen/proc_crd/pdf/MC300-32-CRD.pdf"].invoke
portfolio_start_msg("MC300-64-CRD")
ENV["CONFIG"] = "_"
Rake::Task["#{$root}/gen/proc_crd/pdf/MC300-64-CRD.pdf"].invoke
portfolio_start_msg("AC100-CRD")
ENV["CONFIG"] = "_"
Rake::Task["#{$root}/gen/proc_crd/pdf/AC100-CRD.pdf"].invoke
portfolio_start_msg("AC200-CRD")
ENV["CONFIG"] = "_"
Rake::Task["#{$root}/gen/proc_crd/pdf/AC200-CRD.pdf"].invoke
portfolio_start_msg("RVI20ProfileRelease")
ENV["CONFIG"] = "_"
Rake::Task["#{$root}/gen/profile/pdf/RVI20ProfileRelease.pdf"].invoke
portfolio_start_msg("RVA20ProfileRelease")
ENV["CONFIG"] = "_"
Rake::Task["#{$root}/gen/profile/pdf/RVA20ProfileRelease.pdf"].invoke
portfolio_start_msg("RVA22ProfileRelease")
ENV["CONFIG"] = "_"
Rake::Task["#{$root}/gen/profile/pdf/RVA22ProfileRelease.pdf"].invoke
portfolio_start_msg("RVA23ProfileRelease")
ENV["CONFIG"] = "_"
Rake::Task["#{$root}/gen/profile/pdf/RVA23ProfileRelease.pdf"].invoke
portfolio_start_msg("RVB23ProfileRelease")
ENV["CONFIG"] = "_"
Rake::Task["#{$root}/gen/profile/pdf/RVB23ProfileRelease.pdf"].invoke
end

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# yaml-language-server: $schema=../../schemas/ext_schema.json
# yaml-language-server: $schema=../../../schemas/ext_schema.json

$schema: "ext_schema.json#"
kind: extension
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
16 changes: 2 additions & 14 deletions backends/portfolio/tasks.rake
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,11 @@
require "pathname"
require_relative "#{$lib}/idl/passes/gen_adoc"

# @return [Architecture]
def pf_create_arch
# Ensure that unconfigured resolved architecture called "_" exists.
Rake::Task["#{$root}/.stamps/resolve-_.stamp"].invoke

# Create architecture object using the unconfigured resolved architecture called "_".
Architecture.new($root / "gen" / "resolved_arch" / "_")
end

# @param portfolio_grp_with_arch [PortfolioGroup] Contains one or more Portfolio objects that have an arch (not a cfg_arch).
# @return [ConfiguredArchitecture]
def pf_create_cfg_arch(portfolio_grp_with_arch)
def pf_create_cfg_arch(portfolio_grp_with_arch, config_name)
raise ArgumentError, "portfolio_grp_with_arch is a #{portfolio_grp_with_arch.class} but must be a PortfolioGroup" unless portfolio_grp_with_arch.is_a?(PortfolioGroup)

# Ensure that unconfigured resolved architecture called "_" exists.
Rake::Task["#{$root}/.stamps/resolve-_.stamp"].invoke

# Create a ConfiguredArchitecture object and provide it a PortfolioGroupConfig object to implement the AbstractConfig API.
# The DatabaseObjects in PortfolioGroup only have an Architecture object and not a ConfiguredArchitecture object
# otherwise there would be a circular dependency. To avoid this circular dependency, none of the routines
Expand All @@ -30,7 +18,7 @@ def pf_create_cfg_arch(portfolio_grp_with_arch)
ConfiguredArchitecture.new(
portfolio_grp_with_arch.name,
PortfolioGroupConfig.new(portfolio_grp_with_arch),
$root / "gen" / "resolved_arch" / "_"
$root / "gen" / "resolved_arch" / config_name
)
end

Expand Down
12 changes: 7 additions & 5 deletions backends/proc_cert/tasks.rake
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,22 @@ require "pathname"
# @param erb_template_pname [String] Path to ERB template file
# @param target_pname [String] Full name of adoc file being generated
# @param model_name [String] Name of the processor certificate model
def proc_cert_create_adoc(erb_template_pname, target_pname, model_name)
def proc_cert_create_adoc(erb_template_pname, target_pname, model_name, config_locator)
# Create Architecture object without any knowledge of certificate model.
$logger.info "Creating Architecture object for #{model_name}"
arch = pf_create_arch
$logger.info "Creating Architecture object for #{model_name}, config #{config_locator}"
bootstrap_cfg_arch = cfg_arch_for(config_locator)

# Create ProcCertModel for specific processor certificate model as specified in its arch YAML file.
# The Architecture object also creates all other portfolio-related class instances from their arch YAML files.
# None of these objects are provided with a AbstractConfig or Design object when created.
$logger.info "Creating ProcCertModel with only an Architecture object for #{model_name}"
proc_cert_model_with_arch = arch.proc_cert_model(model_name)
proc_cert_model_with_arch = bootstrap_cfg_arch.proc_cert_model(model_name)

raise "?" if proc_cert_model_with_arch.nil?

# Create the ConfiguredArchitecture object with knowledge of the ProcCertModel.
# Needs a PortfolioGroup object so just create one with just one ProcCertModel (which is a child of Portfolio).
cfg_arch = pf_create_cfg_arch(PortfolioGroup.new(model_name, [proc_cert_model_with_arch]))
cfg_arch = pf_create_cfg_arch(PortfolioGroup.new(model_name, [proc_cert_model_with_arch]), bootstrap_cfg_arch.name)

$logger.info "Creating ProcCertModel with a ConfiguredArchitecture object for #{model_name}"
proc_cert_model_with_cfg_arch = cfg_arch.proc_cert_model(model_name)
Expand Down
101 changes: 57 additions & 44 deletions backends/proc_crd/tasks.rake
Original file line number Diff line number Diff line change
Expand Up @@ -7,63 +7,69 @@ require "pathname"
PROC_CRD_DOC_DIR = Pathname.new "#{$root}/backends/proc_crd"
PROC_CRD_GEN_DIR = $root / "gen" / "proc_crd"

Dir.glob("#{$root}/arch/proc_cert_model/*.yaml") do |f|
model_name = File.basename(f, ".yaml")
model_obj = YAML.load_file(f, permitted_classes: [Date])
class_name = File.basename(model_obj['class']['$ref'].split("#")[0], ".yaml")
raise "Ill-formed processor certificate model file #{f}: missing 'class' field" if model_obj['class'].nil?

file "#{PROC_CRD_GEN_DIR}/adoc/#{model_name}-CRD.adoc" => [
__FILE__,
"#{$root}/arch/proc_cert_class/#{class_name}.yaml",
"#{$root}/arch/proc_cert_model/#{model_name}.yaml",
"#{$root}/lib/arch_obj_models/certificate.rb",
"#{$root}/lib/arch_obj_models/portfolio.rb",
"#{$root}/lib/portfolio_design.rb",
"#{$root}/backends/portfolio/templates/ext_appendix.adoc.erb",
"#{$root}/backends/portfolio/templates/inst_appendix.adoc.erb",
"#{$root}/backends/portfolio/templates/csr_appendix.adoc.erb",
"#{$root}/backends/portfolio/templates/beginning.adoc.erb",
"#{$root}/backends/proc_cert/templates/typographic.adoc.erb",
"#{$root}/backends/proc_cert/templates/rev_history.adoc.erb",
"#{$root}/backends/proc_cert/templates/related_specs.adoc.erb",
"#{$root}/backends/proc_cert/templates/priv_modes.adoc.erb",
"#{$root}/backends/proc_cert/templates/rev_history.adoc.erb",
"#{PROC_CRD_DOC_DIR}/templates/proc_crd.adoc.erb"
] do |t|
proc_cert_create_adoc("#{PROC_CRD_DOC_DIR}/templates/proc_crd.adoc.erb", t.name, model_name)
end
rule %r{#{PROC_CRD_GEN_DIR}/adoc/[^/]+-CRD.adoc} => [
__FILE__,
"#{$root}/lib/arch_obj_models/certificate.rb",
"#{$root}/lib/arch_obj_models/portfolio.rb",
"#{$root}/lib/portfolio_design.rb",
"#{$root}/backends/portfolio/templates/ext_appendix.adoc.erb",
"#{$root}/backends/portfolio/templates/inst_appendix.adoc.erb",
"#{$root}/backends/portfolio/templates/csr_appendix.adoc.erb",
"#{$root}/backends/portfolio/templates/beginning.adoc.erb",
"#{$root}/backends/proc_cert/templates/typographic.adoc.erb",
"#{$root}/backends/proc_cert/templates/rev_history.adoc.erb",
"#{$root}/backends/proc_cert/templates/related_specs.adoc.erb",
"#{$root}/backends/proc_cert/templates/priv_modes.adoc.erb",
"#{$root}/backends/proc_cert/templates/rev_history.adoc.erb",
"#{PROC_CRD_DOC_DIR}/templates/proc_crd.adoc.erb"
] do |t|
model_name = File.basename(t.name, ".adoc")[0...-4]
proc_cert_create_adoc("#{PROC_CRD_DOC_DIR}/templates/proc_crd.adoc.erb", t.name, model_name, ENV["CONFIG"])
end

file "#{PROC_CRD_GEN_DIR}/pdf/#{model_name}-CRD.pdf" => [
rule %r{#{PROC_CRD_GEN_DIR}/pdf/[^/]+-CRD.pdf} => proc { |tname|
model_name = File.basename(tname, ".pdf")[0...-4]
[
__FILE__,
"#{PROC_CRD_GEN_DIR}/adoc/#{model_name}-CRD.adoc"
] do |t|
pf_adoc2pdf("#{PROC_CRD_GEN_DIR}/adoc/#{model_name}-CRD.adoc", t.name)
end
]
} do |t|
model_name = File.basename(t.name, ".pdf")[0...-4]
pf_adoc2pdf("#{PROC_CRD_GEN_DIR}/adoc/#{model_name}-CRD.adoc", t.name)
end

file "#{PROC_CRD_GEN_DIR}/html/#{model_name}-CRD.html" => [
rule %r{#{PROC_CRD_GEN_DIR}/html/[^/]+-CRD.html"} => proc { |tname|
model_name = File.basename(tname, ".html")[0...-4]
[
__FILE__,
"#{PROC_CRD_GEN_DIR}/adoc/#{model_name}-CRD.adoc"
] do |t|
pf_adoc2html("#{PROC_CRD_GEN_DIR}/adoc/#{model_name}-CRD.adoc", t.name)
end
]
} do |t|
model_name = File.basename(t.name, ".html")[0...-4]
pf_adoc2html("#{PROC_CRD_GEN_DIR}/adoc/#{model_name}-CRD.adoc", t.name)
end

namespace :gen do
desc <<~DESC
Generate Processor CRD (Certification Requirements Document) as a PDF.

Required options:
model_name - The name of the certification model under arch/proc_cert_model
CONFIG - Configuration to use for base architecture
MODE - The name of the certification model under arch/proc_cert_model
DESC
task :proc_crd_pdf, [:model_name] do |_t, args|
model_name = args[:model_name]
task :proc_crd_pdf do
raise "Missing required argument 'CONFIG'" unless ENV.key?("CONFIG")
raise "Missing required argument 'MODEL'" unless ENV.key?("MODEL")

model_name = ENV["MODEL"]
if model_name.nil?
warn "Missing required option: 'model_name'"
exit 1
end

unless File.exist?("#{$root}/arch/proc_cert_model/#{model_name}.yaml")
cfg_arch = cfg_arch_for(ENV["CONFIG"])

unless cfg_arch.proc_cert_models.any? { |model| model.name == model_name }
warn "No certification model named '#{model_name}' found in arch/proc_cert_model"
exit 1
end
Expand All @@ -75,19 +81,26 @@ namespace :gen do
Generate Processor CRD (Certification Requirements Document) as an HTML file.

Required options:
model_name - The name of the certification model under arch/proc_cert_model
CONFIG - Configuration to use for base architecture
MODE - The name of the certification model under arch/proc_cert_model
DESC
task :proc_crd_html, [:model_name] do |_t, args|
if args[:model_name].nil?
task :proc_crd_html do
raise "Missing required argument 'CONFIG'" unless ENV.key?("CONFIG")
raise "Missing required argument 'MODEL'" unless ENV.key?("MODEL")

model_name = ENV["MODEL"]
if model_name.nil?
warn "Missing required option: 'model_name'"
exit 1
end

unless File.exist?("#{$root}/arch/proc_cert_model/#{args[:model_name]}.yaml")
warn "No certification model named '#{args[:model_name]}' found in arch/proc_cert_model"
cfg_arch = cfg_arch_for(ENV["CONFIG"])

unless cfg_arch.proc_cert_models.any? { |model| model.name == model_name }
warn "No certification model named '#{model_name}' found in arch/proc_cert_model"
exit 1
end

Rake::Task["#{PROC_CRD_GEN_DIR}/html/#{args[:model_name]}-CRD.html"].invoke
Rake::Task["#{PROC_CRD_GEN_DIR}/html/#{model_name}-CRD.html"].invoke
end
end
Loading
Loading