Use tinsel and public unfettered lib
This commit is contained in:
parent
184f0a9223
commit
0c1e38ab31
|
@ -1 +1 @@
|
||||||
java temurin-18.0.2+101
|
java temurin-21.0.0+35.0.LTS
|
||||||
|
|
|
@ -0,0 +1,281 @@
|
||||||
|
local toolchain = path(ENV.JAVA_HOME)
|
||||||
|
|
||||||
|
local src_java = path("src/java")
|
||||||
|
local src_tmpl = path("src/templates")
|
||||||
|
local src_native = path("src/native")
|
||||||
|
local libs = path("libs")
|
||||||
|
|
||||||
|
local common_srcs = table.freeze({
|
||||||
|
-- common
|
||||||
|
"org/lwjgl/PointerWrapper.java",
|
||||||
|
"org/lwjgl/PointerWrapperAbstract.java",
|
||||||
|
"org/lwjgl/PointerBuffer.java",
|
||||||
|
-- opencl
|
||||||
|
"org/lwjgl/opencl/CLPlatform.java",
|
||||||
|
"org/lwjgl/opencl/CLDevice.java",
|
||||||
|
"org/lwjgl/opencl/CLContext.java",
|
||||||
|
"org/lwjgl/opencl/CLCommandQueue.java",
|
||||||
|
"org/lwjgl/opencl/CLMem.java",
|
||||||
|
"org/lwjgl/opencl/CLBuildProgramCallback.java",
|
||||||
|
"org/lwjgl/opencl/CLCompileProgramCallback.java",
|
||||||
|
"org/lwjgl/opencl/CLContextCallback.java",
|
||||||
|
"org/lwjgl/opencl/CLEventCallback.java",
|
||||||
|
"org/lwjgl/opencl/CLLinkProgramCallback.java",
|
||||||
|
"org/lwjgl/opencl/CLMemObjectDestructorCallback.java",
|
||||||
|
"org/lwjgl/opencl/CLPrintfCallback.java",
|
||||||
|
"org/lwjgl/opencl/CLProgramCallback.java",
|
||||||
|
"org/lwjgl/opencl/CLNativeKernel.java",
|
||||||
|
"org/lwjgl/opencl/CLFunctionAddress.java",
|
||||||
|
-- opengl
|
||||||
|
"org/lwjgl/opengl/GLSync.java",
|
||||||
|
"org/lwjgl/opengl/AMDDebugOutputCallback.java",
|
||||||
|
"org/lwjgl/opengl/ARBDebugOutputCallback.java",
|
||||||
|
"org/lwjgl/opengl/KHRDebugCallback.java",
|
||||||
|
-- opengles
|
||||||
|
"org/lwjgl/opengles/EGLImageOES.java",
|
||||||
|
"org/lwjgl/opengles/KHRDebugCallback.java",
|
||||||
|
})
|
||||||
|
common_srcs = map(common_srcs, function(p) return rootedpath(src_java, src_java .. p) end)
|
||||||
|
|
||||||
|
local sp = src_java.value
|
||||||
|
|
||||||
|
local compile_generators = task("compile_generators", function(env)
|
||||||
|
local java = require("!java")
|
||||||
|
java = java.withToolchain(toolchain)
|
||||||
|
|
||||||
|
local srcs_gen = walk_rootedpath{path = src_java .. "org/lwjgl/util/generator"}
|
||||||
|
|
||||||
|
-- compile common classes required by the generators
|
||||||
|
local out_common = java.compileJar(env:derive(), {
|
||||||
|
implicit = true,
|
||||||
|
srcs = common_srcs,
|
||||||
|
class_path = files({libs .. "unfettered.jar"}),
|
||||||
|
extra_args = {
|
||||||
|
"--source-path", sp,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- compile the generators
|
||||||
|
local out_gen = java.compileJar(env:derive(), {
|
||||||
|
srcs = srcs_gen,
|
||||||
|
class_path = files({out_common.classes}),
|
||||||
|
extra_args = {
|
||||||
|
"--source-path", sp,
|
||||||
|
},
|
||||||
|
-- TODO: need to track source path
|
||||||
|
--__source_path = files()
|
||||||
|
})
|
||||||
|
|
||||||
|
return {out_common.classes, out_gen.classes}
|
||||||
|
end)
|
||||||
|
|
||||||
|
local generate = export(task("generate", function(env)
|
||||||
|
local java = require("!java")
|
||||||
|
java = java.withToolchain(toolchain)
|
||||||
|
|
||||||
|
-- all generator sources
|
||||||
|
local srcs_openal = walk_rootedpath{path = src_tmpl .. "org/lwjgl/openal"}
|
||||||
|
local srcs_opengl = walk_rootedpath{path = src_tmpl .. "org/lwjgl/opengl"}
|
||||||
|
local srcs_opencl = walk_rootedpath{path = src_tmpl .. "org/lwjgl/opencl"}
|
||||||
|
local srcs_opengles = walk_rootedpath{path = src_tmpl .. "org/lwjgl/opengles"}
|
||||||
|
|
||||||
|
local class_path = files(compile_generators())
|
||||||
|
|
||||||
|
local dest_props_java = {"genJavaPath"}
|
||||||
|
local dest_props_native = {"genNativePath"}
|
||||||
|
|
||||||
|
local function with_dest_props(input, dest_props)
|
||||||
|
input = table.clone(input)
|
||||||
|
input.dest_props = dest_props
|
||||||
|
return input
|
||||||
|
end
|
||||||
|
|
||||||
|
local function compile(input)
|
||||||
|
input.class_path = class_path
|
||||||
|
local env = env:derive()
|
||||||
|
return async(function()
|
||||||
|
local output = java.compile(env, input)
|
||||||
|
return map_rootedpath(output.root, output.files)
|
||||||
|
end)
|
||||||
|
--local output = java.compile(env, input)
|
||||||
|
--output = map_rootedpath(output.root, output.files)
|
||||||
|
--return async(function() return output end)
|
||||||
|
end
|
||||||
|
|
||||||
|
local gen_openal = {
|
||||||
|
srcs = srcs_openal,
|
||||||
|
extra_args = {
|
||||||
|
"--source-path", sp,
|
||||||
|
|
||||||
|
"-proc:only",
|
||||||
|
"-processor",
|
||||||
|
"org.lwjgl.util.generator.GeneratorProcessor",
|
||||||
|
|
||||||
|
"-Atypemap=org.lwjgl.util.generator.openal.ALTypeMap",
|
||||||
|
"-Anovalidate=true",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
local gen_openal_java = {compile(with_dest_props(gen_openal, dest_props_java))}
|
||||||
|
local gen_openal_native = compile(with_dest_props(gen_openal, dest_props_native))
|
||||||
|
|
||||||
|
local gen_opengl = {
|
||||||
|
srcs = srcs_opengl,
|
||||||
|
extra_args = {
|
||||||
|
"--source-path", sp,
|
||||||
|
|
||||||
|
"-proc:only",
|
||||||
|
"-processor",
|
||||||
|
"org.lwjgl.util.generator.GeneratorProcessor",
|
||||||
|
|
||||||
|
"-Acontextspecific",
|
||||||
|
"-Atypemap=org.lwjgl.util.generator.opengl.GLTypeMap",
|
||||||
|
"-Anovalidate=true",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
local gen_opengl_java = {
|
||||||
|
compile(with_dest_props(gen_opengl, dest_props_java)),
|
||||||
|
compile(with_dest_props({
|
||||||
|
srcs = srcs_opengl,
|
||||||
|
extra_args = {
|
||||||
|
"--source-path", sp,
|
||||||
|
|
||||||
|
"-proc:only",
|
||||||
|
"-processor",
|
||||||
|
"org.lwjgl.util.generator.opengl.GLReferencesGeneratorProcessor",
|
||||||
|
|
||||||
|
"-Acontextspecific",
|
||||||
|
}
|
||||||
|
}, dest_props_java)),
|
||||||
|
compile(with_dest_props({
|
||||||
|
srcs = srcs_opengl,
|
||||||
|
extra_args = {
|
||||||
|
"--source-path", sp,
|
||||||
|
|
||||||
|
"-proc:only",
|
||||||
|
"-processor",
|
||||||
|
"org.lwjgl.util.generator.opengl.GLGeneratorProcessor",
|
||||||
|
|
||||||
|
"-Acontextspecific",
|
||||||
|
}
|
||||||
|
}, dest_props_java)),
|
||||||
|
}
|
||||||
|
local gen_opengl_native = compile(with_dest_props(gen_opengl, dest_props_native))
|
||||||
|
|
||||||
|
local gen_opencl = {
|
||||||
|
srcs = srcs_opencl,
|
||||||
|
extra_args = {
|
||||||
|
"--source-path", sp,
|
||||||
|
|
||||||
|
"-proc:only",
|
||||||
|
"-processor",
|
||||||
|
"org.lwjgl.util.generator.GeneratorProcessor",
|
||||||
|
|
||||||
|
"-Acontextspecific",
|
||||||
|
"-Atypemap=org.lwjgl.util.generator.opencl.CLTypeMap",
|
||||||
|
"-Anovalidate=true",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
local gen_opencl_java = {
|
||||||
|
compile(with_dest_props(gen_opencl, dest_props_java)),
|
||||||
|
compile(with_dest_props({
|
||||||
|
srcs = srcs_opencl,
|
||||||
|
extra_args = {
|
||||||
|
"--source-path", sp,
|
||||||
|
|
||||||
|
"-proc:only",
|
||||||
|
"-processor",
|
||||||
|
"org.lwjgl.util.generator.opencl.CLGeneratorProcessor",
|
||||||
|
|
||||||
|
"-Acontextspecific",
|
||||||
|
}
|
||||||
|
}, dest_props_java)),
|
||||||
|
}
|
||||||
|
local gen_opencl_native = compile(with_dest_props(gen_opencl, dest_props_native))
|
||||||
|
|
||||||
|
local gen_opengles = {
|
||||||
|
srcs = srcs_opengles,
|
||||||
|
extra_args = {
|
||||||
|
"--source-path", sp,
|
||||||
|
|
||||||
|
"-proc:only",
|
||||||
|
"-processor",
|
||||||
|
"org.lwjgl.util.generator.GeneratorProcessor",
|
||||||
|
|
||||||
|
"-Atypemap=org.lwjgl.util.generator.opengl.GLESTypeMap",
|
||||||
|
"-Anovalidate=true",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
local gen_opengles_java = {
|
||||||
|
compile(with_dest_props(gen_opengles, dest_props_java)),
|
||||||
|
compile(with_dest_props({
|
||||||
|
srcs = srcs_opengles,
|
||||||
|
extra_args = {
|
||||||
|
"--source-path", sp,
|
||||||
|
|
||||||
|
"-proc:only",
|
||||||
|
"-processor",
|
||||||
|
"org.lwjgl.util.generator.opengl.GLESGeneratorProcessor",
|
||||||
|
}
|
||||||
|
}, dest_props_java)),
|
||||||
|
}
|
||||||
|
local gen_opengles_native = compile(with_dest_props(gen_opengles, dest_props_native))
|
||||||
|
|
||||||
|
local gen_java = table.concat(gen_openal_java, gen_opengl_java, gen_opencl_java, gen_opengles_java)
|
||||||
|
|
||||||
|
local gen_native = {
|
||||||
|
gen_openal_native,
|
||||||
|
gen_opengl_native,
|
||||||
|
gen_opencl_native,
|
||||||
|
gen_opengles_native,
|
||||||
|
}
|
||||||
|
|
||||||
|
local gen_java, gen_native = await(async(function()
|
||||||
|
return table.concat(await(gen_java))
|
||||||
|
end), async(function()
|
||||||
|
return table.concat(await(gen_native))
|
||||||
|
end))
|
||||||
|
return { java = gen_java, native = gen_native }
|
||||||
|
end))
|
||||||
|
|
||||||
|
compile_java = export(task("compile_java", function(env)
|
||||||
|
local java = require("!java")
|
||||||
|
java = java.withToolchain(toolchain)
|
||||||
|
|
||||||
|
local srcs_root = src_java .. "org/lwjgl"
|
||||||
|
local ignore_a = srcs_root.value .. "/util/generator"
|
||||||
|
local ignore_b = srcs_root.value .. "/util/test"
|
||||||
|
local ignore_c = srcs_root.value .. "/test"
|
||||||
|
local ignore_d = srcs_root.value .. "/util/mapped"
|
||||||
|
|
||||||
|
local srcs = table.clone(walk_rootedpath{path = srcs_root})
|
||||||
|
filter(srcs, function(path)
|
||||||
|
local p = path.path.value
|
||||||
|
return not p:startswith(ignore_a, ignore_b, ignore_c, ignore_d)
|
||||||
|
end)
|
||||||
|
push_all(srcs, generate().java)
|
||||||
|
table.freeze(srcs)
|
||||||
|
|
||||||
|
return java.compileJar(env:derive(), {
|
||||||
|
srcs = srcs,
|
||||||
|
class_path = files({
|
||||||
|
libs .. "unfettered.jar",
|
||||||
|
libs .. "jinput.jar",
|
||||||
|
libs .. "AppleJavaExtensions.jar",
|
||||||
|
})
|
||||||
|
})
|
||||||
|
end))
|
||||||
|
|
||||||
|
local build_symbol_list = task("build_symbol_list", function(env, srcs: {InputFile})
|
||||||
|
env:memoize(srcs, function(srcs, output)
|
||||||
|
local args = map(srcs, function(src) return src.path.value end)
|
||||||
|
local output = exec_with_output("nm", "-j", "-g", table.unpack(args))
|
||||||
|
check_status(output)
|
||||||
|
local pat = compile_regex("^_J(ava|NI|avaCritical)_.*$", {multi_line = true});
|
||||||
|
|
||||||
|
local buf = ""
|
||||||
|
pat.for_each_match(output.stdout, function(match)
|
||||||
|
buf ..= match .. "\n"
|
||||||
|
end)
|
||||||
|
intrinsic.io.write_file(output, buf)
|
||||||
|
end)
|
||||||
|
end)
|
|
@ -40,7 +40,7 @@ import java.lang.reflect.Modifier;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import dev.pfaff.unfettered.UnsafeUtil;
|
import dev.pfaff.unfettered.Unfettered;
|
||||||
|
|
||||||
import static java.lang.invoke.MethodType.methodType;
|
import static java.lang.invoke.MethodType.methodType;
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ public class LWJGLUtil {
|
||||||
private static final MethodHandle MH_findLibrary;
|
private static final MethodHandle MH_findLibrary;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
MethodHandles.Lookup l = UnsafeUtil.getTrustedLookup();
|
MethodHandles.Lookup l = Unfettered.getTrustedLookup();
|
||||||
try {
|
try {
|
||||||
MH_findLibrary = l.findVirtual(ClassLoader.class, "findLibrary", methodType(String.class, String.class));
|
MH_findLibrary = l.findVirtual(ClassLoader.class, "findLibrary", methodType(String.class, String.class));
|
||||||
} catch (ReflectiveOperationException e) {
|
} catch (ReflectiveOperationException e) {
|
||||||
|
|
|
@ -49,7 +49,7 @@ import javax.sound.sampled.AudioSystem;
|
||||||
|
|
||||||
import org.lwjgl.openal.AL10;
|
import org.lwjgl.openal.AL10;
|
||||||
|
|
||||||
import dev.pfaff.unfettered.UnsafeUtil;
|
import dev.pfaff.unfettered.Unfettered;
|
||||||
|
|
||||||
import static java.lang.invoke.MethodHandles.*;
|
import static java.lang.invoke.MethodHandles.*;
|
||||||
import static java.lang.invoke.MethodType.*;
|
import static java.lang.invoke.MethodType.*;
|
||||||
|
@ -66,7 +66,7 @@ public class WaveData {
|
||||||
private static final MethodHandle MH_getWaveInputStream;
|
private static final MethodHandle MH_getWaveInputStream;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
MethodHandles.Lookup l = UnsafeUtil.getTrustedLookup();
|
MethodHandles.Lookup l = Unfettered.getTrustedLookup();
|
||||||
try {
|
try {
|
||||||
Class<?> C_WaveFileReader = Class.forName("com.sun.media.sound.WaveFileReader");
|
Class<?> C_WaveFileReader = Class.forName("com.sun.media.sound.WaveFileReader");
|
||||||
MethodHandle MH_WaveFileReader_constructor = l.findConstructor(C_WaveFileReader, methodType(void.class));
|
MethodHandle MH_WaveFileReader_constructor = l.findConstructor(C_WaveFileReader, methodType(void.class));
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
package dev.pfaff.unfettered;
|
|
||||||
|
|
||||||
import java.lang.invoke.MethodHandles;
|
|
||||||
|
|
||||||
public final class UnsafeUtil {
|
|
||||||
public static MethodHandles.Lookup getTrustedLookup() {
|
|
||||||
throw new RuntimeException("This is a stub");
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue