Skip to content

Commit c4d2578

Browse files
committed
Add native stubs for translator clean builds
1 parent bbbb18a commit c4d2578

9 files changed

+301
-69
lines changed

vm/tests/src/test/java/com/codename1/tools/translator/BytecodeInstructionIntegrationTest.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -142,13 +142,13 @@ void translatesOptimizedBytecodeToLLVMExecutable(CompilerHelper.CompilerConfig c
142142
Path buildDir = distDir.resolve("build");
143143
Files.createDirectories(buildDir);
144144

145-
CleanTargetIntegrationTest.runCommand(Arrays.asList(
145+
List<String> cmakeCommand = new ArrayList<>(Arrays.asList(
146146
"cmake",
147147
"-S", distDir.toString(),
148-
"-B", buildDir.toString(),
149-
"-DCMAKE_C_COMPILER=clang",
150-
"-DCMAKE_OBJC_COMPILER=clang"
151-
), distDir);
148+
"-B", buildDir.toString()
149+
));
150+
cmakeCommand.addAll(CleanTargetIntegrationTest.cmakeCompilerArgs());
151+
CleanTargetIntegrationTest.runCommand(cmakeCommand, distDir);
152152

153153
CleanTargetIntegrationTest.runCommand(Arrays.asList("cmake", "--build", buildDir.toString()), distDir);
154154

@@ -293,13 +293,13 @@ void translatesInvokeAndLdcBytecodeToLLVMExecutable(CompilerHelper.CompilerConfi
293293
Path buildDir = distDir.resolve("build");
294294
Files.createDirectories(buildDir);
295295

296-
CleanTargetIntegrationTest.runCommand(Arrays.asList(
296+
List<String> cmakeCommand = new ArrayList<>(Arrays.asList(
297297
"cmake",
298298
"-S", distDir.toString(),
299-
"-B", buildDir.toString(),
300-
"-DCMAKE_C_COMPILER=clang",
301-
"-DCMAKE_OBJC_COMPILER=clang"
302-
), distDir);
299+
"-B", buildDir.toString()
300+
));
301+
cmakeCommand.addAll(CleanTargetIntegrationTest.cmakeCompilerArgs());
302+
CleanTargetIntegrationTest.runCommand(cmakeCommand, distDir);
303303

304304
CleanTargetIntegrationTest.runCommand(Arrays.asList("cmake", "--build", buildDir.toString()), distDir);
305305

vm/tests/src/test/java/com/codename1/tools/translator/CleanTargetIntegrationTest.java

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import javax.tools.JavaCompiler;
88
import javax.tools.ToolProvider;
99
import java.io.BufferedReader;
10+
import java.io.File;
1011
import java.io.IOException;
1112
import java.io.InputStreamReader;
1213
import java.lang.reflect.InvocationTargetException;
@@ -17,6 +18,7 @@
1718
import java.nio.file.Files;
1819
import java.nio.file.Path;
1920
import java.nio.file.Paths;
21+
import java.util.ArrayList;
2022
import java.util.Arrays;
2123
import java.util.List;
2224
import java.util.stream.Collectors;
@@ -104,12 +106,13 @@ void generatesRunnableHelloWorldUsingCleanTarget(CompilerHelper.CompilerConfig c
104106
Path buildDir = distDir.resolve("build");
105107
Files.createDirectories(buildDir);
106108

107-
runCommand(Arrays.asList(
109+
List<String> cmakeCommand = new ArrayList<>(Arrays.asList(
108110
"cmake",
109111
"-S", distDir.toString(),
110-
"-B", buildDir.toString(),
111-
"-DCMAKE_C_COMPILER=clang"
112-
), distDir);
112+
"-B", buildDir.toString()
113+
));
114+
cmakeCommand.addAll(cmakeCompilerArgs());
115+
runCommand(cmakeCommand, distDir);
113116

114117
runCommand(Arrays.asList("cmake", "--build", buildDir.toString()), distDir);
115118

@@ -180,13 +183,56 @@ static void replaceLibraryWithExecutableTarget(Path cmakeLists, String sourceDir
180183
String globWithObjc = String.format("file(GLOB TRANSLATOR_SOURCES \"%s/*.c\" \"%s/*.m\")", sourceDirName, sourceDirName);
181184
String globCOnly = String.format("file(GLOB TRANSLATOR_SOURCES \"%s/*.c\")", sourceDirName);
182185
content = content.replace(globWithObjc, globCOnly);
186+
content = content.replace(" LANGUAGES C OBJC", " LANGUAGES C");
187+
content = content.replace("enable_language(OBJC OPTIONAL)\n", "");
183188
String replacement = content.replace(
184189
"add_library(${PROJECT_NAME} ${TRANSLATOR_SOURCES} ${TRANSLATOR_HEADERS})",
185-
"add_executable(${PROJECT_NAME} ${TRANSLATOR_SOURCES} ${TRANSLATOR_HEADERS})\ntarget_link_libraries(${PROJECT_NAME} m)"
190+
"add_executable(${PROJECT_NAME} ${TRANSLATOR_SOURCES} ${TRANSLATOR_HEADERS})\ntarget_link_libraries(${PROJECT_NAME} m pthread)"
186191
);
187192
Files.write(cmakeLists, replacement.getBytes(StandardCharsets.UTF_8));
188193
}
189194

195+
static List<String> cmakeCompilerArgs() {
196+
String cCompiler = findCompiler("clang", "gcc", "cc");
197+
if (cCompiler == null) {
198+
cCompiler = "cc";
199+
}
200+
String objcCompiler = findCompiler("clang");
201+
List<String> args = new ArrayList<>();
202+
args.add("-DCMAKE_C_COMPILER=" + cCompiler);
203+
if (objcCompiler != null) {
204+
args.add("-DCMAKE_OBJC_COMPILER=" + objcCompiler);
205+
}
206+
return args;
207+
}
208+
209+
private static String findCompiler(String... candidates) {
210+
String path = System.getenv("PATH");
211+
List<String> searchPaths = new ArrayList<>();
212+
if (path != null && !path.isEmpty()) {
213+
searchPaths.addAll(Arrays.asList(path.split(File.pathSeparator)));
214+
}
215+
216+
for (String candidate : candidates) {
217+
if (candidate == null || candidate.isEmpty()) {
218+
continue;
219+
}
220+
Path candidatePath = Paths.get(candidate);
221+
if (!candidatePath.isAbsolute()) {
222+
for (String dir : searchPaths) {
223+
Path resolved = Paths.get(dir, candidate);
224+
if (Files.isExecutable(resolved)) {
225+
return resolved.toString();
226+
}
227+
}
228+
} else if (Files.isExecutable(candidatePath)) {
229+
return candidatePath.toString();
230+
}
231+
}
232+
233+
return null;
234+
}
235+
190236
static String runCommand(List<String> command, Path workingDir) throws Exception {
191237
ProcessBuilder builder = new ProcessBuilder(command);
192238
builder.directory(workingDir.toFile());

vm/tests/src/test/java/com/codename1/tools/translator/CompilerHelper.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -532,13 +532,13 @@ public static boolean compileAndRun(String code, String expectedOutput) throws E
532532
java.nio.file.Path buildDir = distDir.resolve("build");
533533
java.nio.file.Files.createDirectories(buildDir);
534534

535-
CleanTargetIntegrationTest.runCommand(Arrays.asList(
535+
List<String> cmakeCommand = new ArrayList<>(Arrays.asList(
536536
"cmake",
537537
"-S", distDir.toString(),
538-
"-B", buildDir.toString(),
539-
"-DCMAKE_C_COMPILER=clang",
540-
"-DCMAKE_OBJC_COMPILER=clang"
541-
), distDir);
538+
"-B", buildDir.toString()
539+
));
540+
cmakeCommand.addAll(CleanTargetIntegrationTest.cmakeCompilerArgs());
541+
CleanTargetIntegrationTest.runCommand(cmakeCommand, distDir);
542542

543543
CleanTargetIntegrationTest.runCommand(Arrays.asList("cmake", "--build", buildDir.toString()), distDir);
544544

vm/tests/src/test/java/com/codename1/tools/translator/FileClassIntegrationTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,13 @@ public void testFileClassMethods(CompilerHelper.CompilerConfig config) throws Ex
9090
Path buildDir = distDir.resolve("build");
9191
Files.createDirectories(buildDir);
9292

93-
CleanTargetIntegrationTest.runCommand(Arrays.asList(
93+
List<String> cmakeCommand = new ArrayList<>(Arrays.asList(
9494
"cmake",
9595
"-S", distDir.toString(),
96-
"-B", buildDir.toString(),
97-
"-DCMAKE_C_COMPILER=clang",
98-
"-DCMAKE_OBJC_COMPILER=clang"
99-
), distDir);
96+
"-B", buildDir.toString()
97+
));
98+
cmakeCommand.addAll(CleanTargetIntegrationTest.cmakeCompilerArgs());
99+
CleanTargetIntegrationTest.runCommand(cmakeCommand, distDir);
100100

101101
CleanTargetIntegrationTest.runCommand(Arrays.asList("cmake", "--build", buildDir.toString()), distDir);
102102

vm/tests/src/test/java/com/codename1/tools/translator/FileStreamsIntegrationTest.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,13 @@ public void testFileStreams(CompilerHelper.CompilerConfig config) throws Excepti
8383
Path buildDir = distDir.resolve("build");
8484
Files.createDirectories(buildDir);
8585

86-
CleanTargetIntegrationTest.runCommand(Arrays.asList(
86+
List<String> cmakeCommand = new ArrayList<>(Arrays.asList(
8787
"cmake",
8888
"-S", distDir.toString(),
89-
"-B", buildDir.toString(),
90-
"-DCMAKE_C_COMPILER=clang"
91-
), distDir);
89+
"-B", buildDir.toString()
90+
));
91+
cmakeCommand.addAll(CleanTargetIntegrationTest.cmakeCompilerArgs());
92+
CleanTargetIntegrationTest.runCommand(cmakeCommand, distDir);
9293

9394
CleanTargetIntegrationTest.runCommand(Arrays.asList("cmake", "--build", buildDir.toString()), distDir);
9495

vm/tests/src/test/java/com/codename1/tools/translator/LambdaIntegrationTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -128,13 +128,13 @@ void translatesLambdaBytecodeToLLVMExecutable(String targetVersion) throws Excep
128128
Path buildDir = distDir.resolve("build");
129129
Files.createDirectories(buildDir);
130130

131-
CleanTargetIntegrationTest.runCommand(Arrays.asList(
131+
List<String> cmakeCommand = new ArrayList<>(Arrays.asList(
132132
"cmake",
133133
"-S", distDir.toString(),
134-
"-B", buildDir.toString(),
135-
"-DCMAKE_C_COMPILER=clang",
136-
"-DCMAKE_OBJC_COMPILER=clang"
137-
), distDir);
134+
"-B", buildDir.toString()
135+
));
136+
cmakeCommand.addAll(CleanTargetIntegrationTest.cmakeCompilerArgs());
137+
CleanTargetIntegrationTest.runCommand(cmakeCommand, distDir);
138138

139139
CleanTargetIntegrationTest.runCommand(Arrays.asList("cmake", "--build", buildDir.toString()), distDir);
140140

vm/tests/src/test/java/com/codename1/tools/translator/LockIntegrationTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,13 @@ void verifiesLockAndReentrantLockBehavior(CompilerHelper.CompilerConfig config)
9595
Path buildDir = distDir.resolve("build");
9696
Files.createDirectories(buildDir);
9797

98-
CleanTargetIntegrationTest.runCommand(Arrays.asList(
98+
List<String> cmakeCommand = new ArrayList<>(Arrays.asList(
9999
"cmake",
100100
"-S", distDir.toString(),
101-
"-B", buildDir.toString(),
102-
"-DCMAKE_C_COMPILER=clang",
103-
"-DCMAKE_OBJC_COMPILER=clang"
104-
), distDir);
101+
"-B", buildDir.toString()
102+
));
103+
cmakeCommand.addAll(CleanTargetIntegrationTest.cmakeCompilerArgs());
104+
CleanTargetIntegrationTest.runCommand(cmakeCommand, distDir);
105105

106106
CleanTargetIntegrationTest.runCommand(Arrays.asList("cmake", "--build", buildDir.toString()), distDir);
107107

vm/tests/src/test/java/com/codename1/tools/translator/ReadWriteLockIntegrationTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,13 +99,13 @@ void verifiesReadWriteLockBehavior(CompilerHelper.CompilerConfig config) throws
9999
Path buildDir = distDir.resolve("build");
100100
Files.createDirectories(buildDir);
101101

102-
CleanTargetIntegrationTest.runCommand(Arrays.asList(
102+
List<String> cmakeCommand = new ArrayList<>(Arrays.asList(
103103
"cmake",
104104
"-S", distDir.toString(),
105-
"-B", buildDir.toString(),
106-
"-DCMAKE_C_COMPILER=clang",
107-
"-DCMAKE_OBJC_COMPILER=clang"
108-
), distDir);
105+
"-B", buildDir.toString()
106+
));
107+
cmakeCommand.addAll(CleanTargetIntegrationTest.cmakeCompilerArgs());
108+
CleanTargetIntegrationTest.runCommand(cmakeCommand, distDir);
109109

110110
CleanTargetIntegrationTest.runCommand(Arrays.asList("cmake", "--build", buildDir.toString()), distDir);
111111

0 commit comments

Comments
 (0)