Fixed samples for the latest changes in Gradle plugin.

- Smaller gradle scripts.
- More structure in sample projects.
- Simplified build/run.
- Added gradle to the rest two samples.
- Almost removed all sh scripts.
- Gradle now works only inside of build directory.
- Fixed READMEs according to the new changes.
This commit is contained in:
Alexander Podkhalyuzin
2017-06-08 13:32:13 +03:00
committed by SvyatoslavScherbina
parent f1fa5327f3
commit bc941269f0
75 changed files with 344 additions and 382 deletions
+2 -2
View File
@@ -1833,13 +1833,13 @@ kotlinNativeInterop {
} }
sockets { sockets {
defFile '../../samples/socket/sockets.def' defFile '../../samples/socket/src/c_interop/sockets.def'
flavor 'native' flavor 'native'
} }
if (isMac()) { if (isMac()) {
opengl { opengl {
defFile '../../samples/opengl/opengl.def' defFile '../../samples/opengl/src/c_interop/opengl.def'
linkerOpts '-framework', 'OpenGL', '-framework', 'GLUT' linkerOpts '-framework', 'OpenGL', '-framework', 'GLUT'
flavor 'native' flavor 'native'
} }
+15
View File
@@ -0,0 +1,15 @@
# Concurrent
This example shows how to implement concurrent programming in Kotlin/Native.
In this example we start multiple threads running concurrently and exchange messages with them.
To build cpp use `./buildCpp.sh`.
To build kotlin native use `../gradlew build` or `./build.sh`.
To run use `../gradlew run`
Alternatively you can run artifact directly
./build/konan/bin/MessageChannel/MessageChannel.kexe
It will print all passed messages.
+14
View File
@@ -0,0 +1,14 @@
apply plugin: 'konan'
konanInterop {
MessageChannel {
includeDirs "${project.projectDir}/src/main/cpp"
}
}
konanArtifacts {
MessageChannel {
useInterop "MessageChannel"
nativeLibrary "${project.buildDir.canonicalPath}/clang/MessageChannel.bc"
}
}
+15 -12
View File
@@ -1,8 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
DIR=.
PATH=../../dist/bin:../../bin:$PATH DIR=$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd )
DEPS=$(dirname `type -p konanc`)/../dependencies PATH=$DIR/../../dist/bin:$DIR/../../bin:$PATH
if [ x$TARGET == x ]; then if [ x$TARGET == x ]; then
case "$OSTYPE" in case "$OSTYPE" in
@@ -12,19 +12,22 @@ case "$OSTYPE" in
esac esac
fi fi
CLANG_linux=$DEPS/clang-llvm-3.9.0-linux-x86-64/bin/clang++
CLANG_macbook=$DEPS/clang-llvm-3.9.0-darwin-macos/bin/clang++
var=CFLAGS_${TARGET} var=CFLAGS_${TARGET}
CFLAGS=${!var} CFLAGS=${!var}
var=LINKER_ARGS_${TARGET} var=LINKER_ARGS_${TARGET}
LINKER_ARGS=${!var} LINKER_ARGS=${!var}
var=COMPILER_ARGS_${TARGET} var=COMPILER_ARGS_${TARGET}
COMPILER_ARGS=${!var} # add -opt for an optimized build. COMPILER_ARGS=${!var} # add -opt for an optimized build.
var=CLANG_${TARGET}
CLANG=${!var}
$CLANG -std=c++11 -c $DIR/MessageChannel.cpp -o $DIR/MessageChannel.bc -emit-llvm || exit 1 mkdir -p $DIR/build/c_interop
cinterop -def $DIR/MessageChannel.def -compilerOpts "-I$DIR" -target $TARGET -o $DIR/MessageChannel || exit 1 mkdir -p $DIR/build/bin
konanc $DIR/Concurrent.kt -library $DIR/MessageChannel \
-nativelibrary $DIR/MessageChannel.bc -o Concurrent || exit 1 $DIR/buildCpp.sh
cinterop -def $DIR/src/main/c_interop/MessageChannel.def -copt "-I$DIR/src/main/cpp" -target $TARGET \
-o $DIR/build/c_interop/MessageChannel.kt.bc || exit 1
konanc $DIR/src/main/kotlin/Concurrent.kt -library $DIR/build/c_interop/MessageChannel.kt.bc \
-nativelibrary $DIR/build/clang/MessageChannel.bc -o $DIR/build/bin/Concurrent.kexe || exit 1
echo "Artifact path is $DIR/build/bin/Concurrent.kexe"
+23
View File
@@ -0,0 +1,23 @@
#!/usr/bin/env bash
DIR=$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd )
PATH=$DIR/../../dist/bin:$DIR/../../bin:$PATH
DEPS=$(dirname `type -p konanc`)/../dependencies
if [ x$TARGET == x ]; then
case "$OSTYPE" in
darwin*) TARGET=macbook ;;
linux*) TARGET=linux ;;
*) echo "unknown: $OSTYPE" && exit 1;;
esac
fi
CLANG_linux=$DEPS/clang-llvm-3.9.0-linux-x86-64/bin/clang++
CLANG_macbook=$DEPS/clang-llvm-3.9.0-darwin-macos/bin/clang++
var=CLANG_${TARGET}
CLANG=${!var}
mkdir -p $DIR/build/clang/
$CLANG -std=c++11 -c $DIR/src/main/cpp/MessageChannel.cpp -o $DIR/build/clang/MessageChannel.bc -emit-llvm || exit 1
+8 -4
View File
@@ -4,12 +4,16 @@
A sample data [European Mammals Red List for 2009](https://data.europa.eu/euodp/en/data/dataset?res_format=CSV) A sample data [European Mammals Red List for 2009](https://data.europa.eu/euodp/en/data/dataset?res_format=CSV)
from EU is being used. from EU is being used.
To build use `./build.sh` script without arguments (or specify `TARGET` variable if cross-compiling). To build use `../gradlew build` or `./build.sh`.
You also may use Gradle to build this sample: `../gradlew build`.
To run use To run use `../gradlew run`
./CsvParser.kexe ./European_Mammals_Red_List_Nov_2009.csv 4 100 To change run arguments, change property runArgs in gradle.propeties file
or pass `-PrunArgs="./European_Mammals_Red_List_Nov_2009.csv 4 100"` to gradle run.
Alternatively you can run artifact directly
./build/konan/bin/CsvParser/CsvParser.kexe ./European_Mammals_Red_List_Nov_2009.csv 4 100
It will print number of all unique entries in fifth column It will print number of all unique entries in fifth column
(Family, zero-based index) in first 100 rows of the CSV file. (Family, zero-based index) in first 100 rows of the CSV file.
+2 -63
View File
@@ -1,72 +1,11 @@
apply plugin: 'konan' apply plugin: 'konan'
konanInterop { konanInterop {
stdio { stdio { }
defFile 'stdio.def'
}
} }
konanArtifacts { konanArtifacts {
CsvParser { CsvParser {
inputFiles project.file('CsvParser.kt')
useInterop 'stdio' useInterop 'stdio'
} }
} }
build {
project.ext { outputFile = "${projectDir.canonicalPath}/${file(compileKonanCsvParser.artifactPath).name}" }
doLast {
copy {
from compileKonanCsvParser.artifactPath
into projectDir.canonicalPath
}
}
}
void dumpCompilationTask(Task task) {
println()
println("Compilation task: ${task.name}")
println("outputDir : ${task.outputDir}")
println("artifactPath : ${task.artifactPath}")
println("inputFiles : ${task.inputFiles.files}")
println("libraries : ${task.libraries}")
println("nativeLibraries : ${task.nativeLibraries}")
println("linkerOpts : ${task.linkerOpts}")
println("produce : ${task.produce}")
println("noStdLib : ${task.noStdLib}")
println("noMain : ${task.noMain}")
println("enableOptimization : ${task.enableOptimization}")
println("enableAssertions : ${task.enableAssertions}")
println("target : ${task.target}")
println("languageVersion : ${task.languageVersion}")
println("apiVersion : ${task.apiVersion}")
}
void dumpInteropTask(Task task) {
println()
println("Stub generation task: ${task.name}")
println("stubsDir : ${task.stubsDir}")
println("libsDir : ${task.libsDir}")
println("defFile : ${task.defFile}")
println("target : ${task.target}")
println("pkg : ${task.pkg}")
println("linker : ${task.linker}")
println("compilerOpts : ${task.compilerOpts}")
println("linkerOpts : ${task.linkerOpts}")
println("headers : ${task.headers.files}")
println("linkFiles : ${task.linkFiles}")
}
task dumpParameters(type: DefaultTask) {
doLast {
dumpCompilationTask(konanArtifacts['CsvParser'].compilationTask)
dumpInteropTask(konanInterop['stdio'].generateStubsTask)
dumpCompilationTask(konanInterop['stdio'].compileStubsTask)
}
}
clean {
doLast {
delete outputFile
}
}
+11 -4
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
DIR=. DIR=$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd )
PATH=../../dist/bin:../../bin:$PATH PATH=$DIR/../../dist/bin:$DIR/../../bin:$PATH
if [ x$TARGET == x ]; then if [ x$TARGET == x ]; then
case "$OSTYPE" in case "$OSTYPE" in
@@ -19,5 +19,12 @@ LINKER_ARGS=${!var}
var=COMPILER_ARGS_${TARGET} var=COMPILER_ARGS_${TARGET}
COMPILER_ARGS=${!var} # add -opt for an optimized build. COMPILER_ARGS=${!var} # add -opt for an optimized build.
cinterop -def $DIR/stdio.def -compilerOpts "$CFLAGS" -target $TARGET -o stdio || exit 1 mkdir -p $DIR/build/c_interop/
konanc $COMPILER_ARGS -target $TARGET $DIR/CsvParser.kt -library stdio -o CsvParser || exit 1 mkdir -p $DIR/build/bin/
cinterop -def $DIR/src/main/c_interop/stdio.def -compilerOpts "$CFLAGS" -target $TARGET -o $DIR/build/c_interop/stdio.kt.bc || exit 1
konanc $COMPILER_ARGS -target $TARGET $DIR/src/main/kotlin/CsvParser.kt -library $DIR/build/c_interop/stdio.kt.bc \
-o $DIR/build/bin/CsvParser.kexe || exit 1
echo "Artifact path is ./build/bin/CsvParser.kexe"
+1
View File
@@ -0,0 +1 @@
runArgs=./European_Mammals_Red_List_Nov_2009.csv 4 100
+9 -5
View File
@@ -1,13 +1,17 @@
# GIT frequency analyzer # GIT frequency analyzer
This example shows how one could perform statistics on Git repository. This example shows how one could perform statistics on Git repository.
libgit2 is required for this to work (`apt-get install libgit2-dev`). libgit2 is required for this to work (`apt-get install libgit2-dev`).
To build use `./build.sh` script without arguments (or specify `TARGET` variable if cross-compiling). To build use `../gradlew build` or `./build.sh`.
You also may use Gradle to build this sample: `../gradlew build`.
To run use To run use `../gradlew run`.
./GitChurn.kexe <path-to-some-git-repo> To change run arguments, change property runArgs in gradle.propeties file
or pass `-PrunArgs="../../"` to gradle run.
Alternatively you can run artifact directly
./build/konan/bin/GitChurn/GitChurn.kexe ../../
It will print most frequently modified (by number of commits) files in repository. It will print most frequently modified (by number of commits) files in repository.
+1 -62
View File
@@ -1,75 +1,14 @@
apply plugin: 'konan' apply plugin: 'konan'
konanInterop { konanInterop {
libgit2 { libgit2 {
defFile 'libgit2.def'
includeDirs '/opt/local/include', '/usr/include', '/usr/local/include' includeDirs '/opt/local/include', '/usr/include', '/usr/local/include'
} }
} }
konanArtifacts { konanArtifacts {
GitChurn { GitChurn {
inputFiles project.fileTree('src')
useInterop 'libgit2' useInterop 'libgit2'
linkerOpts "-L/opt/local/lib -L/usr/lib/x86_64-linux-gnu -L/usr/local/lib -lgit2" linkerOpts "-L/opt/local/lib -L/usr/lib/x86_64-linux-gnu -L/usr/local/lib -lgit2"
} }
} }
build {
project.ext { outputFile = "${projectDir.canonicalPath}/${file(compileKonanGitChurn.artifactPath).name}" }
doLast {
copy {
from compileKonanGitChurn.artifactPath
into projectDir.canonicalPath
}
}
}
void dumpCompilationTask(Task task) {
println()
println("Compilation task: ${task.name}")
println("outputDir : ${task.outputDir}")
println("artifactPath : ${task.artifactPath}")
println("inputFiles : ${task.inputFiles.files}")
println("libraries : ${task.libraries}")
println("nativeLibraries : ${task.nativeLibraries}")
println("linkerOpts : ${task.linkerOpts}")
println("produce : ${task.produce}")
println("noStdLib : ${task.noStdLib}")
println("noMain : ${task.noMain}")
println("enableOptimization : ${task.enableOptimization}")
println("enableAssertions : ${task.enableAssertions}")
println("target : ${task.target}")
println("languageVersion : ${task.languageVersion}")
println("apiVersion : ${task.apiVersion}")
}
void dumpInteropTask(Task task) {
println()
println("Stub generation task: ${task.name}")
println("stubsDir : ${task.stubsDir}")
println("libsDir : ${task.libsDir}")
println("defFile : ${task.defFile}")
println("target : ${task.target}")
println("pkg : ${task.pkg}")
println("linker : ${task.linker}")
println("compilerOpts : ${task.compilerOpts}")
println("linkerOpts : ${task.linkerOpts}")
println("headers : ${task.headers.files}")
println("linkFiles : ${task.linkFiles}")
}
task dumpParameters(type: DefaultTask) {
doLast {
dumpCompilationTask(konanArtifacts['GitChurn'].compilationTask)
dumpInteropTask(konanInterop['libgit2'].generateStubsTask)
dumpCompilationTask(konanInterop['libgit2'].compileStubsTask)
}
}
clean {
doLast {
delete outputFile
}
}
+14 -9
View File
@@ -1,14 +1,11 @@
#!/usr/bin/env bash #!/usr/bin/env bash
PATH=../../dist/bin:../../bin:$PATH DIR=$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd )
DIR=. PATH=$DIR/../../dist/bin:$DIR/../../bin:$PATH
# Uncomment flags if your paths differ from these ones. CFLAGS_macbook="-I/opt/local/include -compilerOpts -I/usr/local/include"
CFLAGS_macbook=-I/opt/local/include
#CFLAGS_macbook=-I/usr/local/include
CFLAGS_linux=-I/usr/include CFLAGS_linux=-I/usr/include
LINKER_ARGS_macbook="-L/opt/local/lib -lgit2" LINKER_ARGS_macbook="-L/usr/local/lib -L/opt/local/lib -lgit2"
#LINKER_ARGS_macbook="-L/usr/local/lib -lgit2"
LINKER_ARGS_linux="-L/usr/lib/x86_64-linux-gnu -lgit2" LINKER_ARGS_linux="-L/usr/lib/x86_64-linux-gnu -lgit2"
if [ x$TARGET == x ]; then if [ x$TARGET == x ]; then
@@ -26,5 +23,13 @@ LINKER_ARGS=${!var}
var=COMPILER_ARGS_${TARGET} var=COMPILER_ARGS_${TARGET}
COMPILER_ARGS=${!var} # add -opt for an optimized build. COMPILER_ARGS=${!var} # add -opt for an optimized build.
cinterop -compilerOpts $CFLAGS -def $DIR/libgit2.def -target $TARGET -o libgit2 || exit 1 mkdir -p $DIR/build/c_interop/
konanc -target $TARGET src -library libgit2 -linkerArgs "$LINKER_ARGS" -o GitChurn || exit 1 mkdir -p $DIR/build/bin/
cinterop -compilerOpts $CFLAGS -def $DIR/src/main/c_interop/libgit2.def -target $TARGET \
-o $DIR/build/c_interop/libgit2.kt.bc || exit 1
konanc -target $TARGET $DIR/src/main/kotlin -library $DIR/build/c_interop/libgit2.kt.bc -linkerOpts "$LINKER_ARGS" \
-o $DIR/build/bin/GitChurn.kexe || exit 1
echo "Artifact path is ./build/bin/GitChurn.kexe"
+1
View File
@@ -0,0 +1 @@
runArgs=../../
@@ -1,3 +1,3 @@
headers = git2.h time.h headers = git2.h time.h
linkerOpts = -lgit2 linkerOpts = -lgit2
headerFilter = git2/** time.h headerFilter = git2/** time.h
+6 -3
View File
@@ -3,15 +3,18 @@
This example shows how one may use _Kotlin/Native_ to build GUI This example shows how one may use _Kotlin/Native_ to build GUI
applications with the GTK toolkit. applications with the GTK toolkit.
To build use `./build.sh` script without arguments (or specify `TARGET` variable if cross-compiling). To build use `../gradlew build` or `./build.sh`.
You also may use gradle to build the sample: `../gradlew build`.
Do not forget to install GTK3. Do not forget to install GTK3.
On Mac use `port install gtk3`, on Debian flavours of Linux - `apt-get install libgtk-3-dev`. On Mac use `port install gtk3`, on Debian flavours of Linux - `apt-get install libgtk-3-dev`.
To run on Mac also install XQuartz X server (https://www.xquartz.org/), and then To run on Mac also install XQuartz X server (https://www.xquartz.org/), and then
./Gtk3Demo.kexe ../gradlew run
Alternatively you can run artifact directly
./build/konan/bin/Gtk3Demo/Gtk3Demo.kexe
Dialog box with the button will be shown, and application will print message Dialog box with the button will be shown, and application will print message
and terminate on button click. and terminate on button click.
-18
View File
@@ -7,30 +7,12 @@ konanInterop {
includeDirs "$it/atk-1.0", "$it/gdk-pixbuf-2.0", "$it/cairo", "$it/pango-1.0", "$it/gtk-3.0", "$it/glib-2.0" includeDirs "$it/atk-1.0", "$it/gdk-pixbuf-2.0", "$it/cairo", "$it/pango-1.0", "$it/gtk-3.0", "$it/glib-2.0"
} }
includeDirs '/opt/local/lib/glib-2.0/include', '/usr/lib/x86_64-linux-gnu/glib-2.0/include', '/usr/local/lib/glib-2.0/include' includeDirs '/opt/local/lib/glib-2.0/include', '/usr/lib/x86_64-linux-gnu/glib-2.0/include', '/usr/local/lib/glib-2.0/include'
defFile 'gtk3.def'
} }
} }
konanArtifacts { konanArtifacts {
Gtk3Demo { Gtk3Demo {
inputFiles project.fileTree('src')
useInterop 'gtk3' useInterop 'gtk3'
linkerOpts "-L/opt/local/lib -L/usr/local/lib -L/usr/lib/x86_64-linux-gnu -lglib-2.0 -lgdk-3.0 -lgtk-3 -lgio-2.0 -lgobject-2.0" linkerOpts "-L/opt/local/lib -L/usr/local/lib -L/usr/lib/x86_64-linux-gnu -lglib-2.0 -lgdk-3.0 -lgtk-3 -lgio-2.0 -lgobject-2.0"
} }
} }
build {
project.ext { outputFile = "${projectDir.canonicalPath}/${file(compileKonanGtk3Demo.artifactPath).name}" }
doLast {
copy {
from compileKonanGtk3Demo.artifactPath
into projectDir.canonicalPath
}
}
}
clean {
doLast {
delete outputFile
}
}
+16 -11
View File
@@ -1,12 +1,12 @@
#!/usr/bin/env bash #!/usr/bin/env bash
PATH=../../dist/bin:../../bin:$PATH DIR=$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd )
DIR=. PATH=$DIR/../../dist/bin:$DIR/../../bin:$PATH
IPREFIX_macbook=-I/opt/local/include IPREFIX_macbook=-I/opt/local/include
#IPREFIX_macbook=-I/usr/local/include #IPREFIX_macbook=-I/usr/local/include
IPREFIX_linux=-I/usr/include IPREFIX_linux=-I/usr/include
LINKER_ARGS_macbook="-L/opt/local/lib -lglib-2.0 -lgdk-3.0 -lgtk-3 -lgio-2.0 -lgobject-2.0" LINKER_ARGS_macbook="-L/opt/local/lib -L/usr/local/lib -lglib-2.0 -lgdk-3.0 -lgtk-3 -lgio-2.0 -lgobject-2.0"
LINKER_ARGS_linux="-L/usr/lib/x86_64-linux-gnu -lglib-2.0 -lgdk-3 -lgtk-3 -lgio-2.0 -lgobject-2.0" LINKER_ARGS_linux="-L/usr/lib/x86_64-linux-gnu -lglib-2.0 -lgdk-3 -lgtk-3 -lgio-2.0 -lgobject-2.0"
if [ x$TARGET == x ]; then if [ x$TARGET == x ]; then
@@ -24,11 +24,16 @@ LINKER_ARGS=${!var}
var=COMPILER_ARGS_${TARGET} var=COMPILER_ARGS_${TARGET}
COMPILER_ARGS=${!var} # add -opt for an optimized build. COMPILER_ARGS=${!var} # add -opt for an optimized build.
if [ ! -f $DIR/gtk3.klib ]; then mkdir -p $DIR/build/c_interop/
echo "Generating GTK stubs (once), may take few mins depending on the hardware..." mkdir -p $DIR/build/bin/
cinterop -J-Xmx8g -compilerOpts "$IPREFIX/atk-1.0 $IPREFIX/gdk-pixbuf-2.0 $IPREFIX/cairo $IPREFIX/pango-1.0 \
-I/opt/local/lib/glib-2.0/include -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/local/lib/glib-2.0/include \ echo "Generating GTK stubs, may take few mins depending on the hardware..."
$IPREFIX/gtk-3.0 $IPREFIX/glib-2.0" -def $DIR/gtk3.def \ cinterop -J-Xmx8g -copt $IPREFIX/atk-1.0 -compilerOpts $IPREFIX/gdk-pixbuf-2.0 -copt $IPREFIX/cairo -copt $IPREFIX/pango-1.0 \
-target $TARGET -o $DIR/gtk3 || exit 1 -copt -I/opt/local/lib/glib-2.0/include -copt -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -copt -I/usr/local/lib/glib-2.0/include \
fi -copt $IPREFIX/gtk-3.0 -copt $IPREFIX/glib-2.0 -def $DIR/src/main/c_interop/gtk3.def \
konanc -target $TARGET $DIR/src -library $DIR/gtk3 -linkerOpts "$LINKER_ARGS" -o $DIR/Gtk3Demo || exit 1 -target $TARGET -o $DIR/build/c_interop/gtk3.bc || exit 1
konanc -target $TARGET $DIR/src/main/kotlin -library $DIR/build/c_interop/gtk3.bc -linkerOpts "$LINKER_ARGS" \
-o $DIR/build/bin/Gtk3Demo.kexe || exit 1
echo "Artifact path is ./build/bin/Gtk3Demo.kexe"
+9 -4
View File
@@ -2,11 +2,16 @@
This example shows how to communicate with libcurl, HTTP/HTTPS/FTP/etc client library. This example shows how to communicate with libcurl, HTTP/HTTPS/FTP/etc client library.
Debian-like distros may need to `apt-get install libcurl4-openssl-dev`. Debian-like distros may need to `apt-get install libcurl4-openssl-dev`.
To build use `./build.sh` script without arguments (or specify `TARGET` variable if cross-compiling).
You also may use Gradle to build this sample: `../gradlew build`.
To run use To build use `../gradlew build` or `./build.sh`.
./Curl.kexe https://www.jetbrains.com To run use `../gradlew run`
To change run arguments, change property runArgs in gradle.propeties file
or pass `-PrunArgs="https://www.jetbrains.com"` to gradle run.
Alternatively you can run artifact directly
./build/konan/bin/Curl/Curl.kexe https://www.jetbrains.com
It will perform HTTP get and print out the data obtained. It will perform HTTP get and print out the data obtained.
-18
View File
@@ -2,31 +2,13 @@ apply plugin: 'konan'
konanInterop { konanInterop {
libcurl { libcurl {
defFile 'libcurl.def'
includeDirs '/usr/include', '/opt/local/include', '/usr/local/opt/curl/include', '.' includeDirs '/usr/include', '/opt/local/include', '/usr/local/opt/curl/include', '.'
} }
} }
konanArtifacts { konanArtifacts {
Curl { Curl {
inputFiles project.fileTree('src')
useInterop 'libcurl' useInterop 'libcurl'
linkerOpts "-L/opt/local/lib -L/usr/lib/x86_64-linux-gnu -L/usr/local/opt/curl/lib -lcurl" linkerOpts "-L/opt/local/lib -L/usr/lib/x86_64-linux-gnu -L/usr/local/opt/curl/lib -lcurl"
} }
} }
build {
project.ext { outputFile = "${projectDir.canonicalPath}/${file(compileKonanCurl.artifactPath).name}" }
doLast {
copy {
from compileKonanCurl.artifactPath
into projectDir.canonicalPath
}
}
}
clean {
doLast {
delete outputFile
}
}
+13 -5
View File
@@ -1,9 +1,9 @@
#!/usr/bin/env bash #!/usr/bin/env bash
PATH=../../dist/bin:../../bin:$PATH DIR=$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd )
DIR=. PATH=$DIR/../../dist/bin:$DIR/../../bin:$PATH
CFLAGS_macbook="-I /opt/local/include" CFLAGS_macbook=-I/opt/local/include
CFLAGS_linux="-I /usr/include -I /usr/include/x86_64-linux-gnu" CFLAGS_linux="-I /usr/include -I /usr/include/x86_64-linux-gnu"
LINKER_ARGS_macbook="-L/opt/local/lib -lcurl" LINKER_ARGS_macbook="-L/opt/local/lib -lcurl"
LINKER_ARGS_linux="-L/usr/lib/x86_64-linux-gnu -lcurl" LINKER_ARGS_linux="-L/usr/lib/x86_64-linux-gnu -lcurl"
@@ -23,5 +23,13 @@ LINKER_ARGS=${!var}
var=COMPILER_ARGS_${TARGET} var=COMPILER_ARGS_${TARGET}
COMPILER_ARGS=${!var} # add -opt for an optimized build. COMPILER_ARGS=${!var} # add -opt for an optimized build.
cinterop -compilerOpts "$CFLAGS" -def $DIR/libcurl.def -target $TARGET -o libcurl || exit 1 mkdir -p $DIR/build/c_interop/
konanc -target $TARGET src -library libcurl -linkerOpts "$LINKER_ARGS" -o Curl || exit 1 mkdir -p $DIR/build/bin/
cinterop -compilerOpts "$CFLAGS" -compilerOpts -I$DIR -compilerOpts -I/usr/include -def $DIR/src/main/c_interop/libcurl.def -target $TARGET \
-o $DIR/build/c_interop/libcurl.bc || exit 1
konanc -target $TARGET $DIR/src/main/kotlin -library $DIR/build/c_interop/libcurl.bc -linkerOpts "$LINKER_ARGS" \
-o $DIR/build/bin/Curl.kexe || exit 1
echo "Artifact path is ./build/bin/Curl.kexe"
+1
View File
@@ -0,0 +1 @@
runArgs=https://www.jetbrains.com
+9 -8
View File
@@ -7,17 +7,18 @@ are being suspended and resumed whenever relevant.
Thus, while server can process multiple connections concurrently, Thus, while server can process multiple connections concurrently,
each individual connection handler is written in simple linear manner. each individual connection handler is written in simple linear manner.
Compile the echo server (in EAP only supported on Mac host): To build use `../gradlew build` or `./build.sh`.
./build.sh
You also may use Gradle to build the server:
../gradlew build
Run the server: Run the server:
./EchoServer.kexe 3000 & ../gradlew run
To change run arguments, change property runArgs in gradle.propeties file
or pass `-PrunArgs="3000"` to gradle run.
Alternatively you can run artifact directly
./build/konan/bin/EchoServer/EchoServer.kexe 3000 &
Test the server by connecting to it, for example with telnet: Test the server by connecting to it, for example with telnet:
+1 -20
View File
@@ -1,30 +1,11 @@
apply plugin: 'konan' apply plugin: 'konan'
konanInterop { konanInterop {
sockets { sockets { }
defFile "sockets.def"
}
} }
konanArtifacts { konanArtifacts {
EchoServer { EchoServer {
inputFiles project.file("EchoServer.kt")
useInterop "sockets" useInterop "sockets"
} }
} }
build {
project.ext { outputFile = "${projectDir.canonicalPath}/${file(compileKonanEchoServer.artifactPath).name}" }
doLast {
copy {
from compileKonanEchoServer.artifactPath
into projectDir.canonicalPath
}
}
}
clean {
doLast {
delete outputFile
}
}
+12 -4
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
PATH=../../dist/bin:../../bin:$PATH DIR=$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd )
DIR=. PATH=$DIR/../../dist/bin:$DIR/../../bin:$PATH
if [ x$TARGET == x ]; then if [ x$TARGET == x ]; then
case "$OSTYPE" in case "$OSTYPE" in
@@ -18,5 +18,13 @@ LINKER_ARGS=${!var}
var=COMPILER_ARGS_${TARGET} var=COMPILER_ARGS_${TARGET}
COMPILER_ARGS=${!var} # add -opt for an optimized build. COMPILER_ARGS=${!var} # add -opt for an optimized build.
cinterop -def $DIR/sockets.def -copt "$CFLAGS" -target $TARGET -o sockets || exit 1 mkdir -p $DIR/build/c_interop/
konanc $COMPILER_ARGS -target $TARGET $DIR/EchoServer.kt -library sockets -o EchoServer || exit 1 mkdir -p $DIR/build/bin/
cinterop -def $DIR/src/main/c_interop/sockets.def -copt "$CFLAGS" -target $TARGET \
-o $DIR/build/c_interop/sockets.kt.bc || exit 1
konanc $COMPILER_ARGS -target $TARGET $DIR/src/main/kotlin/EchoServer.kt \
-library $DIR/build/c_interop/sockets.kt.bc -o $DIR/build/bin/EchoServer.kexe || exit 1
echo "Artifact path is ./build/bin/EchoServer.kexe"
@@ -0,0 +1 @@
runArgs=3000
+5 -4
View File
@@ -3,12 +3,13 @@
This example shows interaction with OpenGL library, to render classical 3D test model. Linux build requires `apt-get install freeglut3-dev` or similar, This example shows interaction with OpenGL library, to render classical 3D test model. Linux build requires `apt-get install freeglut3-dev` or similar,
MacOS shall work as is. MacOS shall work as is.
To build use `./build.sh` script without arguments (or specify `TARGET` variable if cross-compiling). To build use `../gradlew build` or `./build.sh`.
You also may use Gradle to build this sample: `../gradlew build`.
To run use To run use `../gradlew run`
./OpenGlTeapot.kexe Alternatively you can run artifact directly
./build/konan/bin/OpenGlTeapot${target}/OpenGlTeapot${target}.kexe
It will render 3D model of teapot. Feel free to experiment with it, the whole power of OpenGL It will render 3D model of teapot. Feel free to experiment with it, the whole power of OpenGL
is at your hands. is at your hands.
+8 -27
View File
@@ -1,39 +1,20 @@
apply plugin: 'konan' apply plugin: 'konan'
konanInterop { konanInterop {
opengl { opengl { }
defFile 'opengl.def'
}
} }
konanArtifacts { konanArtifacts {
OpenGlTeapot { OpenGlTeapotMacbook {
inputFiles project.file("OpenGlTeapot.kt")
useInterop 'opengl' useInterop 'opengl'
def osName = System.getProperty("os.name") linkerOpts "-framework OpenGL -framework GLUT"
if (osName.equals("Mac OS X")) { target "macbook"
linkerOpts "-framework OpenGL -framework GLUT"
}
if (osName.equals("Linux")) {
linkerOpts "-L/usr/lib/x86_64-linux-gnu -lglut -lGL -lGLU"
}
} }
}
OpenGlTeapotLinux {
build { useInterop 'opengl'
project.ext { outputFile = "${projectDir.canonicalPath}/${file(compileKonanOpenGlTeapot.artifactPath).name}" } linkerOpts "-L/usr/lib/x86_64-linux-gnu -lglut -lGL -lGLU"
doLast { target "linux"
copy {
from compileKonanOpenGlTeapot.artifactPath
into projectDir.canonicalPath
}
}
}
clean {
doLast {
delete outputFile
} }
} }
+12 -4
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
PATH=../../dist/bin:../../bin:$PATH DIR=$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd )
DIR=. PATH=$DIR/../../dist/bin:$DIR/../../bin:$PATH
LINKER_ARGS_macbook="-framework OpenGL -framework GLUT" LINKER_ARGS_macbook="-framework OpenGL -framework GLUT"
LINKER_ARGS_linux="-L/usr/lib/x86_64-linux-gnu -lglut -lGL -lGLU" LINKER_ARGS_linux="-L/usr/lib/x86_64-linux-gnu -lglut -lGL -lGLU"
@@ -21,5 +21,13 @@ LINKER_ARGS=${!var}
var=COMPILER_ARGS_${TARGET} var=COMPILER_ARGS_${TARGET}
COMPILER_ARGS=${!var} # add -opt for an optimized build. COMPILER_ARGS=${!var} # add -opt for an optimized build.
cinterop -def $DIR/opengl.def -target $TARGET -o opengl || exit 1 mkdir -p $DIR/build/c_interop/
konanc -target $TARGET $DIR/OpenGlTeapot.kt -library opengl -linkerOpts "$LINKER_ARGS" -o OpenGlTeapot || exit 1 mkdir -p $DIR/build/bin/
cinterop -def $DIR/src/main/c_interop/opengl.def -target $TARGET \
-o $DIR/build/c_interop/opengl.kt.bc || exit 1
konanc -target $TARGET $DIR/src/main/kotlin/OpenGlTeapot.kt -library $DIR/build/c_interop/opengl.kt.bc \
-linkerOpts "$LINKER_ARGS" -o $DIR/build/bin/OpenGlTeapot.kexe || exit 1
echo "Artifact path is ./build/bin/OpenGlTeapot.kexe"
+2 -1
View File
@@ -6,5 +6,6 @@ include ':nonBlockingEchoServer'
include ':opengl' include ':opengl'
include ':socket' include ':socket'
include ':tetris' include ':tetris'
include ':tensorflow'
include ':concurrent'
includeBuild '../' includeBuild '../'
+2
View File
@@ -6,3 +6,5 @@ include ':nonBlockingEchoServer'
include ':opengl' include ':opengl'
include ':socket' include ':socket'
include ':tetris' include ':tetris'
include ':tensorflow'
include ':concurrent'
+9 -8
View File
@@ -1,16 +1,17 @@
# Sockets demo # Sockets demo
Compile the echo server (in EAP only supported on Mac host): To build use `../gradlew build` or `./build.sh`.
./build.sh
You also may use Gradle to build the server:
../gradlew build
Run the server: Run the server:
./EchoServer.kexe 3000 & ../gradlew run
To change run arguments, change property runArgs in gradle.propeties file
or pass `-PrunArgs="3000"` to gradle run.
Alternatively you can run artifact directly
./build/konan/bin/EchoServer/EchoServer.kexe 3000 &
Test the server by conecting to it, for example with telnet: Test the server by conecting to it, for example with telnet:
+1 -20
View File
@@ -1,30 +1,11 @@
apply plugin: 'konan' apply plugin: 'konan'
konanInterop { konanInterop {
sockets { sockets { }
defFile "sockets.def"
}
} }
konanArtifacts { konanArtifacts {
EchoServer { EchoServer {
inputFiles project.file("EchoServer.kt")
useInterop "sockets" useInterop "sockets"
} }
} }
build {
project.ext { outputFile = "${projectDir.canonicalPath}/${file(compileKonanEchoServer.artifactPath).name}" }
doLast {
copy {
from compileKonanEchoServer.artifactPath
into projectDir.canonicalPath
}
}
}
clean {
doLast {
delete outputFile
}
}
+13 -4
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
PATH=../../dist/bin:../../bin:$PATH DIR=$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd )
DIR=. PATH=$DIR/../../dist/bin:$DIR/../../bin:$PATH
if [ x$TARGET == x ]; then if [ x$TARGET == x ]; then
case "$OSTYPE" in case "$OSTYPE" in
@@ -18,5 +18,14 @@ LINKER_ARGS=${!var}
var=COMPILER_ARGS_${TARGET} var=COMPILER_ARGS_${TARGET}
COMPILER_ARGS=${!var} # add -opt for an optimized build. COMPILER_ARGS=${!var} # add -opt for an optimized build.
cinterop -def $DIR/sockets.def -copt "$CFLAGS" -target $TARGET -o sockets || exit 1 mkdir -p $DIR/build/c_interop/
konanc $COMPILER_ARGS -target $TARGET $DIR/EchoServer.kt -library sockets -o EchoServer || exit 1 mkdir -p $DIR/build/bin/
cinterop -def $DIR/src/main/c_interop/sockets.def -copt "$CFLAGS" -target $TARGET \
-o $DIR/build/c_interop/sockets.kt.bc || exit 1
konanc $COMPILER_ARGS -target $TARGET $DIR/src/main/kotlin/EchoServer.kt \
-library $DIR/build/c_interop/sockets.kt.bc \
-o $DIR/build/bin/EchoServer.kexe || exit 1
echo "Artifact path is ./build/bin/EchoServer.kexe"
+1
View File
@@ -0,0 +1 @@
runArgs=3000
+10 -4
View File
@@ -10,14 +10,20 @@ showing how a TensorFlow client in Kotlin/Native could look like.
## Installation ## Installation
./build.sh ./downloadTensorflow.sh
will install [TensorFlow for C](https://www.tensorflow.org/versions/r1.1/install/install_c) into will install [TensorFlow for C](https://www.tensorflow.org/versions/r1.1/install/install_c) into
`$HOME/.konan/third-party/tensorflow` (if not yet done) and build the example. `$HOME/.konan/third-party/tensorflow` (if not yet done).
./HelloTensorflow.kexe To build use `../gradlew build` or `./build.sh`.
Then run
will then run the example. ../gradlew run
Alternatively you can run artifact directly
./build/konan/bin/Tensorflow/Tensorflow.kexe
You may need to specify `LD_LIBRARY_PATH` or `DYLD_LIBRARY_PATH` to `$HOME/.konan/third-party/tensorflow/lib` You may need to specify `LD_LIBRARY_PATH` or `DYLD_LIBRARY_PATH` to `$HOME/.konan/third-party/tensorflow/lib`
if the TensorFlow dynamic library cannot be found. if the TensorFlow dynamic library cannot be found.
+14
View File
@@ -0,0 +1,14 @@
apply plugin: 'konan'
konanInterop {
tensorflow {
includeDirs "${System.getProperty("user.home")}/.konan/third-party/tensorflow/include"
}
}
konanArtifacts {
Tensorflow {
useInterop "tensorflow"
linkerOpts "-L${System.getProperty("user.home")}/.konan/third-party/tensorflow/lib -ltensorflow"
}
}
+19 -15
View File
@@ -1,13 +1,13 @@
#!/usr/bin/env bash #!/usr/bin/env bash
PATH=../../dist/bin:../../bin:$PATH ./downloadTensorflow.sh
DIR=.
DIR=$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd )
PATH=$DIR/../../dist/bin:$DIR/../../bin:$PATH
TF_TARGET_DIRECTORY="$HOME/.konan/third-party/tensorflow" TF_TARGET_DIRECTORY="$HOME/.konan/third-party/tensorflow"
TF_TYPE="cpu" # Change to "gpu" for GPU support TF_TYPE="cpu" # Change to "gpu" for GPU support
CFLAGS_macbook="-I ${TF_TARGET_DIRECTORY}/include"
CFLAGS_linux="-I ${TF_TARGET_DIRECTORY}/include"
if [ x$TARGET == x ]; then if [ x$TARGET == x ]; then
case "$OSTYPE" in case "$OSTYPE" in
darwin*) TARGET=macbook; TF_TARGET=darwin ;; darwin*) TARGET=macbook; TF_TARGET=darwin ;;
@@ -16,6 +16,9 @@ case "$OSTYPE" in
esac esac
fi fi
CFLAGS_macbook="-I${TF_TARGET_DIRECTORY}/include"
CFLAGS_linux="-I${TF_TARGET_DIRECTORY}/include"
var=CFLAGS_${TARGET} var=CFLAGS_${TARGET}
CFLAGS=${!var} CFLAGS=${!var}
var=LINKER_ARGS_${TARGET} var=LINKER_ARGS_${TARGET}
@@ -23,16 +26,17 @@ LINKER_ARGS=${!var}
var=COMPILER_ARGS_${TARGET} var=COMPILER_ARGS_${TARGET}
COMPILER_ARGS=${!var} # add -opt for an optimized build. COMPILER_ARGS=${!var} # add -opt for an optimized build.
if [ ! -d $TF_TARGET_DIRECTORY/include/tensorflow ]; then mkdir -p $DIR/build/c_interop/
echo "Installing TensorFlow into $TF_TARGET_DIRECTORY ..." mkdir -p $DIR/build/bin/
mkdir -p $TF_TARGET_DIRECTORY
curl -s -L \
"https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-${TF_TYPE}-${TF_TARGET}-x86_64-1.1.0.tar.gz" |
tar -C $TF_TARGET_DIRECTORY -xz
fi
cinterop -def $DIR/tensorflow.def -compilerOpts "$CFLAGS" -target $TARGET -o tensorflow || exit 1 cinterop -def $DIR/src/main/c_interop/tensorflow.def -compilerOpts "$CFLAGS" -target $TARGET \
konanc $COMPILER_ARGS -target $TARGET $DIR/HelloTensorflow.kt -library tensorflow -o HelloTensorflow \ -o $DIR/build/c_interop/tensorflow.kt.bc || exit 1
-linkerOpts "-L$TF_TARGET_DIRECTORY/lib -ltensorflow" || exit 1
konanc $COMPILER_ARGS -target $TARGET $DIR/src/main/kotlin/HelloTensorflow.kt \
-library $DIR/build/c_interop/tensorflow.kt.bc \
-o $DIR/build/bin/HelloTensorflow.kexe \
-linkerOpts "-L$TF_TARGET_DIRECTORY/lib -ltensorflow" || exit 1
echo "Note: You may need to specify LD_LIBRARY_PATH or DYLD_LIBRARY_PATH env variables to $TF_TARGET_DIRECTORY/lib if the TensorFlow dynamic library cannot be found." echo "Note: You may need to specify LD_LIBRARY_PATH or DYLD_LIBRARY_PATH env variables to $TF_TARGET_DIRECTORY/lib if the TensorFlow dynamic library cannot be found."
echo "Artifact path is ./build/bin/HelloTensorflow.kexe"
+23
View File
@@ -0,0 +1,23 @@
#!/usr/bin/env bash
DIR=$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd )
PATH=$DIR/../../dist/bin:$DIR/../../bin:$PATH
TF_TARGET_DIRECTORY="$HOME/.konan/third-party/tensorflow"
TF_TYPE="cpu" # Change to "gpu" for GPU support
if [ x$TARGET == x ]; then
case "$OSTYPE" in
darwin*) TARGET=macbook; TF_TARGET=darwin ;;
linux*) TARGET=linux; TF_TARGET=linux ;;
*) echo "unknown: $OSTYPE" && exit 1;;
esac
fi
if [ ! -d $TF_TARGET_DIRECTORY/include/tensorflow ]; then
echo "Installing TensorFlow into $TF_TARGET_DIRECTORY ..."
mkdir -p $TF_TARGET_DIRECTORY
curl -s -L \
"https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-${TF_TYPE}-${TF_TARGET}-x86_64-1.1.0.tar.gz" |
tar -C $TF_TARGET_DIRECTORY -xz
fi
+11 -10
View File
@@ -13,26 +13,27 @@ use `apt-get install libsdl2-dev`.
For Windows - `pacman -S mingw-w64-x86_64-SDL2` in MinGW64 console, if you do For Windows - `pacman -S mingw-w64-x86_64-SDL2` in MinGW64 console, if you do
not have MSYS2-MinGW64 installed - install it first as described in http://www.msys2.org not have MSYS2-MinGW64 installed - install it first as described in http://www.msys2.org
To build Tetris application for your host platform use To build Tetris application for your host platform (Mac or Linux) use `../gradlew build`.
For Mac and Linux: Aleternatively for Mac and Linux `./build.sh`.
./build.sh For Windows use `build.bat`.
This task builds the sample for your host platform. Note that SDL2 must be installed on the host.
For Windows: To run it on the host use `../gradlew run`
build.bat Alternatively you can run artifact directly
You also may use gradle to build this sample: `../gradlew build`. This task builds the sample for all platforms ./build/konan/bin/Tetris${target}/Tetris${target}.kexe
supported by the host. Note that SDL2 must be installed on the host.
For cross-compilation to iOS (on Mac host) use For cross-compilation to iOS (on Mac host) use gradle property
TARGET=iphone ./build.sh konan.build.targets=iphone
For cross-compilation to Raspberry Pi (on Linux host) use For cross-compilation to Raspberry Pi (on Linux host) use
TARGET=raspberrypi ./build.sh konan.build.targets=raspberrypi
During build process compilation script creates interoperability bindings to SDL2, using SDL C headers, During build process compilation script creates interoperability bindings to SDL2, using SDL C headers,
and then compiles an application with the produced bindings. and then compiles an application with the produced bindings.
+3 -2
View File
@@ -10,10 +10,11 @@ set "CFLAGS=-I%MINGW%\include\SDL2"
rem Add -Wl,--subsystem,windows for making GUI subsystem application. rem Add -Wl,--subsystem,windows for making GUI subsystem application.
set "LFLAGS=%DIR%\Tetris.res -L%MINGW%\lib -lSDL2" set "LFLAGS=%DIR%\Tetris.res -L%MINGW%\lib -lSDL2"
call cinterop -def "%DIR%\sdl.def" -compilerOpts "%CFLAGS%" -target "%TARGET%" -o sdl || exit /b call cinterop -def "%DIR%\src\main\c_interop\sdl.def" -compilerOpts "%CFLAGS%" -target "%TARGET%" -o sdl || exit /b
rem Windows build requires Windows Resource Compiler in paths. rem Windows build requires Windows Resource Compiler in paths.
call windres "%DIR%\Tetris.rc" -O coff -o "%DIR%\Tetris.res" || exit /b call windres "%DIR%\Tetris.rc" -O coff -o "%DIR%\Tetris.res" || exit /b
call konanc -target "%TARGET%" "%DIR%\Tetris.kt" -library sdl -linkerOpts "%LFLAGS%" -opt -o Tetris || exit /b call konanc -target "%TARGET%" "%DIR%\src\main\kotlin\Tetris.kt" -library sdl -linkerOpts "%LFLAGS%" -opt -o Tetris || exit /b
copy Tetris.kexe Tetris.exe copy Tetris.kexe Tetris.exe
copy %MINGW%\bin\SDL2.dll SDL2.dll copy %MINGW%\bin\SDL2.dll SDL2.dll
copy src\main\resources\tetris_all.bmp tetris_all.bmp
+11 -25
View File
@@ -2,7 +2,8 @@ apply plugin: 'konan'
konanInterop { konanInterop {
sdlMacbook { sdlMacbook {
defFile 'sdl.def' defFile 'src/main/c_interop/sdl.def'
pkg 'sdl'
includeDirs '/Library/Frameworks/SDL2.framework/Headers', includeDirs '/Library/Frameworks/SDL2.framework/Headers',
"${System.getProperty("user.home")}/Library/Frameworks/SDL2.framework/Headers", "${System.getProperty("user.home")}/Library/Frameworks/SDL2.framework/Headers",
'/opt/local/include/SDL2', '/opt/local/include/SDL2',
@@ -12,19 +13,22 @@ konanInterop {
} }
sdlLinux { sdlLinux {
defFile 'sdl.def' defFile 'src/main/c_interop/sdl.def'
pkg 'sdl'
includeDirs '/usr/include/SDL2' includeDirs '/usr/include/SDL2'
target 'linux' target 'linux'
} }
sdlIphone { sdlIphone {
defFile 'sdl.def' defFile 'src/main/c_interop/sdl.def'
pkg 'sdl'
includeDirs "${project.property("konan.home")}/dependencies/target-sysroot-2-darwin-ios/System/Library/Frameworks/SDL2.framework/Headers" includeDirs "${project.property("konan.home")}/dependencies/target-sysroot-2-darwin-ios/System/Library/Frameworks/SDL2.framework/Headers"
target 'iphone' target 'iphone'
} }
sdlRaspberry { sdlRaspberry {
defFile 'sdl.def' defFile 'src/main/c_interop/sdl.def'
pkg 'sdl'
includeDirs "${project.property("konan.home")}/dependencies/target-sysroot-1-raspberrypi/usr/include/SDL2" includeDirs "${project.property("konan.home")}/dependencies/target-sysroot-1-raspberrypi/usr/include/SDL2"
target 'raspberrypi' target 'raspberrypi'
} }
@@ -32,7 +36,6 @@ konanInterop {
konanArtifacts { konanArtifacts {
TetrisMacbook { TetrisMacbook {
inputFiles project.file('Tetris.kt')
useInterop 'sdlMacbook' useInterop 'sdlMacbook'
linkerOpts "-F ${System.getProperty("user.home")}/Library/Frameworks -F /Library/Frameworks -framework SDL2" linkerOpts "-F ${System.getProperty("user.home")}/Library/Frameworks -F /Library/Frameworks -framework SDL2"
// Use this line instead of the previous one if you've got a 'No SDL-framework' error. // Use this line instead of the previous one if you've got a 'No SDL-framework' error.
@@ -41,18 +44,13 @@ konanArtifacts {
} }
TetrisLinux { TetrisLinux {
inputFiles project.file('Tetris.kt')
useInterop 'sdlLinux' useInterop 'sdlLinux'
linkerOpts '-L/usr/lib/x86_64-linux-gnu -lSDL2' linkerOpts '-L/usr/lib/x86_64-linux-gnu -lSDL2'
target 'linux' target 'linux'
} }
TetrisIphone { TetrisIphone {
inputFiles project.file('Tetris.kt')
useInterop 'sdlIphone' useInterop 'sdlIphone'
linkerOpts '-framework SDL2 -framework AVFoundation -framework CoreGraphics -framework CoreMotion ' + linkerOpts '-framework SDL2 -framework AVFoundation -framework CoreGraphics -framework CoreMotion ' +
'-framework Foundation -framework GameController -framework AudioToolbox -framework OpenGLES ' + '-framework Foundation -framework GameController -framework AudioToolbox -framework OpenGLES ' +
'-framework QuartzCore -framework UIKit' '-framework QuartzCore -framework UIKit'
@@ -61,34 +59,22 @@ konanArtifacts {
} }
TetrisRaspberry { TetrisRaspberry {
inputFiles project.file('Tetris.kt')
useInterop 'sdlRaspberry' useInterop 'sdlRaspberry'
linkerOpts '-lSDL2' linkerOpts '-lSDL2'
target 'raspberrypi' target 'raspberrypi'
} }
} }
build { build {
project.ext { project.ext {
buildTasks = getTaskDependencies().getDependencies().findAll { task -> task.name.startsWith("compileKonan") } buildTasks = getTaskDependencies().getDependencies().findAll { task -> task.name.startsWith("compileKonan") }
outputFiles = buildTasks.collect { task -> "${projectDir.canonicalPath}/${file(task.artifactPath).name}" }
} }
doLast { doLast {
buildTasks.forEach() { task -> buildTasks.forEach() { task ->
copy { copy {
from task.artifactPath from 'src/main/resources'
into projectDir.canonicalPath into file(task.artifactPath).parentFile
} }
} }
} }
} }
clean {
doLast {
outputFiles.forEach {
delete it
}
}
}
+15 -5
View File
@@ -1,10 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
PATH=../../dist/bin:../../bin:$PATH DIR=$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd )
DIR=. PATH=$DIR/../../dist/bin:$DIR/../../bin:$PATH
DEPS=$(dirname `type -p konanc`)/../dependencies DEPS=$(dirname `type -p konanc`)/../dependencies
CFLAGS_macbook="-I $HOME/Library/Frameworks/SDL2.framework/Headers" CFLAGS_macbook=-I$HOME/Library/Frameworks/SDL2.framework/Headers
LINKER_ARGS_macbook="-F $HOME/Library/Frameworks -framework SDL2" LINKER_ARGS_macbook="-F $HOME/Library/Frameworks -framework SDL2"
COMPILER_ARGS_macbook= COMPILER_ARGS_macbook=
# Uncomment this if your path to SDL differs from the one above. # Uncomment this if your path to SDL differs from the one above.
@@ -42,5 +42,15 @@ LINKER_ARGS=${!var}
var=COMPILER_ARGS_${TARGET} var=COMPILER_ARGS_${TARGET}
COMPILER_ARGS=${!var} # add -opt for an optimized build. COMPILER_ARGS=${!var} # add -opt for an optimized build.
cinterop -def $DIR/sdl.def -compilerOpts "$CFLAGS" -target $TARGET -o sdl || exit 1 mkdir -p $DIR/build/c_interop/
konanc $COMPILER_ARGS -target $TARGET $DIR/Tetris.kt -library sdl -linkerOpts "$LINKER_ARGS" -o Tetris || exit 1 mkdir -p $DIR/build/bin/
cinterop -def $DIR/src/main/c_interop/sdl.def -compilerOpts "$CFLAGS" -target $TARGET -o $DIR/build/c_interop/sdl.kt.bc || exit 1
konanc $COMPILER_ARGS -target $TARGET $DIR/src/main/kotlin/Tetris.kt \
-library $DIR/build/c_interop/sdl.kt.bc -linkerOpts "$LINKER_ARGS" \
-o $DIR/build/bin/Tetris.kexe || exit 1
cp -R $DIR/src/main/resources/ $DIR/build/bin/
echo "Artifact path is ./build/bin/Tetris.kexe"

Before

Width:  |  Height:  |  Size: 110 KiB

After

Width:  |  Height:  |  Size: 110 KiB