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