blob: 3e70c4b55fcaec3274be8f89c3cb1245d32547cd [file] [log] [blame]
import org.gradle.internal.os.OperatingSystem
if (project.hasProperty('onlylinuxathena')) {
return;
}
apply plugin: 'cpp'
if (OperatingSystem.current().isMacOsX()) {
apply plugin: 'objective-cpp'
}
apply plugin: 'visual-studio'
apply plugin: 'edu.wpi.first.NativeUtils'
ext {
nativeName = 'wpigui'
}
apply from: "${rootDir}/shared/config.gradle"
apply from: "${rootDir}/shared/imgui.gradle"
nativeUtils.exportsConfigs {
wpigui {
x64ExcludeSymbols = [
'_CT??_R0?AV_System_error',
'_CT??_R0?AVexception',
'_CT??_R0?AVfailure',
'_CT??_R0?AVruntime_error',
'_CT??_R0?AVsystem_error',
'_CTA5?AVfailure',
'_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
}
}
model {
components {
"${nativeName}"(NativeLibrarySpec) {
sources.cpp {
source {
srcDirs "src/main/native/cpp"
include '*.cpp'
}
exportedHeaders {
srcDirs 'src/main/native/include'
}
}
binaries.all {
nativeUtils.useRequiredLibrary(it, 'imgui')
if (it.targetPlatform.name == nativeUtils.wpi.platforms.roborio) {
it.buildable = false
return
}
if (it.targetPlatform.operatingSystem.isWindows()) {
it.sources {
wpiguiWindowsCpp(CppSourceSet) {
source {
srcDirs 'src/main/native/directx11'
include '*.cpp'
}
}
}
} else if (it.targetPlatform.operatingSystem.isMacOsX()) {
it.sources {
wpiguiMacObjectiveCpp(ObjectiveCppSourceSet) {
source {
srcDirs 'src/main/native/metal'
include '*.mm'
}
}
}
} else if (it.targetPlatform.name.startsWith('linuxarm')) {
it.sources {
wpiguiUnixGl2Cpp(CppSourceSet) {
source {
srcDirs 'src/main/native/opengl2'
include '*.cpp'
}
}
}
} else {
it.sources {
wpiguiUnixGl3Cpp(CppSourceSet) {
source {
srcDirs 'src/main/native/opengl3'
include '*.cpp'
}
}
}
}
it.sources.each {
it.exportedHeaders {
srcDirs 'src/main/native/include'
}
}
}
}
// By default, a development executable will be generated. This is to help the case of
// testing specific functionality of the library.
"${nativeName}Dev"(NativeExecutableSpec) {
targetBuildTypes 'debug'
sources.cpp {
source {
srcDirs 'src/dev/native/cpp'
include '**/*.cpp'
}
exportedHeaders {
srcDirs 'src/dev/native/include'
}
}
binaries.all {
lib library: 'wpigui'
nativeUtils.useRequiredLibrary(it, 'imgui')
}
}
}
binaries {
all {
if (it.targetPlatform.name == nativeUtils.wpi.platforms.roborio) {
it.buildable = false
return
}
if (it.targetPlatform.operatingSystem.isWindows()) {
it.linker.args << 'Gdi32.lib' << 'Shell32.lib' << 'd3d11.lib' << 'd3dcompiler.lib'
} else if (it.targetPlatform.operatingSystem.isMacOsX()) {
it.linker.args << '-framework' << 'Metal' << '-framework' << 'MetalKit' << '-framework' << 'Cocoa' << '-framework' << 'IOKit' << '-framework' << 'CoreFoundation' << '-framework' << 'CoreVideo' << '-framework' << 'QuartzCore'
} else {
it.linker.args << '-lX11'
if (it.targetPlatform.name.startsWith('linuxarm')) {
it.linker.args << '-lGL'
}
}
}
withType(SharedLibraryBinarySpec) {
buildable = false
}
}
}
apply from: 'publish.gradle'