diff --git a/internal/crosscompile/compile/rtlib/rt_test.go b/internal/crosscompile/compile/rtlib/rt_test.go new file mode 100644 index 00000000..58aeb05e --- /dev/null +++ b/internal/crosscompile/compile/rtlib/rt_test.go @@ -0,0 +1,124 @@ +package rtlib + +import ( + "strings" + "testing" +) + +func TestPlatformSpecifiedFiles(t *testing.T) { + tests := []struct { + target string + expected int // Number of expected files + }{ + {"riscv32-unknown-elf", 5}, + {"riscv64-unknown-elf", 27}, + {"arm-none-eabi", 19}, + {"avr-unknown-elf", 6}, + {"xtensa", 2}, + {"x86_64-pc-windows", 0}, + } + + builtinsDir := "/test/builtins" + for _, tt := range tests { + t.Run(tt.target, func(t *testing.T) { + result := platformSpecifiedFiles(builtinsDir, tt.target) + if len(result) != tt.expected { + t.Errorf("For target %s, expected %d files, got %d", tt.target, tt.expected, len(result)) + } + }) + } +} + +func TestWithPlatformSpecifiedFiles(t *testing.T) { + baseDir := "/test/base" + target := "riscv32-unknown-elf" + inputFiles := []string{"file1.c", "file2.c"} + + result := withPlatformSpecifiedFiles(baseDir, target, inputFiles) + + // Should have input files + platform specific files + if len(result) <= len(inputFiles) { + t.Errorf("Expected more files than input, got %d", len(result)) + } + + // Check that input files are preserved + for _, inputFile := range inputFiles { + found := false + for _, resultFile := range result { + if resultFile == inputFile { + found = true + break + } + } + if !found { + t.Errorf("Input file %s not found in result", inputFile) + } + } +} + +func TestGetCompilerRTConfig(t *testing.T) { + baseDir := "/test/base" + target := "riscv32-unknown-elf" + + config := GetCompilerRTConfig(baseDir, target) + + // Test groups configuration + if len(config.Groups) != 1 { + t.Errorf("Expected 1 group, got %d", len(config.Groups)) + } else { + group := config.Groups[0] + expectedOutput := "libclang_builtins-" + target + ".a" + if group.OutputFileName != expectedOutput { + t.Errorf("Expected output file %s, got %s", expectedOutput, group.OutputFileName) + } + + // Check that files list contains platform-specific files + if len(group.Files) == 0 { + t.Error("Expected non-empty files list") + } + + // Check that CFlags are set + if len(group.CFlags) == 0 { + t.Error("Expected non-empty CFlags") + } + + // Check that CCFlags are set + if len(group.CCFlags) == 0 { + t.Error("Expected non-empty CCFlags") + } + } +} + +func TestGetCompilerRTConfig_DifferentTargets(t *testing.T) { + targets := []string{ + "riscv32-unknown-elf", + "riscv64-unknown-elf", + "arm-none-eabi", + "avr-unknown-elf", + "xtensa", + } + + baseDir := "/test/base" + for _, target := range targets { + t.Run(target, func(t *testing.T) { + config := GetCompilerRTConfig(baseDir, target) + + // Basic validation + if config.Url == "" { + t.Error("URL should not be empty") + } + if config.ArchiveSrcDir == "" { + t.Error("ArchiveSrcDir should not be empty") + } + if len(config.Groups) == 0 { + t.Error("Should have at least one group") + } + + // Check output filename contains target + group := config.Groups[0] + if !strings.Contains(group.OutputFileName, target) { + t.Errorf("Output filename %s should contain target %s", group.OutputFileName, target) + } + }) + } +}