Skip to content

Commit d65b2a1

Browse files
committed
Fix c code generation, so Arduino IDE compiles sketch with a generated arduino lib.
Implement: #268 Related-To: #267
1 parent 70d9c1f commit d65b2a1

1 file changed

Lines changed: 6 additions & 5 deletions

File tree

  • skainet-compile/skainet-compile-c/src/commonMain/kotlin/sk/ainet/compile/c

skainet-compile/skainet-compile-c/src/commonMain/kotlin/sk/ainet/compile/c/CCodeGenerator.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -501,12 +501,12 @@ public class CCodeGenerator(private val graph: ComputeGraph) {
501501
* @param node GraphNode representing a Dense/Linear layer
502502
* @return LayerCode containing generated C code fragment
503503
*/
504-
public fun generateDenseLayer(node: GraphNode): LayerCode {
504+
public fun generateDenseLayer(node: GraphNode, denseIndex: Int? = null): LayerCode {
505505
require(node.operation.name.lowercase() in setOf("linear", "dense")) {
506506
"Node ${node.id} is not a Dense/Linear layer"
507507
}
508508

509-
val layerName = "dense_${layerCounter++}"
509+
val layerName = if (denseIndex != null) "dense_$denseIndex" else "dense_${layerCounter++}"
510510
val inputSpec = node.inputs.first()
511511
val outputSpec = node.outputs.first()
512512

@@ -641,6 +641,7 @@ public class CCodeGenerator(private val graph: ComputeGraph) {
641641

642642
// Reset layer counter to ensure consistent naming across multiple calls
643643
layerCounter = 0
644+
var denseLayerIndex = 0
644645

645646
val nodes = graph.getTopologicalOrder()
646647
val processedNodes = mutableSetOf<String>()
@@ -671,7 +672,7 @@ public class CCodeGenerator(private val graph: ComputeGraph) {
671672
}
672673
}
673674

674-
generateDenseLayerWithAccuracy(matmulNode ?: node, addNode)
675+
generateDenseLayerWithAccuracy(matmulNode ?: node, addNode, denseLayerIndex++)
675676
}
676677
"relu", "sigmoid", "tanh" -> {
677678
processedNodes.add(node.id)
@@ -981,13 +982,13 @@ public class CCodeGenerator(private val graph: ComputeGraph) {
981982
* @param node GraphNode representing a Dense/Linear layer
982983
* @return LayerCode containing generated C code fragment
983984
*/
984-
public fun generateDenseLayerWithAccuracy(node: GraphNode, addNode: GraphNode? = null): LayerCode {
985+
public fun generateDenseLayerWithAccuracy(node: GraphNode, addNode: GraphNode? = null, denseIndex: Int? = null): LayerCode {
985986
val opName = node.operation.name.lowercase()
986987
require(opName in setOf("linear", "dense", "matmul", "add")) {
987988
"Node ${node.id} is not a Dense/Linear/Matmul/Add layer"
988989
}
989990

990-
val layerName = "dense_${layerCounter++}"
991+
val layerName = if (denseIndex != null) "dense_$denseIndex" else "dense_${layerCounter++}"
991992
val inputSpec = node.inputs.first()
992993
val finalNode = addNode ?: node
993994
val outputSpec = finalNode.outputs.first()

0 commit comments

Comments
 (0)