diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index 1e219ac..b92086e 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -4,9 +4,11 @@ on: push: branches: - master + - develop pull_request: branches: - master + - develop jobs: build-randomx: runs-on: ${{ matrix.os }} @@ -125,57 +127,57 @@ jobs: runs-on: ubuntu-latest needs: build-java steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Install gh CLI - run: sudo apt-get install -y gh - - - name: Extract Version from pom.xml - id: extract_version - run: | - VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) - echo "VERSION=$VERSION" >> $GITHUB_ENV - echo "Extracted version: $VERSION" - - - name: Download JAR Artifact - uses: actions/download-artifact@v4 - with: - name: xdagj-native-randomx-jar - path: target/ - - - name: Find Main JAR File - id: find_jar - run: | - JAR_FILE=$(find target/ -type f -name "xdagj-native-randomx-*.jar" | head -n 1) - if [ -z "$JAR_FILE" ]; then - echo "Error: No main JAR file found!" - exit 1 - fi - echo "Found JAR file: $JAR_FILE" - echo "jar_file=$JAR_FILE" >> $GITHUB_ENV - - - name: Generate Release Notes - run: | - echo "### Changelog" > RELEASE_NOTES.md - echo "" >> RELEASE_NOTES.md - echo "$(git log --pretty=format:"* %s (%h)" --no-merges $(git rev-list --tags --max-count=1)..HEAD)" >> RELEASE_NOTES.md - echo "" >> RELEASE_NOTES.md - echo "### Additional Notes" >> RELEASE_NOTES.md - echo "- Build improvements." >> RELEASE_NOTES.md - echo "- Known issues: None." >> RELEASE_NOTES.md - - - name: Create Release using gh CLI - run: | - gh release create "v${{ env.VERSION }}" --title "xdagj-native-randomx v${{ env.VERSION }}" --notes-file RELEASE_NOTES.md - env: - GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} - - - name: Rename output file - run: mv "target/xdagj-native-randomx-${{ env.VERSION }}.jar" "target/xdagj-native-randomx.jar" - - - name: Upload JAR using gh CLI - run: | - gh release upload "v${{ env.VERSION }}" target/xdagj-native-randomx.jar --clobber - env: - GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install gh CLI + run: sudo apt-get install -y gh + + - name: Extract Version from pom.xml + id: extract_version + run: | + VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) + echo "VERSION=$VERSION" >> $GITHUB_ENV + echo "Extracted version: $VERSION" + + - name: Download JAR Artifact + uses: actions/download-artifact@v4 + with: + name: xdagj-native-randomx-jar + path: target/ + + - name: Find Main JAR File + id: find_jar + run: | + JAR_FILE=$(find target/ -type f -name "xdagj-native-randomx-*.jar" | head -n 1) + if [ -z "$JAR_FILE" ]; then + echo "Error: No main JAR file found!" + exit 1 + fi + echo "Found JAR file: $JAR_FILE" + echo "jar_file=$JAR_FILE" >> $GITHUB_ENV + + - name: Generate Release Notes + run: | + echo "### Changelog" > RELEASE_NOTES.md + echo "" >> RELEASE_NOTES.md + echo "$(git log --pretty=format:"* %s (%h)" --no-merges $(git rev-list --tags --max-count=1)..HEAD)" >> RELEASE_NOTES.md + echo "" >> RELEASE_NOTES.md + echo "### Additional Notes" >> RELEASE_NOTES.md + echo "- Build improvements." >> RELEASE_NOTES.md + echo "- Known issues: None." >> RELEASE_NOTES.md + + - name: Create Release using gh CLI + run: | + gh release create "v${{ env.VERSION }}" --title "xdagj-native-randomx v${{ env.VERSION }}" --notes-file RELEASE_NOTES.md + env: + GH_TOKEN: ${{ github.token }} # Use the token automatically generated by GitHub + + - name: Rename output file + run: mv "target/xdagj-native-randomx-${{ env.VERSION }}.jar" "target/xdagj-native-randomx.jar" + + - name: Upload JAR using gh CLI + run: | + gh release upload "v${{ env.VERSION }}" target/xdagj-native-randomx.jar --clobber + env: + GH_TOKEN: ${{ github.token }} # Use the token automatically generated by GitHub diff --git a/README.md b/README.md index f39c51d..e773903 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Compile and copy the appropriate shared library for your platform: ```bash cd randomx mkdir build && cd build -cmake .. -DCMAKE_BUILD_TYPE=Release -DARCH=native -DBUILD_SHARED_LIBS=ON +cmake .. -DCMAKE_BUILD_TYPE=Release -DARCH=native -DBUILD_SHARED_LIBS=ON -DCMAKE_C_FLAGS="-fPIC" make -j4 cp -i librandomx.so ../../src/main/resources/native/librandomx_linux_x86_64.so ``` diff --git a/pom.xml b/pom.xml index 3896e59..c422e17 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ io.xdag xdagj-native-randomx - 0.2.0 + 0.2.1 xdagj-native-randomx A Java RandomX Library For XDAGJ diff --git a/src/main/java/io/xdag/crypto/randomx/RandomXJNALoader.java b/src/main/java/io/xdag/crypto/randomx/RandomXJNALoader.java index 259a5d4..f0d527f 100644 --- a/src/main/java/io/xdag/crypto/randomx/RandomXJNALoader.java +++ b/src/main/java/io/xdag/crypto/randomx/RandomXJNALoader.java @@ -77,7 +77,13 @@ public static RandomXJNA getInstance() { synchronized (LOCK) { result = instance; if (result == null) { - instance = result = Native.load("randomx", RandomXJNA.class); + String osName = System.getProperty("os.name").toLowerCase(); + if (osName.contains("win")) { + String libFilePath = "native/librandomx_windows_x86_64.dll"; + instance = result = Native.load(libFilePath, RandomXJNA.class); + } else { + instance = result = Native.load("randomx", RandomXJNA.class); + } } } } @@ -119,7 +125,9 @@ public static void loadLibrary(String libraryName) { */ private static String getLibraryFileName(String libraryName, String os, String arch) { if (os.contains("win")) { - return String.format("native/%s_windows_%s.dll", libraryName, arch); + if (StringUtils.containsAny(arch, "amd64", "x86_64")) { + return String.format("native/%s_windows_x86_64.dll", libraryName); + } } else if (os.contains("mac")) { return String.format("native/%s_macos_%s.dylib", libraryName, arch); } else if (StringUtils.contains(os, "linux")) { diff --git a/src/test/java/io/xdag/crypto/randomx/RandomXBenchmark.java b/src/test/java/io/xdag/crypto/randomx/RandomXBenchmark.java index e08ca49..b889fe0 100644 --- a/src/test/java/io/xdag/crypto/randomx/RandomXBenchmark.java +++ b/src/test/java/io/xdag/crypto/randomx/RandomXBenchmark.java @@ -181,4 +181,4 @@ public static void main(String[] args) throws Exception { new Runner(opt).run(); } -} \ No newline at end of file +} diff --git a/src/test/java/io/xdag/crypto/randomx/RandomXCacheTest.java b/src/test/java/io/xdag/crypto/randomx/RandomXCacheTest.java index c511b85..d810875 100644 --- a/src/test/java/io/xdag/crypto/randomx/RandomXCacheTest.java +++ b/src/test/java/io/xdag/crypto/randomx/RandomXCacheTest.java @@ -62,4 +62,4 @@ public void testInit() { } // Cache is automatically released here. } -} +} \ No newline at end of file diff --git a/src/test/java/io/xdag/crypto/randomx/RandomXDatasetTest.java b/src/test/java/io/xdag/crypto/randomx/RandomXDatasetTest.java index 4e5e89b..69eb8fc 100644 --- a/src/test/java/io/xdag/crypto/randomx/RandomXDatasetTest.java +++ b/src/test/java/io/xdag/crypto/randomx/RandomXDatasetTest.java @@ -72,4 +72,4 @@ void testInitialization() { } } -} \ No newline at end of file +} diff --git a/src/test/java/io/xdag/crypto/randomx/RandomXJNALoaderTest.java b/src/test/java/io/xdag/crypto/randomx/RandomXJNALoaderTest.java index aedd768..509a52d 100644 --- a/src/test/java/io/xdag/crypto/randomx/RandomXJNALoaderTest.java +++ b/src/test/java/io/xdag/crypto/randomx/RandomXJNALoaderTest.java @@ -40,4 +40,5 @@ public class RandomXJNALoaderTest { public void testLibraryLoading() { assertNotNull(RandomXJNALoader.getInstance(), "RandomXJNA instance should not be null."); } + } \ No newline at end of file diff --git a/src/test/java/io/xdag/crypto/randomx/RandomXTemplateTest.java b/src/test/java/io/xdag/crypto/randomx/RandomXTemplateTest.java index e1b7261..01d825c 100644 --- a/src/test/java/io/xdag/crypto/randomx/RandomXTemplateTest.java +++ b/src/test/java/io/xdag/crypto/randomx/RandomXTemplateTest.java @@ -117,4 +117,4 @@ public void testChangeKey() { assertEquals("3910d7b054df9ba920e2f7e103aa2c1fc4597b13d1793f1ab08c1c9c922709c0", hex.formatHex(hash)); } -} \ No newline at end of file +} diff --git a/src/test/java/io/xdag/crypto/randomx/RandomXTests.java b/src/test/java/io/xdag/crypto/randomx/RandomXTests.java index 9527051..921d8a8 100644 --- a/src/test/java/io/xdag/crypto/randomx/RandomXTests.java +++ b/src/test/java/io/xdag/crypto/randomx/RandomXTests.java @@ -140,4 +140,4 @@ void testBatchHash() { assertEquals("c36d4ed4191e617309867ed66a443be4075014e2b061bcdaf9ce7b721d2b77a8", hex.formatHex(hash3)); } -} +} \ No newline at end of file diff --git a/src/test/java/io/xdag/crypto/randomx/RandomXVMTest.java b/src/test/java/io/xdag/crypto/randomx/RandomXVMTest.java index 30971f1..f15ed6e 100644 --- a/src/test/java/io/xdag/crypto/randomx/RandomXVMTest.java +++ b/src/test/java/io/xdag/crypto/randomx/RandomXVMTest.java @@ -60,4 +60,5 @@ public void testVMHashCalculation() { assertEquals(32, output.length, "Output size should be 32 bytes."); } } + } \ No newline at end of file