Class: MilkTea::BuildCache::CachedProgram

Inherits:
Data
  • Object
show all
Defined in:
lib/milk_tea/tooling/build_cache.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#c_sourceObject (readonly)

Returns the value of attribute c_source

Returns:

  • (Object)

    the current value of c_source



10
11
12
# File 'lib/milk_tea/tooling/build_cache.rb', line 10

def c_source
  @c_source
end

#frontend_modulesObject (readonly)

Returns the value of attribute frontend_modules

Returns:

  • (Object)

    the current value of frontend_modules



10
11
12
# File 'lib/milk_tea/tooling/build_cache.rb', line 10

def frontend_modules
  @frontend_modules
end

Class Method Details

.load(dir) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/milk_tea/tooling/build_cache.rb', line 11

def self.load(dir)
  raw = JSON.parse(File.read(File.join(dir, "modules.json")), symbolize_names: true)
  c_source = File.read(File.join(dir, "source.c"))
  modules = raw.fetch(:modules).map do |mod|
    Build::FrontendModule.new(
      name: mod.fetch(:name),
      kind: mod.fetch(:kind).to_sym,
      link_libraries: mod.fetch(:link_libraries),
      compiler_flags: mod.fetch(:compiler_flags),
      uses_parallel_for: mod.fetch(:uses_parallel_for, false),
    )
  end
  new(c_source:, frontend_modules: modules)
end

Instance Method Details

#store(dir) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/milk_tea/tooling/build_cache.rb', line 26

def store(dir)
  FileUtils.mkdir_p(dir)
  File.write(File.join(dir, "source.c"), c_source)
  modules_json = {
    modules: frontend_modules.map do |mod|
      {
        name: mod.name,
        kind: mod.kind.to_s,
        link_libraries: mod.link_libraries,
        compiler_flags: mod.compiler_flags,
        uses_parallel_for: mod.uses_parallel_for,
      }
    end,
  }
  File.write(File.join(dir, "modules.json"), JSON.generate(modules_json))
end