Skip to content

Commit 79dedd1

Browse files
authored
Merge pull request #198 from Kotlin/V0.3.0
Fix build and js tests
2 parents 661468c + b147bec commit 79dedd1

8 files changed

Lines changed: 101 additions & 63 deletions

File tree

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ repositories {
2828
}
2929
3030
dependencies {
31-
implementation "org.jetbrains.kotlinx:multik-core:0.2.2"
32-
implementation "org.jetbrains.kotlinx:multik-default:0.2.2"
31+
implementation "org.jetbrains.kotlinx:multik-core:0.2.3"
32+
implementation "org.jetbrains.kotlinx:multik-default:0.2.3"
3333
}
3434
```
3535

@@ -40,8 +40,8 @@ repositories {
4040
}
4141

4242
dependencies {
43-
implementation("org.jetbrains.kotlinx:multik-core:0.2.2")
44-
implementation("org.jetbrains.kotlinx:multik-default:0.2.2")
43+
implementation("org.jetbrains.kotlinx:multik-core:0.2.3")
44+
implementation("org.jetbrains.kotlinx:multik-default:0.2.3")
4545
}
4646
```
4747

@@ -52,7 +52,7 @@ kotlin {
5252
sourceSets {
5353
val commonMain by getting {
5454
dependencies {
55-
implementation("org.jetbrains.kotlinx:multik-core:0.2.2")
55+
implementation("org.jetbrains.kotlinx:multik-core:0.2.3")
5656
}
5757
}
5858
}
@@ -66,7 +66,7 @@ kotlin {
6666
sourceSets {
6767
val jvmName by getting {
6868
dependencies {
69-
implementation("org.jetbrains.kotlinx:multik-core-jvm:0.2.2")
69+
implementation("org.jetbrains.kotlinx:multik-core-jvm:0.2.3")
7070
}
7171
}
7272
}

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
kotlin.code.style=official
2-
multik_version=0.2.2
2+
multik_version=0.2.3
33

44
# Kotlin
55
systemProp.kotlin_version=1.9.22

gradle/multik_jni-cmake.gradle

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
1-
21
def cmake_path = "${rootDir}/multik-openblas/multik_jni"
3-
def path_to_build = file("${buildDir}/cmake-build")
2+
def path_to_build = layout.buildDirectory.dir("cmake-build").get().asFile.absolutePath
43

5-
def String getTargetOSAndArch() {
4+
String getTargetOSAndArch() {
65
String hostOs = System.getProperty('os.name').toLowerCase()
76
String hostArch = System.getProperty('os.arch').toLowerCase()
87
if (hostOs == "mac os x" && hostArch == "x86_64")
98
return 'macosX64'
10-
else if(hostOs == "mac os x" && hostArch == "aarch64")
9+
else if (hostOs == "mac os x" && hostArch == "aarch64")
1110
return 'macosArm64'
12-
else if(hostOs == "linux")
11+
else if (hostOs == "linux")
1312
return 'linuxX64'
14-
else if(hostOs.startsWith("windows"))
13+
else if (hostOs.startsWith("windows"))
1514
return 'mingwX64'
1615
else
1716
throw GradleException("""
@@ -34,43 +33,42 @@ static boolean isWindows() {
3433
return System.getProperty('os.name').toLowerCase().contains('windows')
3534
}
3635

37-
task createBuildDir() {
38-
mkdir(project.buildDir)
39-
mkdir(file("${project.buildDir}/cmake-build"))
36+
tasks.register('createBuildDir') {
37+
doLast {
38+
mkdir(layout.buildDirectory.get().asFile)
39+
mkdir(layout.buildDirectory.dir("cmake-build").get().asFile)
40+
}
4041
}
4142

42-
task config_cmake(dependsOn: createBuildDir) {
43-
def type_build = "-DCMAKE_BUILD_TYPE=Release"
44-
def gen = isWindows() ? "CodeBlocks - MinGW Makefiles" : "CodeBlocks - Unix Makefiles"
45-
def c_compiler = "-DCMAKE_C_COMPILER=$cmake_c_compiler"
46-
def cxx_compiler = "-DCMAKE_CXX_COMPILER=$cmake_cxx_compiler"
47-
def path_to_gcc_lib = "-DGCC_LIB_PATH=$lib_gcc_path"
43+
tasks.register('config_cmake') {
44+
dependsOn createBuildDir
45+
String gen = isWindows() ? "-G CodeBlocks - MinGW Makefiles" : ""
4846
doLast {
4947
exec {
50-
commandLine("cmake",
51-
type_build,
52-
c_compiler,
53-
cxx_compiler,
54-
path_to_gcc_lib,
48+
commandLine "cmake",
49+
"-DCMAKE_BUILD_TYPE=Release",
50+
"-DCMAKE_C_COMPILER=$cmake_c_compiler",
51+
"-DCMAKE_CXX_COMPILER=$cmake_cxx_compiler",
52+
"-DGCC_LIB_PATH=$lib_gcc_path",
5553
"-DTARGET_OS=$targetOS",
56-
"-G", gen,
54+
gen,
5755
"-S", cmake_path,
58-
"-B", path_to_build,
59-
)
56+
"-B", path_to_build
6057
}
6158
}
6259
}
6360

64-
65-
task build_cmake(dependsOn: config_cmake) {
61+
tasks.register('build_cmake') {
62+
dependsOn config_cmake
63+
String jProc = Runtime.getRuntime().availableProcessors().toString()
6664
doLast {
6765
exec {
68-
commandLine("cmake", "--build", path_to_build, "--target", "multik_jni-$targetOS", "--", "-j", "12")
66+
commandLine("cmake", "--build", path_to_build, "--target", "multik_jni-$targetOS", "--", "-j", "$jProc")
6967
}
7068
copy {
71-
from("${project.buildDir}/cmake-build")
69+
from(path_to_build)
7270
include("*.dylib", "*.so", "*.dll")
73-
into("${project.buildDir}/libs")
71+
into(layout.buildDirectory.dir("libs").get().asFile)
7472
}
7573
}
7674
}

multik-core/build.gradle.kts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,29 @@ kotlin {
4444
iosSimulatorArm64()
4545
iosX64()
4646
wasmJs {
47-
browser()
48-
nodejs()
47+
browser {
48+
testTask {
49+
enabled = false
50+
}
51+
}
52+
nodejs {
53+
testTask {
54+
enabled = false
55+
}
56+
}
4957
d8()
5058
}
5159
js(IR) {
52-
browser()
53-
nodejs()
60+
browser {
61+
testTask {
62+
useMocha()
63+
}
64+
}
65+
nodejs {
66+
testTask {
67+
useMocha()
68+
}
69+
}
5470
}
5571

5672
sourceSets {

multik-default/build.gradle.kts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,29 @@ kotlin {
2424
}
2525
}
2626
wasmJs {
27-
browser()
28-
nodejs()
27+
browser {
28+
testTask {
29+
enabled = false
30+
}
31+
}
32+
nodejs {
33+
testTask {
34+
enabled = false
35+
}
36+
}
2937
d8()
3038
}
3139
js(IR) {
32-
browser()
33-
nodejs()
40+
browser {
41+
testTask {
42+
useMocha()
43+
}
44+
}
45+
nodejs {
46+
testTask {
47+
useMocha()
48+
}
49+
}
3450
}
3551

3652
val hostOs = System.getProperty("os.name")

multik-openblas/multik_jni/CMakeLists.txt

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,21 @@ cmake_minimum_required(VERSION 3.16)
22
project(multik_jni)
33

44
set(CMAKE_CXX_STANDARD 14)
5+
set(CMAKE_CXX_EXTENSIONS OFF)
6+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
57
set(PLATFORM ${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR})
68

79
if (NOT DEFINED TARGET_OS)
810
set(TARGET_OS ${PLATFORM})
911
endif ()
1012

1113
#### PARAMETERS FOR OPENBLAS ####
12-
set(OPENBLAS_VERSION 0.3.23)
14+
set(OPENBLAS_VERSION 0.3.26)
1315

1416
if (${TARGET_OS} STREQUAL "mingwX64" OR ${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
15-
set(URL_OPENBLAS "https://github.com/xianyi/OpenBLAS/releases/download/v${OPENBLAS_VERSION}/OpenBLAS-${OPENBLAS_VERSION}-x64.zip")
17+
set(URL_OPENBLAS "https://github.com/OpenMathLib/OpenBLAS/releases/download/v${OPENBLAS_VERSION}/OpenBLAS-${OPENBLAS_VERSION}-x64.zip")
1618
else ()
17-
# set(URL_OPENBLAS "https://github.com/xianyi/OpenBLAS/archive/refs/heads/develop.zip") # TODO(switch to stable version)
18-
set(URL_OPENBLAS "https://github.com/xianyi/OpenBLAS/archive/v${OPENBLAS_VERSION}.zip")
19+
set(URL_OPENBLAS "https://github.com/OpenMathLib/OpenBLAS/archive/v${OPENBLAS_VERSION}.zip")
1920
endif ()
2021

2122
set(CC ${CMAKE_C_COMPILER})
@@ -27,26 +28,26 @@ set(USE_OPENMP 0)
2728
set(NUM_THREADS 64)
2829
set(DYNAMIC_LIST )
2930

30-
if (${TARGET_OS} MATCHES "androidArm64")
31+
if(${TARGET_OS} STREQUAL "androidArm64")
3132
set(suffix androidArm64)
3233
set(CC aarch64-linux-android-gcc)
3334
set(FC aarch64-linux-android-gfortran)
3435
set(CROSS_SUFFIX aarch64-linux-android-)
3536
set(NO_AVX512 1)
36-
elseif (${TARGET_OS} MATCHES "linuxX64")
37+
set(DYNAMIC_LIST ARM8)
38+
elseif(${TARGET_OS} STREQUAL "linuxX64")
3739
set(suffix linuxX64)
3840
set(FC "gfortran -m64")
3941
set(FEXTRALIB -lgfortran)
4042
set(NO_AVX512 0)
4143
set(DYNAMIC_ARCH 1)
42-
elseif (${TARGET_OS} MATCHES "macosArm64" OR ${PLATFORM} MATCHES "Darwin-arm64")
44+
elseif (${TARGET_OS} STREQUAL "macosArm64" OR ${PLATFORM} MATCHES "Darwin-arm64")
4345
set(suffix macosArm64)
4446
set(FC "gfortran")
4547
set(FEXTRALIB "-lgfortran")
4648
set(NO_AVX512 1)
47-
# set(DYNAMIC_ARCH 1)
48-
set(DYNAMIC_LIST "ARMV8 CORTEXA55 CORTEXA72 CORTEXA78") # TODO(XCODE workaround)
49-
elseif (${TARGET_OS} MATCHES "macosX64" OR ${PLATFORM} MATCHES "Darwin-x86_64")
49+
set(DYNAMIC_ARCH 1)
50+
elseif(${TARGET_OS} STREQUAL "macosX64" OR ${PLATFORM} MATCHES "Darwin-x86_64")
5051
set(suffix macosX64)
5152
set(FC "gfortran")
5253
set(FEXTRALIB "-lgfortran")
@@ -59,7 +60,7 @@ elseif (${TARGET_OS} MATCHES "mingwX64")
5960
set(NO_AVX512 1)
6061
set(DYNAMIC_ARCH 1)
6162
else()
62-
message(SEND_ERROR "Platform ${PLATFORM} is not supported")
63+
message(WARNING "Platform ${PLATFORM} is not supported")
6364
return()
6465
endif ()
6566
########################
@@ -74,6 +75,7 @@ if (${TARGET_OS} STREQUAL "mingwX64")
7475
CONFIGURE_COMMAND ""
7576
BUILD_COMMAND ""
7677
INSTALL_COMMAND ""
78+
# DOWNLOAD_EXTRACT_TIMESTAMP TRUE
7779
)
7880
#### INCLUDE OPENBLAS ####
7981
ExternalProject_Get_property(openblas SOURCE_DIR)
@@ -101,6 +103,7 @@ else ()
101103
DYNAMIC_LIST=${DYNAMIC_LIST}
102104
NUM_THREADS=${NUM_THREADS}
103105
INSTALL_COMMAND ${MAKE_EXE} -C <SOURCE_DIR> install PREFIX=<INSTALL_DIR> CC=${CC}
106+
# DOWNLOAD_EXTRACT_TIMESTAMP TRUE
104107
)
105108
#### INCLUDE OPENBLAS ####
106109
ExternalProject_Get_property(openblas INSTALL_DIR)
@@ -129,8 +132,8 @@ set(SRC_FILES_FOR_STATIC
129132
########################
130133

131134
### FIND GFORTRAN AND QUADMATH LIBRARIES ###
132-
if (${GCC_LIB_PATH})
133-
message("Path to gcc libs does not defined")
135+
if (NOT DEFINED GCC_LIB_PATH)
136+
message(WARNING "Path to gcc libs is not defined")
134137
endif ()
135138
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
136139
set(LIB_GFORTRAN -static-libgfortran)
@@ -165,16 +168,20 @@ endif ()
165168
set(LIB_NAME multik_jni-${suffix})
166169

167170
add_library(${LIB_NAME} SHARED ${SRC_FILES_FOR_SHARED})
168-
target_compile_options(${LIB_NAME} PRIVATE -std=c++14
169-
-fPIC
170-
-O3
171-
-fno-exceptions
172-
-ffast-math)
171+
target_compile_features(${LIB_NAME} PRIVATE cxx_std_14)
172+
target_compile_options(${LIB_NAME} PRIVATE
173+
-fPIC
174+
-O3
175+
-fno-exceptions
176+
-ffast-math
177+
-flto
178+
-funroll-loops
179+
)
173180
target_include_directories(${LIB_NAME} PUBLIC ${JNI_INCLUDE_DIRS})
174181
target_link_libraries(${LIB_NAME} optimized
175182
${STATIC_OPENBLAS}
176183
${LIB_GFORTRAN}
177184
# ${LIB_QUADMATH}
178185
${LIB_GCC}
179-
)
186+
)
180187
add_dependencies(${LIB_NAME} openblas)

multik-openblas/multik_jni/src/main/cpp/jni_Linalg.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "jni_JniLinAlg.h"
66
#include "mk_linalg.h"
77
#include <ComplexDouble.h>
8+
#include <cstdint>
89

910
/*
1011
* Class: org_jetbrains_kotlinx_multik_openblas_linalg_JniLinAlg

multik-openblas/src/commonTest/kotlin/org/jetbrains/kotlinx/multik/openblas/linalg/NativeLinAlgTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ class NativeLinAlgTest {
138138
)
139139

140140
val actual = NativeLinAlg.dot(matrix1, matrix2)
141-
assertEquals(expected, actual)
141+
assertComplexFloatingNDArray(expected, actual, 1e-4f)
142142
}
143143

144144
@Test

0 commit comments

Comments
 (0)