11sourceSets. main. java. srcDirs = [" src" ]
2- sourceSets. main. resources. srcDirs = [" libs/linux64" , " libs/macosx64" ," libs/windows32" , " libs/windows64" ]
32
4- dependencies {
5- testImplementation libraries. jnigen
6- testImplementation aproj(" :arc-core" )
3+ configurations {
4+ natives
75}
86
9- apply plugin : " com.badlogicgames.gdx.gdx-jnigen"
10-
11- file(" jni" ). mkdir()
12-
13- task preJni {
14- // this absolutely needs to run during configuration so jnigen can run downloaded sdl-config scripts for configuration of library flags
15- try {
16- if (! file(" jni/glew.zip" ). exists()){
17- println " Fetching GLEW source..."
18- " curl -o $rootDir /backends/backend-sdl/jni/glew.zip -L https://github.com/nigels-com/glew/releases/download/glew-2.2.0/glew-2.2.0.zip" . execute(). waitFor()
19- " unzip -qq -d $rootDir /backends/backend-sdl/jni $rootDir /backends/backend-sdl/jni/glew.zip" . execute(). waitFor()
20- }
21-
22- if (! file(" jni/sdlmingw.tar.gz" ). exists()){
23- println " Fetching SDL-mingw builds..."
24- " curl -o $rootDir /backends/backend-sdl/jni/sdlmingw.tar.gz -L https://www.libsdl.org/release/SDL2-devel-2.32.8-mingw.tar.gz" . execute(). waitFor()
25- " tar -xvzf $rootDir /backends/backend-sdl/jni/sdlmingw.tar.gz -C $rootDir /backends/backend-sdl/jni" . execute(). waitFor()
26- }
27- }catch (Exception youAreProbablyOnWindowsOrDontHaveUnzip){}
28-
29- doFirst{
30- copy{
31- from " $rootDir /arc-core/build/classes/java/main"
32- into " $rootDir /backends/backend-sdl/build/classes/java/main"
33- include " **"
34- }
7+ jar {
8+ duplicatesStrategy = DuplicatesStrategy . EXCLUDE
9+ from{
10+ configurations. natives. collect{ it. isDirectory() ? it : zipTree(it) }
3511 }
3612}
3713
38- /*
39-
40- PACKAGES: Linux (Ubuntu)
41-
42- - libdrm-dev
43- - libsdl2-dev
44- - libgbm-dev
45- - ant
46-
47- PACKAGES: Linux -> Windows Cross-Compilation
48-
49- - mingw32
50- - ant
51-
52- PACKAGES: Mac
53-
54- - sdl2
55- - glew
56- - ant
57-
58- */
59-
60- jnigen {
61- def execCmd = { cmd ->
62- try {
63- Scanner s = new Scanner (Runtime . getRuntime(). exec(cmd). getInputStream()). useDelimiter(" \\ A" )
64- return s. hasNext() ? s. next(). trim() : " "
65- }catch (Exception ignored){
66- // fail silently, because this is run during standard arc builds and it shouldn't fail
67- // TODO don't do anything at all in certain situations?
68- }
69- }
70-
71- sharedLibName = " sdl-arc"
72- temporaryDir = file(" build/target/native" ). absolutePath
73- libsDir = file(" libs" ). absolutePath
74-
75- def sdlVersion = " 2.32.8"
76-
77- all{
78- cppIncludes = [" *.cpp" ]
79- cIncludes = [" *.c" , " glew-2.2.0/src/glew.c" ]
80- headerDirs + = [" glew-2.2.0/include" ]
81- }
82- add(Linux , x64){
83- cppFlags + = " " + execCmd(" sdl2-config --cflags" )
84- cFlags = cppFlags
85- // NOTE: for this to statically link properly, you need to add -L/path/to/folder/with/custom/libSDL2.a
86- // where this folder contains a custom build of SDL2 with the -fPIC flag (added to the makefile in the cflags section after configure)
87- // --static-libs and ?.replace("-lSDL2", "-l:libSDL2.a")
88- libraries = execCmd(" sdl2-config --libs" ) + " -Wl,-Bdynamic -lGL "
89- linkerFlags = " -shared -m64"
90- }
91- add(Windows , x64){
92- def path = " SDL2-$sdlVersion /x86_64-w64-mingw32"
93- def root = " $rootDir /backends/backend-sdl/jni"
94- headerDirs + = (String [])[" $path /include/SDL2" ]
95- cppFlags + = " " + execCmd(" sh $root /$path /bin/sdl2-config --cflags" )
96- cFlags = cppFlags
97- libraries = execCmd(" sh $root /$path /bin/sdl2-config --static-libs" ) + " -lopengl32"
98- linkerFlags + = " -L $root /$path /lib"
99- }
100- add(Windows , x32){
101- def path = " SDL2-$sdlVersion /i686-w64-mingw32"
102- def root = " $rootDir /backends/backend-sdl/jni"
103- headerDirs + = (String [])[" $path /include/SDL2" ]
104- cppFlags + = " " + execCmd(" sh $root /$path /bin/sdl2-config --cflags" )
105- cFlags = cppFlags
106- libraries = execCmd(" sh $root /$path /bin/sdl2-config --static-libs" ) + " -lopengl32"
107- linkerFlags + = " -L $root /$path /lib"
108- }
109-
110- if (System . getProperty(" os.arch" ) != " aarch64" ){
111- add(MacOsX , x64){
112- cppFlags = cFlags= execCmd(" sdl2-config --cflags" ) + " -c -Wall -O2 -arch x86_64 -DFIXED_POINT -fmessage-length=0 -fPIC -mmacosx-version-min=10.9 -stdlib=libc++"
113- linkerFlags = " -shared -arch x86_64 -mmacosx-version-min=10.9 -stdlib=libc++"
114- libraries = " /usr/local/lib/libSDL2.a -lm -liconv -Wl,-framework,CoreAudio -Wl,-framework,CoreHaptics -Wl,-weak_framework,GameController -Wl,-framework,OpenGL,-weak_framework,AudioToolbox -Wl,-framework,ForceFeedback -lobjc -Wl,-framework,CoreVideo -Wl,-framework,Cocoa -Wl,-framework,Carbon -Wl,-framework,IOKit -Wl,-weak_framework,QuartzCore -Wl,-weak_framework,Metal /usr/local/lib/libGLEW.a"
115- }
116- }else {
117-
118- // doesn't work on CI, have to use native M1
119- add(MacOsX , x64, ARM ){
120- cppFlags = cFlags = execCmd(" sdl2-config --cflags" ) + " -c -Wall -O2 -arch arm64 -DFIXED_POINT -fmessage-length=0 -fPIC -mmacosx-version-min=10.9 -stdlib=libc++"
121- linkerFlags = " -shared -arch arm64 -mmacosx-version-min=10.9 -stdlib=libc++"
122- // execCmd("sdl2-config --static-libs") + " -Wl,-framework,OpenGL"
123- libraries = " /usr/local/lib/libSDL2.a -lm -liconv -Wl,-framework,CoreAudio -Wl,-weak_framework,GameController -Wl,-framework,OpenGL,-weak_framework,AudioToolbox -Wl,-framework,ForceFeedback -lobjc -Wl,-framework,CoreVideo -Wl,-framework,Cocoa -Wl,-framework,Carbon -Wl,-framework,IOKit -Wl,-weak_framework,QuartzCore -Wl,-weak_framework,Metal /usr/local/lib/libGLEW.a"
124- }
125- }
126-
127- }
128-
129- getTasksByName(" jnigen" , true ). each {
130- it. dependsOn preJni
131- it. dependsOn classes
132- it. dependsOn aproj(" :arc-core" ). getTasksByName(" compileJava" , true )
133- }
14+ dependencies {
15+ natives libraries. lwjgl
16+ api libraries. lwjgl
17+ }
0 commit comments