From c65f9f75db4e224c0b6e8db5e87eddd3b408d102 Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Fri, 13 Oct 2023 00:27:40 +0200 Subject: [PATCH 01/22] inspect conan_toolchain.cmake file content --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b5064a1..8edf150 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -59,6 +59,7 @@ jobs: conan install . --output-folder=build --build=missing cd build cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release + cat conan_toolchain.cmake cmake --build . - name: artifacts From 103d0ffe3bbed544bf9b58427cb3c6ea10a39fbd Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sat, 14 Oct 2023 21:00:15 +0200 Subject: [PATCH 02/22] improving cmakelists for cross-compiling --- .github/workflows/build.yml | 39 +++++++++++---- CMakeLists.txt | 94 ++++++++++++++++++++++++++++++++++--- 2 files changed, 117 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8edf150..6524011 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,10 +15,20 @@ jobs: include: - os: ubuntu-latest TARGET: linux - PLATFORM: x64 + PLATFORM: x86_64 + CMAKE_ARGS: -DCMAKE_SYSTEM_PROCESSOR=x86_64 + - os: ubuntu-latest + TARGET: linux + PLATFORM: arm64 + CMAKE_ARGS: -DCMAKE_SYSTEM_PROCESSOR=aarch64 - os: macos-latest TARGET: macos - PLATFORM: x64 + PLATFORM: x86_64 + CMAKE_ARGS: -DCMAKE_OSX_ARCHITECTURES=x86_64 + - os: macos-latest + TARGET: macos + PLATFORM: arm64 + CMAKE_ARGS: -DCMAKE_OSX_ARCHITECTURES=arm64 steps: - name: 'Check out repository' uses: actions/checkout@v3 @@ -58,14 +68,13 @@ jobs: mkdir -p build conan install . --output-folder=build --build=missing cd build - cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release - cat conan_toolchain.cmake + cmake .. ${{ matrix.CMAKE_ARGS }} -DCMAKE_BUILD_TYPE=Release cmake --build . - name: artifacts uses: actions/upload-artifact@v3 with: - name: libjudy.${{ matrix.TARGET }} + name: libjudy-${{ matrix.PLATFORM }}.${{ matrix.TARGET }} path: build/libjudy* retention-days: 1 @@ -155,18 +164,30 @@ jobs: make java-sources mkdir src/main/resources - - name: libjudy.so + - name: libjudy-x86_64.linux uses: actions/download-artifact@v3 with: - name: libjudy.linux + name: libjudy-x86_64.linux path: build/src/main/resources/lib - - name: libjudy.dylib + - name: libjudy-x86_64.macos uses: actions/download-artifact@v3 with: - name: libjudy.macos + name: libjudy-x86_64.macos path: build/src/main/resources/lib + - name: libjudy-arm64.linux + uses: actions/download-artifact@v3 + with: + name: libjudy-arm64.linux + path: build/src/main/resources/lib + + - name: libjudy-arm64.macos + uses: actions/download-artifact@v3 + with: + name: libjudy-arm64.macos + path: build/src/main/resources/lib + - name: Display structure of downloaded files run: ls -R working-directory: build/src/main/resources diff --git a/CMakeLists.txt b/CMakeLists.txt index 432a7ec..e70f00d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,8 @@ cmake_minimum_required(VERSION 3.24) -project(judy LANGUAGES C CXX VERSION 0.0.1 DESCRIPTION "Multithreaded CPP UDP server consumable through the C ABI consumption") - -set(CMAKE_OSX_ARCHITECTURES "x86_64") +project(judy LANGUAGES C CXX VERSION 0.0.1 DESCRIPTION "Multithreaded C++ UDP server consumable through the C ABI consumption") execute_process(COMMAND date +'%Y.%m.%d' OUTPUT_VARIABLE JAR_VERSION) -execute_process(COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE ARCHITECTURE) if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(STDLIB_INCLUDE /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include) @@ -13,6 +10,89 @@ else() set(STDLIB_INCLUDE /usr/local/include) endif() +if(CMAKE_SYSTEM_NAME MATCHES "Linux") + set(LINUX TRUE) +elseif(WIN32) +elseif(APPLE) +else() + message(FATAL_ERROR "Platform is not supported") +endif() + +if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR CMAKE_SYSTEM_PROCESSOR MATCHES "aarch") + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ARCH "aarch64") + else() + set(ARCH "arm") + endif() +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips.*") + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ARCH "mips64el") + else() + set(ARCH "mipsel") + endif() +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc.*") + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ARCH "ppc64le") + else() + message(FATAL_ERROR "Architecture is not supported") + endif() +else() + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ARCH "x86_64") + else() + set(ARCH "x86") + endif() +endif() + +if(CMAKE_OSX_ARCHITECTURES) + if(CMAKE_OSX_ARCHITECTURES MATCHES "arm64") + set(ARCH "aarch64") + elseif(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64") + set(ARCH "x86_64") + elseif(CMAKE_OSX_ARCHITECTURES MATCHES "i386") + set(ARCH "x86") + else() + message(FATAL_ERROR "Architecture ${CMAKE_OSX_ARCHITECTURES} is not " + "supported. Only one architecture (arm64, x86_64 " + "or i386) could be specified at build time.") + endif() +endif() +set(CMAKE_MACOSX_RPATH TRUE) + + +macro(set_cpp_flag FLAG) + if(${ARGC} GREATER 1) + set(CMAKE_CXX_FLAGS_${ARGV1} "${CMAKE_CXX_FLAGS_${ARGV1}} ${FLAG}") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}") + endif() +endmacro() +macro(set_linker_flag FLAG) + if(${ARGC} GREATER 1) + set(CMAKE_EXE_LINKER_FLAGS_${ARGV1} "${CMAKE_EXE_LINKER_FLAGS_${ARGV1}} ${FLAG}") + set(CMAKE_SHARED_LINKER_FLAGS_${ARGV1} "${CMAKE_EXE_LINKER_FLAGS_${ARGV1}} ${FLAG}") + else() + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG}") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG}") + endif() +endmacro() + +if(ARCH STREQUAL "x86") + set_cpp_flag("-m32") + set_cpp_flag("-msse2") + set_cpp_flag("-mfpmath=sse") + set_cpp_flag("-march=pentium4") + set_cpp_flag("-mtune=generic") +endif() +if(ARCH STREQUAL "x86_64") + set_cpp_flag("-m64") + set_cpp_flag("-fPIC") + set_cpp_flag("-march=x86-64") + set_cpp_flag("-mtune=generic") +endif() + + + add_definitions("-std=c++14") add_compile_options(-pthread) @@ -26,11 +106,11 @@ message(STATUS "Found boost includes at " ${Boost_INCLUDE_DIR}) AUX_SOURCE_DIRECTORY(src SOURCES) add_executable(${PROJECT_NAME}-main ${SOURCES} ${HEADERS}) -add_library(${PROJECT_NAME}-${ARCHITECTURE} SHARED ${SOURCES} ${HEADERS}) +add_library(${PROJECT_NAME}-${ARCH} SHARED ${SOURCES} ${HEADERS}) target_include_directories(${PROJECT_NAME}-main PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) -target_include_directories(${PROJECT_NAME}-${ARCHITECTURE} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) +target_include_directories(${PROJECT_NAME}-${ARCH} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) target_link_libraries(${PROJECT_NAME}-main ${Boost_LIBRARIES} ) -target_link_libraries(${PROJECT_NAME}-${ARCHITECTURE} PRIVATE Threads::Threads) +target_link_libraries(${PROJECT_NAME}-${ARCH} PRIVATE Threads::Threads) add_custom_target( java-sources From 55b1adc59b1422a40542722576e84269ff20b08f Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sat, 14 Oct 2023 21:19:02 +0200 Subject: [PATCH 03/22] prepending includes and libs --- .github/workflows/build.yml | 2 +- CMakeLists.txt | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6524011..8cc3170 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -68,7 +68,7 @@ jobs: mkdir -p build conan install . --output-folder=build --build=missing cd build - cmake .. ${{ matrix.CMAKE_ARGS }} -DCMAKE_BUILD_TYPE=Release + cmake .. ${{ matrix.CMAKE_ARGS }} -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release cmake --build . - name: artifacts diff --git a/CMakeLists.txt b/CMakeLists.txt index e70f00d..fda6c62 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,6 +77,17 @@ macro(set_linker_flag FLAG) endif() endmacro() +MACRO(SUBDIRLIST result curdir) + FILE(GLOB children ${curdir}/*) + SET(dirlist "") + FOREACH(child ${children}) + IF(IS_DIRECTORY ${child}) + LIST(APPEND dirlist ${child}) + ENDIF() + ENDFOREACH() + SET(${result} ${dirlist}) +ENDMACRO() + if(ARCH STREQUAL "x86") set_cpp_flag("-m32") set_cpp_flag("-msse2") @@ -92,6 +103,12 @@ if(ARCH STREQUAL "x86_64") endif() +SUBDIRLIST(SUBDIRS "$ENV{HOME}/.conan2/p/b/") +FOREACH(subdir ${SUBDIRS}) + list(PREPEND CMAKE_LIBRARY_PATH "${subdir}/p/lib") + list(PREPEND CMAKE_INCLUDE_PATH "${subdir}/p/include") +ENDFOREACH() + add_definitions("-std=c++14") add_compile_options(-pthread) From aa2c055f8a101edb09a92c840d2746ebee037ab9 Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sat, 14 Oct 2023 21:40:43 +0200 Subject: [PATCH 04/22] try to build shared libs in one take --- .github/workflows/build.yml | 303 ++++++++++++++++++------------------ 1 file changed, 154 insertions(+), 149 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8cc3170..080f426 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,20 +15,12 @@ jobs: include: - os: ubuntu-latest TARGET: linux - PLATFORM: x86_64 - CMAKE_ARGS: -DCMAKE_SYSTEM_PROCESSOR=x86_64 - - os: ubuntu-latest - TARGET: linux - PLATFORM: arm64 - CMAKE_ARGS: -DCMAKE_SYSTEM_PROCESSOR=aarch64 + CMAKE_AMD_FLAGS: -DCMAKE_SYSTEM_PROCESSOR=x86_64 + CMAKE_AARCH_FLAGS: -DCMAKE_SYSTEM_PROCESSOR=aarch64 - os: macos-latest TARGET: macos - PLATFORM: x86_64 - CMAKE_ARGS: -DCMAKE_OSX_ARCHITECTURES=x86_64 - - os: macos-latest - TARGET: macos - PLATFORM: arm64 - CMAKE_ARGS: -DCMAKE_OSX_ARCHITECTURES=arm64 + CMAKE_AMD_FLAGS: -DCMAKE_OSX_ARCHITECTURES=x86_64 + CMAKE_AARCH_FLAGS: -DCMAKE_OSX_ARCHITECTURES=arm64 steps: - name: 'Check out repository' uses: actions/checkout@v3 @@ -65,151 +57,164 @@ jobs: - name: conan-install shell: bash run: | + mkdir -p libs mkdir -p build conan install . --output-folder=build --build=missing cd build - cmake .. ${{ matrix.CMAKE_ARGS }} -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release - cmake --build . - - - name: artifacts - uses: actions/upload-artifact@v3 - with: - name: libjudy-${{ matrix.PLATFORM }}.${{ matrix.TARGET }} - path: build/libjudy* - retention-days: 1 - - package: - needs: - - build - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ ubuntu-latest ] - include: - - os: ubuntu-latest - TARGET: linux - PLATFORM: x64 - steps: - - name: 'Check out repository' - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - - name: 'Download jextract' - id: jextract - uses: oracle-actions/setup-java@v1 - with: - install: false - uri: https://download.java.net/java/early_access/jextract/1/openjdk-21-jextract+1-2_${{ matrix.TARGET }}-x64_bin.tar.gz - - - name: 'Extract jextract' - shell: sh - run: | - mkdir -p /tmp/jextract - tar --strip-components=1 -xvf ${{ steps.jextract.outputs.archive }} -C /tmp/jextract - export PATH=${PATH}:/tmp/jextract/bin - - - name: 'Install OracleJDK GA' - id: jdk_21 - uses: oracle-actions/setup-java@v1 - with: - website: oracle.com - release: 21 - - - name: prepare-project - shell: bash - run: | - export PATH=${PATH}:/tmp/jextract/bin - mkdir -p build - jextract -I /usr/local/include @jextract_dump.txt include/api.h - - - name: version - id: version - shell: bash - run: echo "version_var=$(date +'%Y.%m.%d')" >> $GITHUB_ENV - - - name: Set up Homebrew - id: set-up-homebrew - uses: Homebrew/actions/setup-homebrew@master - with: - test-bot: false - - - name: install prerequisites - shell: bash - run: | - brew install gcc - brew install conan - - - name: conan-profile - shell: bash - run: | - conan profile detect - conan version - cp .github/conan2/${{ matrix.TARGET }}_default ~/.conan2/profiles/default - conan profile show - - - name: conan-install + + - name: compile x86_64 shell: bash run: | - mkdir -p build - conan install . --output-folder=build --build=missing - cd build - cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release + cmake .. ${{ matrix.CMAKE_AMD_FLAGS }} -DCMAKE_BUILD_TYPE=Release + cmake --build . + cp libjudy* ../libs/ - - name: java sources + - name: compile aarch64 shell: bash run: | - export PATH=${PATH}:/tmp/jextract/bin - cd build - make java-sources - mkdir src/main/resources - - - name: libjudy-x86_64.linux - uses: actions/download-artifact@v3 - with: - name: libjudy-x86_64.linux - path: build/src/main/resources/lib - - - name: libjudy-x86_64.macos - uses: actions/download-artifact@v3 - with: - name: libjudy-x86_64.macos - path: build/src/main/resources/lib - - - name: libjudy-arm64.linux - uses: actions/download-artifact@v3 - with: - name: libjudy-arm64.linux - path: build/src/main/resources/lib + cmake .. ${{ matrix.CMAKE_AARCH_FLAGS }} -DCMAKE_BUILD_TYPE=Release + cmake --build . + cp libjudy* ../libs/ - - name: libjudy-arm64.macos - uses: actions/download-artifact@v3 + - name: artifacts + uses: actions/upload-artifact@v3 with: - name: libjudy-arm64.macos - path: build/src/main/resources/lib - - - name: Display structure of downloaded files - run: ls -R - working-directory: build/src/main/resources - - - name: jar - shell: bash - run: | - cd build - make jar - - - name: jar tf - run: jar tf ../target/judy*.jar - working-directory: build/ + name: libjudy-${{ matrix.TARGET }} + path: libs/libjudy* + retention-days: 1 - - name: 'make release' - if: github.event_name == 'push' - uses: marvinpinto/action-automatic-releases@latest - with: - repo_token: ${{ secrets.GH_RELEASE_TOKEN }} - automatic_release_tag: ${{ env.version_var }} - prerelease: false - title: Judy C++ UDP server ${{ env.version_var }} for Java - files: | - LICENSE - target/*.jar + # package: + # needs: + # - build + # runs-on: ${{ matrix.os }} + # strategy: + # matrix: + # os: [ ubuntu-latest ] + # include: + # - os: ubuntu-latest + # TARGET: linux + # PLATFORM: x64 + # steps: + # - name: 'Check out repository' + # uses: actions/checkout@v3 + # with: + # fetch-depth: 1 + + # - name: 'Download jextract' + # id: jextract + # uses: oracle-actions/setup-java@v1 + # with: + # install: false + # uri: https://download.java.net/java/early_access/jextract/1/openjdk-21-jextract+1-2_${{ matrix.TARGET }}-x64_bin.tar.gz + + # - name: 'Extract jextract' + # shell: sh + # run: | + # mkdir -p /tmp/jextract + # tar --strip-components=1 -xvf ${{ steps.jextract.outputs.archive }} -C /tmp/jextract + # export PATH=${PATH}:/tmp/jextract/bin + + # - name: 'Install OracleJDK GA' + # id: jdk_21 + # uses: oracle-actions/setup-java@v1 + # with: + # website: oracle.com + # release: 21 + + # - name: prepare-project + # shell: bash + # run: | + # export PATH=${PATH}:/tmp/jextract/bin + # mkdir -p build + # jextract -I /usr/local/include @jextract_dump.txt include/api.h + + # - name: version + # id: version + # shell: bash + # run: echo "version_var=$(date +'%Y.%m.%d')" >> $GITHUB_ENV + + # - name: Set up Homebrew + # id: set-up-homebrew + # uses: Homebrew/actions/setup-homebrew@master + # with: + # test-bot: false + + # - name: install prerequisites + # shell: bash + # run: | + # brew install gcc + # brew install conan + + # - name: conan-profile + # shell: bash + # run: | + # conan profile detect + # conan version + # cp .github/conan2/${{ matrix.TARGET }}_default ~/.conan2/profiles/default + # conan profile show + + # - name: conan-install + # shell: bash + # run: | + # mkdir -p build + # conan install . --output-folder=build --build=missing + # cd build + # cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release + + # - name: java sources + # shell: bash + # run: | + # export PATH=${PATH}:/tmp/jextract/bin + # cd build + # make java-sources + # mkdir src/main/resources + + # - name: libjudy-x86_64.linux + # uses: actions/download-artifact@v3 + # with: + # name: libjudy-x86_64.linux + # path: build/src/main/resources/lib + + # - name: libjudy-x86_64.macos + # uses: actions/download-artifact@v3 + # with: + # name: libjudy-x86_64.macos + # path: build/src/main/resources/lib + + # - name: libjudy-arm64.linux + # uses: actions/download-artifact@v3 + # with: + # name: libjudy-arm64.linux + # path: build/src/main/resources/lib + + # - name: libjudy-arm64.macos + # uses: actions/download-artifact@v3 + # with: + # name: libjudy-arm64.macos + # path: build/src/main/resources/lib + + # - name: Display structure of downloaded files + # run: ls -R + # working-directory: build/src/main/resources + + # - name: jar + # shell: bash + # run: | + # cd build + # make jar + + # - name: jar tf + # run: jar tf ../target/judy*.jar + # working-directory: build/ + + # - name: 'make release' + # if: github.event_name == 'push' + # uses: marvinpinto/action-automatic-releases@latest + # with: + # repo_token: ${{ secrets.GH_RELEASE_TOKEN }} + # automatic_release_tag: ${{ env.version_var }} + # prerelease: false + # title: Judy C++ UDP server ${{ env.version_var }} for Java + # files: | + # LICENSE + # target/*.jar From dc9f4796ad1b7e71c00f61de04dfd2216b3afa6c Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sat, 14 Oct 2023 21:44:16 +0200 Subject: [PATCH 05/22] fixing workdir for compiling --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 080f426..d9fee35 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -60,11 +60,11 @@ jobs: mkdir -p libs mkdir -p build conan install . --output-folder=build --build=missing - cd build - name: compile x86_64 shell: bash run: | + cd build cmake .. ${{ matrix.CMAKE_AMD_FLAGS }} -DCMAKE_BUILD_TYPE=Release cmake --build . cp libjudy* ../libs/ @@ -72,6 +72,7 @@ jobs: - name: compile aarch64 shell: bash run: | + cd build cmake .. ${{ matrix.CMAKE_AARCH_FLAGS }} -DCMAKE_BUILD_TYPE=Release cmake --build . cp libjudy* ../libs/ From b5fb666b45ed34533e1d54f7b9b6625e82da5949 Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sat, 14 Oct 2023 21:47:55 +0200 Subject: [PATCH 06/22] restore back toolchain file --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d9fee35..f5ce71d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -65,7 +65,7 @@ jobs: shell: bash run: | cd build - cmake .. ${{ matrix.CMAKE_AMD_FLAGS }} -DCMAKE_BUILD_TYPE=Release + cmake .. ${{ matrix.CMAKE_AMD_FLAGS }} -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release cmake --build . cp libjudy* ../libs/ @@ -73,7 +73,7 @@ jobs: shell: bash run: | cd build - cmake .. ${{ matrix.CMAKE_AARCH_FLAGS }} -DCMAKE_BUILD_TYPE=Release + cmake .. ${{ matrix.CMAKE_AARCH_FLAGS }} -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release cmake --build . cp libjudy* ../libs/ From ca849b21c1f6eb48c8e7120b4a811aba8b26852b Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sat, 14 Oct 2023 21:50:39 +0200 Subject: [PATCH 07/22] adding file check --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f5ce71d..817f562 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -67,6 +67,7 @@ jobs: cd build cmake .. ${{ matrix.CMAKE_AMD_FLAGS }} -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release cmake --build . + file lib* cp libjudy* ../libs/ - name: compile aarch64 @@ -75,6 +76,7 @@ jobs: cd build cmake .. ${{ matrix.CMAKE_AARCH_FLAGS }} -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release cmake --build . + file lib* cp libjudy* ../libs/ - name: artifacts From 0ba5444b4a2678114aa4b6facfb6506b2ae9329f Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sat, 14 Oct 2023 22:12:16 +0200 Subject: [PATCH 08/22] trying to introduce per-arch files --- .github/workflows/build.yml | 10 ++- CMakeLists.txt | 50 --------------- toolchains/linux-aarch64.cmake | 89 ++++++++++++++++++++++++++ toolchains/linux-x86_64.cmake | 91 +++++++++++++++++++++++++++ toolchains/mac-aarch64.cmake | 110 ++++++++++++++++++++++++++++++++ toolchains/mac-x86_64.cmake | 111 +++++++++++++++++++++++++++++++++ 6 files changed, 405 insertions(+), 56 deletions(-) create mode 100644 toolchains/linux-aarch64.cmake create mode 100644 toolchains/linux-x86_64.cmake create mode 100644 toolchains/mac-aarch64.cmake create mode 100644 toolchains/mac-x86_64.cmake diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 817f562..2ec073a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,12 +15,8 @@ jobs: include: - os: ubuntu-latest TARGET: linux - CMAKE_AMD_FLAGS: -DCMAKE_SYSTEM_PROCESSOR=x86_64 - CMAKE_AARCH_FLAGS: -DCMAKE_SYSTEM_PROCESSOR=aarch64 - os: macos-latest TARGET: macos - CMAKE_AMD_FLAGS: -DCMAKE_OSX_ARCHITECTURES=x86_64 - CMAKE_AARCH_FLAGS: -DCMAKE_OSX_ARCHITECTURES=arm64 steps: - name: 'Check out repository' uses: actions/checkout@v3 @@ -65,7 +61,8 @@ jobs: shell: bash run: | cd build - cmake .. ${{ matrix.CMAKE_AMD_FLAGS }} -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release + cp ../toolchains/${{matrix.TARGET}}-x86_64.cmake conan_toolchain.cmake + cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release cmake --build . file lib* cp libjudy* ../libs/ @@ -74,7 +71,8 @@ jobs: shell: bash run: | cd build - cmake .. ${{ matrix.CMAKE_AARCH_FLAGS }} -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release + cp ../toolchains/${{matrix.TARGET}}-aarch64.cmake conan_toolchain.cmake + cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release cmake --build . file lib* cp libjudy* ../libs/ diff --git a/CMakeLists.txt b/CMakeLists.txt index fda6c62..b87f812 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,56 +60,6 @@ endif() set(CMAKE_MACOSX_RPATH TRUE) -macro(set_cpp_flag FLAG) - if(${ARGC} GREATER 1) - set(CMAKE_CXX_FLAGS_${ARGV1} "${CMAKE_CXX_FLAGS_${ARGV1}} ${FLAG}") - else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}") - endif() -endmacro() -macro(set_linker_flag FLAG) - if(${ARGC} GREATER 1) - set(CMAKE_EXE_LINKER_FLAGS_${ARGV1} "${CMAKE_EXE_LINKER_FLAGS_${ARGV1}} ${FLAG}") - set(CMAKE_SHARED_LINKER_FLAGS_${ARGV1} "${CMAKE_EXE_LINKER_FLAGS_${ARGV1}} ${FLAG}") - else() - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG}") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG}") - endif() -endmacro() - -MACRO(SUBDIRLIST result curdir) - FILE(GLOB children ${curdir}/*) - SET(dirlist "") - FOREACH(child ${children}) - IF(IS_DIRECTORY ${child}) - LIST(APPEND dirlist ${child}) - ENDIF() - ENDFOREACH() - SET(${result} ${dirlist}) -ENDMACRO() - -if(ARCH STREQUAL "x86") - set_cpp_flag("-m32") - set_cpp_flag("-msse2") - set_cpp_flag("-mfpmath=sse") - set_cpp_flag("-march=pentium4") - set_cpp_flag("-mtune=generic") -endif() -if(ARCH STREQUAL "x86_64") - set_cpp_flag("-m64") - set_cpp_flag("-fPIC") - set_cpp_flag("-march=x86-64") - set_cpp_flag("-mtune=generic") -endif() - - -SUBDIRLIST(SUBDIRS "$ENV{HOME}/.conan2/p/b/") -FOREACH(subdir ${SUBDIRS}) - list(PREPEND CMAKE_LIBRARY_PATH "${subdir}/p/lib") - list(PREPEND CMAKE_INCLUDE_PATH "${subdir}/p/include") -ENDFOREACH() - - add_definitions("-std=c++14") add_compile_options(-pthread) diff --git a/toolchains/linux-aarch64.cmake b/toolchains/linux-aarch64.cmake new file mode 100644 index 0000000..ac2f95f --- /dev/null +++ b/toolchains/linux-aarch64.cmake @@ -0,0 +1,89 @@ +# Avoid including toolchain file several times (bad if appending to variables like +# CMAKE_CXX_FLAGS. See https://github.com/android/ndk/issues/323 +include_guard() + +MACRO(SUBDIRLIST result curdir) + FILE(GLOB children ${curdir}/*) + SET(dirlist "") + FOREACH(child ${children}) + IF(IS_DIRECTORY ${child}) + LIST(APPEND dirlist ${child}) + ENDIF() + ENDFOREACH() + SET(${result} ${dirlist}) +ENDMACRO() + +message(STATUS "Using Conan toolchain: ${CMAKE_CURRENT_LIST_FILE}") + +if(${CMAKE_VERSION} VERSION_LESS "3.15") + message(FATAL_ERROR "The 'CMakeToolchain' generator only works with CMake >= 3.15") +endif() + + + + + + + + + + +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR aarch64) + + + +message(STATUS "Conan toolchain: C++ Standard 17 with extensions ON") +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_EXTENSIONS ON) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# Extra c, cxx, linkflags and defines + + +if(DEFINED CONAN_CXX_FLAGS) + string(APPEND CMAKE_CXX_FLAGS_INIT " ${CONAN_CXX_FLAGS}") +endif() +if(DEFINED CONAN_C_FLAGS) + string(APPEND CMAKE_C_FLAGS_INIT " ${CONAN_C_FLAGS}") +endif() +if(DEFINED CONAN_SHARED_LINKER_FLAGS) + string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${CONAN_SHARED_LINKER_FLAGS}") +endif() +if(DEFINED CONAN_EXE_LINKER_FLAGS) + string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${CONAN_EXE_LINKER_FLAGS}") +endif() + +get_property( _CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE ) +if(_CMAKE_IN_TRY_COMPILE) + message(STATUS "Running toolchain IN_TRY_COMPILE") + return() +endif() + +set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON) + +# Definition of CMAKE_MODULE_PATH +# the generators folder (where conan generates files, like this toolchain) +list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) + +# Definition of CMAKE_PREFIX_PATH, CMAKE_XXXXX_PATH +# The Conan local "generators" folder, where this toolchain is saved. +list(PREPEND CMAKE_PREFIX_PATH ${CMAKE_CURRENT_LIST_DIR} ) +SUBDIRLIST(SUBDIRS "$ENV{HOME}/.conan2/p/b/") +FOREACH(subdir ${SUBDIRS}) + list(PREPEND CMAKE_LIBRARY_PATH "${subdir}/p/lib") + list(PREPEND CMAKE_INCLUDE_PATH "${subdir}/p/include") +ENDFOREACH() + + +if (DEFINED ENV{PKG_CONFIG_PATH}) +set(ENV{PKG_CONFIG_PATH} "${CMAKE_CURRENT_LIST_DIR}:$ENV{PKG_CONFIG_PATH}") +else() +set(ENV{PKG_CONFIG_PATH} "${CMAKE_CURRENT_LIST_DIR}:") +endif() + + + + +# Variables +# Variables per configuration \ No newline at end of file diff --git a/toolchains/linux-x86_64.cmake b/toolchains/linux-x86_64.cmake new file mode 100644 index 0000000..024c21a --- /dev/null +++ b/toolchains/linux-x86_64.cmake @@ -0,0 +1,91 @@ +# Avoid including toolchain file several times (bad if appending to variables like +# CMAKE_CXX_FLAGS. See https://github.com/android/ndk/issues/323 +include_guard() + +MACRO(SUBDIRLIST result curdir) + FILE(GLOB children ${curdir}/*) + SET(dirlist "") + FOREACH(child ${children}) + IF(IS_DIRECTORY ${child}) + LIST(APPEND dirlist ${child}) + ENDIF() + ENDFOREACH() + SET(${result} ${dirlist}) +ENDMACRO() + +message(STATUS "Using Conan toolchain: ${CMAKE_CURRENT_LIST_FILE}") + +if(${CMAKE_VERSION} VERSION_LESS "3.15") + message(FATAL_ERROR "The 'CMakeToolchain' generator only works with CMake >= 3.15") +endif() + + + + + + + + + + +string(APPEND CONAN_CXX_FLAGS " -m64") +string(APPEND CONAN_C_FLAGS " -m64") +string(APPEND CONAN_SHARED_LINKER_FLAGS " -m64") +string(APPEND CONAN_EXE_LINKER_FLAGS " -m64") + + + +message(STATUS "Conan toolchain: C++ Standard 17 with extensions ON") +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_EXTENSIONS ON) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# Extra c, cxx, linkflags and defines + + +if(DEFINED CONAN_CXX_FLAGS) + string(APPEND CMAKE_CXX_FLAGS_INIT " ${CONAN_CXX_FLAGS}") +endif() +if(DEFINED CONAN_C_FLAGS) + string(APPEND CMAKE_C_FLAGS_INIT " ${CONAN_C_FLAGS}") +endif() +if(DEFINED CONAN_SHARED_LINKER_FLAGS) + string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${CONAN_SHARED_LINKER_FLAGS}") +endif() +if(DEFINED CONAN_EXE_LINKER_FLAGS) + string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${CONAN_EXE_LINKER_FLAGS}") +endif() + +get_property( _CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE ) +if(_CMAKE_IN_TRY_COMPILE) + message(STATUS "Running toolchain IN_TRY_COMPILE") + return() +endif() + +set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON) + +# Definition of CMAKE_MODULE_PATH +# the generators folder (where conan generates files, like this toolchain) +list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) + +# Definition of CMAKE_PREFIX_PATH, CMAKE_XXXXX_PATH +# The Conan local "generators" folder, where this toolchain is saved. +list(PREPEND CMAKE_PREFIX_PATH ${CMAKE_CURRENT_LIST_DIR} ) +SUBDIRLIST(SUBDIRS "$ENV{HOME}/.conan2/p/b/") +FOREACH(subdir ${SUBDIRS}) + list(PREPEND CMAKE_LIBRARY_PATH "${subdir}/p/lib") + list(PREPEND CMAKE_INCLUDE_PATH "${subdir}/p/include") +ENDFOREACH() + + +if (DEFINED ENV{PKG_CONFIG_PATH}) +set(ENV{PKG_CONFIG_PATH} "${CMAKE_CURRENT_LIST_DIR}:$ENV{PKG_CONFIG_PATH}") +else() +set(ENV{PKG_CONFIG_PATH} "${CMAKE_CURRENT_LIST_DIR}:") +endif() + + + + +# Variables +# Variables per configuration \ No newline at end of file diff --git a/toolchains/mac-aarch64.cmake b/toolchains/mac-aarch64.cmake new file mode 100644 index 0000000..d800349 --- /dev/null +++ b/toolchains/mac-aarch64.cmake @@ -0,0 +1,110 @@ +# Conan automatically generated toolchain file +# DO NOT EDIT MANUALLY, it will be overwritten + +# Avoid including toolchain file several times (bad if appending to variables like +# CMAKE_CXX_FLAGS. See https://github.com/android/ndk/issues/323 +include_guard() + +MACRO(SUBDIRLIST result curdir) + FILE(GLOB children ${curdir}/*) + SET(dirlist "") + FOREACH(child ${children}) + IF(IS_DIRECTORY ${child}) + LIST(APPEND dirlist ${child}) + ENDIF() + ENDFOREACH() + SET(${result} ${dirlist}) +ENDMACRO() + +message(STATUS "Using Conan toolchain: ${CMAKE_CURRENT_LIST_FILE}") + +if(${CMAKE_VERSION} VERSION_LESS "3.15") + message(FATAL_ERROR "The 'CMakeToolchain' generator only works with CMake >= 3.15") +endif() + + + + + + + + + + +# Set the architectures for which to build. +set(CMAKE_OSX_ARCHITECTURES arm64 CACHE STRING "" FORCE) +# Setting CMAKE_OSX_SYSROOT SDK, when using Xcode generator the name is enough +# but full path is necessary for others +set(CMAKE_OSX_SYSROOT macosx CACHE STRING "" FORCE) +set(BITCODE "") +set(FOBJC_ARC "") +set(VISIBILITY "") +#Check if Xcode generator is used, since that will handle these flags automagically +if(CMAKE_GENERATOR MATCHES "Xcode") + message(DEBUG "Not setting any manual command-line buildflags, since Xcode is selected as generator.") +else() + string(APPEND CONAN_C_FLAGS " ${BITCODE} ${FOBJC_ARC}") + string(APPEND CONAN_CXX_FLAGS " ${BITCODE} ${VISIBILITY} ${FOBJC_ARC}") +endif() + +string(APPEND CONAN_CXX_FLAGS " -stdlib=libc++") + + +message(STATUS "Conan toolchain: C++ Standard 17 with extensions ON") +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_EXTENSIONS ON) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# Extra c, cxx, linkflags and defines + + +if(DEFINED CONAN_CXX_FLAGS) + string(APPEND CMAKE_CXX_FLAGS_INIT " ${CONAN_CXX_FLAGS}") +endif() +if(DEFINED CONAN_C_FLAGS) + string(APPEND CMAKE_C_FLAGS_INIT " ${CONAN_C_FLAGS}") +endif() +if(DEFINED CONAN_SHARED_LINKER_FLAGS) + string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${CONAN_SHARED_LINKER_FLAGS}") +endif() +if(DEFINED CONAN_EXE_LINKER_FLAGS) + string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${CONAN_EXE_LINKER_FLAGS}") +endif() + +get_property( _CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE ) +if(_CMAKE_IN_TRY_COMPILE) + message(STATUS "Running toolchain IN_TRY_COMPILE") + return() +endif() + +set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON) + +# Definition of CMAKE_MODULE_PATH +# the generators folder (where conan generates files, like this toolchain) +list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) + +# Definition of CMAKE_PREFIX_PATH, CMAKE_XXXXX_PATH +# The Conan local "generators" folder, where this toolchain is saved. +list(PREPEND CMAKE_PREFIX_PATH ${CMAKE_CURRENT_LIST_DIR} ) +SUBDIRLIST(SUBDIRS "$ENV{HOME}/.conan2/p/b/") +FOREACH(subdir ${SUBDIRS}) + list(PREPEND CMAKE_LIBRARY_PATH "${subdir}/p/lib") + list(PREPEND CMAKE_INCLUDE_PATH "${subdir}/p/include") +ENDFOREACH() + + +if (DEFINED ENV{PKG_CONFIG_PATH}) +set(ENV{PKG_CONFIG_PATH} "${CMAKE_CURRENT_LIST_DIR}:$ENV{PKG_CONFIG_PATH}") +else() +set(ENV{PKG_CONFIG_PATH} "${CMAKE_CURRENT_LIST_DIR}:") +endif() + + + + +# Variables +# Variables per configuration + + +# Preprocessor definitions +# Preprocessor definitions per configuration diff --git a/toolchains/mac-x86_64.cmake b/toolchains/mac-x86_64.cmake new file mode 100644 index 0000000..730616a --- /dev/null +++ b/toolchains/mac-x86_64.cmake @@ -0,0 +1,111 @@ + +# Conan automatically generated toolchain file +# DO NOT EDIT MANUALLY, it will be overwritten + +# Avoid including toolchain file several times (bad if appending to variables like +# CMAKE_CXX_FLAGS. See https://github.com/android/ndk/issues/323 +include_guard() + +MACRO(SUBDIRLIST result curdir) + FILE(GLOB children ${curdir}/*) + SET(dirlist "") + FOREACH(child ${children}) + IF(IS_DIRECTORY ${child}) + LIST(APPEND dirlist ${child}) + ENDIF() + ENDFOREACH() + SET(${result} ${dirlist}) +ENDMACRO() + +message(STATUS "Using Conan toolchain: ${CMAKE_CURRENT_LIST_FILE}") + +if(${CMAKE_VERSION} VERSION_LESS "3.15") + message(FATAL_ERROR "The 'CMakeToolchain' generator only works with CMake >= 3.15") +endif() + + + + + + + + + + +# Set the architectures for which to build. +set(CMAKE_OSX_ARCHITECTURES arm64 CACHE STRING "" FORCE) +# Setting CMAKE_OSX_SYSROOT SDK, when using Xcode generator the name is enough +# but full path is necessary for others +set(CMAKE_OSX_SYSROOT macosx CACHE STRING "" FORCE) +set(BITCODE "") +set(FOBJC_ARC "") +set(VISIBILITY "") +#Check if Xcode generator is used, since that will handle these flags automagically +if(CMAKE_GENERATOR MATCHES "Xcode") + message(DEBUG "Not setting any manual command-line buildflags, since Xcode is selected as generator.") +else() + string(APPEND CONAN_C_FLAGS " ${BITCODE} ${FOBJC_ARC}") + string(APPEND CONAN_CXX_FLAGS " ${BITCODE} ${VISIBILITY} ${FOBJC_ARC}") +endif() + +string(APPEND CONAN_CXX_FLAGS " -stdlib=libc++") + + +message(STATUS "Conan toolchain: C++ Standard 17 with extensions ON") +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_EXTENSIONS ON) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# Extra c, cxx, linkflags and defines + + +if(DEFINED CONAN_CXX_FLAGS) + string(APPEND CMAKE_CXX_FLAGS_INIT " ${CONAN_CXX_FLAGS}") +endif() +if(DEFINED CONAN_C_FLAGS) + string(APPEND CMAKE_C_FLAGS_INIT " ${CONAN_C_FLAGS}") +endif() +if(DEFINED CONAN_SHARED_LINKER_FLAGS) + string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${CONAN_SHARED_LINKER_FLAGS}") +endif() +if(DEFINED CONAN_EXE_LINKER_FLAGS) + string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${CONAN_EXE_LINKER_FLAGS}") +endif() + +get_property( _CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE ) +if(_CMAKE_IN_TRY_COMPILE) + message(STATUS "Running toolchain IN_TRY_COMPILE") + return() +endif() + +set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON) + +# Definition of CMAKE_MODULE_PATH +# the generators folder (where conan generates files, like this toolchain) +list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) + +# Definition of CMAKE_PREFIX_PATH, CMAKE_XXXXX_PATH +# The Conan local "generators" folder, where this toolchain is saved. +list(PREPEND CMAKE_PREFIX_PATH ${CMAKE_CURRENT_LIST_DIR} ) +SUBDIRLIST(SUBDIRS "$ENV{HOME}/.conan2/p/b/") +FOREACH(subdir ${SUBDIRS}) + list(PREPEND CMAKE_LIBRARY_PATH "${subdir}/p/lib") + list(PREPEND CMAKE_INCLUDE_PATH "${subdir}/p/include") +ENDFOREACH() + + +if (DEFINED ENV{PKG_CONFIG_PATH}) +set(ENV{PKG_CONFIG_PATH} "${CMAKE_CURRENT_LIST_DIR}:$ENV{PKG_CONFIG_PATH}") +else() +set(ENV{PKG_CONFIG_PATH} "${CMAKE_CURRENT_LIST_DIR}:") +endif() + + + + +# Variables +# Variables per configuration + + +# Preprocessor definitions +# Preprocessor definitions per configuration From 7cb5a963350abd9cfe3a5fdd15327925730df4b5 Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sat, 14 Oct 2023 22:22:44 +0200 Subject: [PATCH 09/22] fixing toolchain configs --- .github/workflows/build.yml | 15 +++-- CMakeLists.txt | 56 +------------------ ...{mac-aarch64.cmake => macos-aarch64.cmake} | 0 .../{mac-x86_64.cmake => macos-x86_64.cmake} | 2 +- 4 files changed, 11 insertions(+), 62 deletions(-) rename toolchains/{mac-aarch64.cmake => macos-aarch64.cmake} (100%) rename toolchains/{mac-x86_64.cmake => macos-x86_64.cmake} (98%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2ec073a..a5ae855 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -49,33 +49,32 @@ jobs: conan version cp .github/conan2/${{ matrix.TARGET }}_default ~/.conan2/profiles/default conan profile show - - - name: conan-install - shell: bash - run: | mkdir -p libs mkdir -p build - conan install . --output-folder=build --build=missing - + - name: compile x86_64 shell: bash run: | + conan install . --output-folder=build --build=missing cd build cp ../toolchains/${{matrix.TARGET}}-x86_64.cmake conan_toolchain.cmake - cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release + LIB_SUFFIX="-${{matrix.TARGET}}-x86_64" cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release cmake --build . file lib* cp libjudy* ../libs/ + rm -fr * - name: compile aarch64 shell: bash run: | + conan install . --output-folder=build --build=missing cd build cp ../toolchains/${{matrix.TARGET}}-aarch64.cmake conan_toolchain.cmake - cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release + LIB_SUFFIX="-${{matrix.TARGET}}-aarch64" cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release cmake --build . file lib* cp libjudy* ../libs/ + rm -fr * - name: artifacts uses: actions/upload-artifact@v3 diff --git a/CMakeLists.txt b/CMakeLists.txt index b87f812..957ec90 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,56 +10,6 @@ else() set(STDLIB_INCLUDE /usr/local/include) endif() -if(CMAKE_SYSTEM_NAME MATCHES "Linux") - set(LINUX TRUE) -elseif(WIN32) -elseif(APPLE) -else() - message(FATAL_ERROR "Platform is not supported") -endif() - -if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR CMAKE_SYSTEM_PROCESSOR MATCHES "aarch") - if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(ARCH "aarch64") - else() - set(ARCH "arm") - endif() -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips.*") - if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(ARCH "mips64el") - else() - set(ARCH "mipsel") - endif() -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc.*") - if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(ARCH "ppc64le") - else() - message(FATAL_ERROR "Architecture is not supported") - endif() -else() - if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(ARCH "x86_64") - else() - set(ARCH "x86") - endif() -endif() - -if(CMAKE_OSX_ARCHITECTURES) - if(CMAKE_OSX_ARCHITECTURES MATCHES "arm64") - set(ARCH "aarch64") - elseif(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64") - set(ARCH "x86_64") - elseif(CMAKE_OSX_ARCHITECTURES MATCHES "i386") - set(ARCH "x86") - else() - message(FATAL_ERROR "Architecture ${CMAKE_OSX_ARCHITECTURES} is not " - "supported. Only one architecture (arm64, x86_64 " - "or i386) could be specified at build time.") - endif() -endif() -set(CMAKE_MACOSX_RPATH TRUE) - - add_definitions("-std=c++14") add_compile_options(-pthread) @@ -73,11 +23,11 @@ message(STATUS "Found boost includes at " ${Boost_INCLUDE_DIR}) AUX_SOURCE_DIRECTORY(src SOURCES) add_executable(${PROJECT_NAME}-main ${SOURCES} ${HEADERS}) -add_library(${PROJECT_NAME}-${ARCH} SHARED ${SOURCES} ${HEADERS}) +add_library(${PROJECT_NAME}$ENV{LIB_SUFFIX} SHARED ${SOURCES} ${HEADERS}) target_include_directories(${PROJECT_NAME}-main PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) -target_include_directories(${PROJECT_NAME}-${ARCH} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) +target_include_directories(${PROJECT_NAME}$ENV{LIB_SUFFIX} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) target_link_libraries(${PROJECT_NAME}-main ${Boost_LIBRARIES} ) -target_link_libraries(${PROJECT_NAME}-${ARCH} PRIVATE Threads::Threads) +target_link_libraries(${PROJECT_NAME}$ENV{LIB_SUFFIX} PRIVATE Threads::Threads) add_custom_target( java-sources diff --git a/toolchains/mac-aarch64.cmake b/toolchains/macos-aarch64.cmake similarity index 100% rename from toolchains/mac-aarch64.cmake rename to toolchains/macos-aarch64.cmake diff --git a/toolchains/mac-x86_64.cmake b/toolchains/macos-x86_64.cmake similarity index 98% rename from toolchains/mac-x86_64.cmake rename to toolchains/macos-x86_64.cmake index 730616a..94b81cb 100644 --- a/toolchains/mac-x86_64.cmake +++ b/toolchains/macos-x86_64.cmake @@ -33,7 +33,7 @@ endif() # Set the architectures for which to build. -set(CMAKE_OSX_ARCHITECTURES arm64 CACHE STRING "" FORCE) +set(CMAKE_OSX_ARCHITECTURES x86_64 CACHE STRING "" FORCE) # Setting CMAKE_OSX_SYSROOT SDK, when using Xcode generator the name is enough # but full path is necessary for others set(CMAKE_OSX_SYSROOT macosx CACHE STRING "" FORCE) From 60470d402fef78fff36ee1dd5215deb32d5ef7b8 Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sat, 14 Oct 2023 23:33:42 +0200 Subject: [PATCH 10/22] experiment with aarch64 action --- .github/workflows/build.yml | 146 +++++++++++++++++++++++++++--------- 1 file changed, 112 insertions(+), 34 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a5ae855..769263c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,19 +7,78 @@ on: branches: [ main ] jobs: - build: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest, macos-latest] - include: - - os: ubuntu-latest - TARGET: linux - - os: macos-latest - TARGET: macos + # build-on-macos: + # runs-on: macos-latest + # steps: + # - name: 'Check out repository' + # uses: actions/checkout@v4 + # with: + # fetch-depth: 1 + + # - name: caching + # uses: actions/cache@v3 + # id: cmakelists + # with: + # path: CMakeLists.txt + # key: ${{ github.sha }}-${{ github.run_id }} + + # - name: Set up Homebrew + # id: set-up-homebrew + # uses: Homebrew/actions/setup-homebrew@master + # with: + # test-bot: false + + # - name: install prerequisites + # shell: bash + # run: | + # brew install gcc + # brew install conan + + # - name: conan-profile + # shell: bash + # run: | + # conan profile detect + # conan version + # cp .github/conan2/macos_default ~/.conan2/profiles/default + # conan profile show + # mkdir -p libs + # mkdir -p build + + # - name: compile x86_64 + # shell: bash + # run: | + # conan install . --output-folder=build --build=missing + # cd build + # cp ../toolchains/macos-x86_64.cmake conan_toolchain.cmake + # LIB_SUFFIX="-macos-x86_64" cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release + # cmake --build . + # file lib* + # cp libjudy* ../libs/ + # rm -fr * + + # - name: compile aarch64 + # shell: bash + # run: | + # conan install . --output-folder=build --build=missing + # cd build + # cp ../toolchains/macos-aarch64.cmake conan_toolchain.cmake + # LIB_SUFFIX="-macos-aarch64" cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release + # cmake --build . + # file lib* + # cp libjudy* ../libs/ + # rm -fr * + + # - name: artifacts + # uses: actions/upload-artifact@v3 + # with: + # name: libjudy-macos + # path: libs/libjudy* + # retention-days: 1 + + build-on-linux: + runs-on: ubuntu-latest steps: - - name: 'Check out repository' - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 1 @@ -27,9 +86,40 @@ jobs: uses: actions/cache@v3 id: cmakelists with: - path: CMakeLists.txt + path: | + CMakeLists.txt + /usr/local/Cellar key: ${{ github.sha }}-${{ github.run_id }} + - uses: uraimo/run-on-arch-action@master + name: Run commands + id: aarch64 + with: + arch: aarch64 + distro: ubuntu-latest + githubToken: ${{ github.token }} + shell: /bin/sh + setup: | + mkdir -p "${PWD}/libs" + dockerRunArgs: | + --volume "${PWD}/libs:/libs" + install: + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + brew install gcc conan + conan profile detect + conan version + conan profile show + run: | + mkdir -p libs + mkdir -p build + conan install . --output-folder=build --build=missing + cd build + cp ../toolchains/linux-aarch64.cmake conan_toolchain.cmake + LIB_SUFFIX="-linux-aarch64" cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release + cmake --build . + file lib* + cp libjudy* /libs/ + - name: Set up Homebrew id: set-up-homebrew uses: Homebrew/actions/setup-homebrew@master @@ -47,7 +137,7 @@ jobs: run: | conan profile detect conan version - cp .github/conan2/${{ matrix.TARGET }}_default ~/.conan2/profiles/default + cp .github/conan2/linux_default ~/.conan2/profiles/default conan profile show mkdir -p libs mkdir -p build @@ -57,31 +147,19 @@ jobs: run: | conan install . --output-folder=build --build=missing cd build - cp ../toolchains/${{matrix.TARGET}}-x86_64.cmake conan_toolchain.cmake - LIB_SUFFIX="-${{matrix.TARGET}}-x86_64" cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release + cp ../toolchains/linux-x86_64.cmake conan_toolchain.cmake + LIB_SUFFIX="-linux-x86_64" cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release cmake --build . file lib* cp libjudy* ../libs/ rm -fr * - - name: compile aarch64 - shell: bash - run: | - conan install . --output-folder=build --build=missing - cd build - cp ../toolchains/${{matrix.TARGET}}-aarch64.cmake conan_toolchain.cmake - LIB_SUFFIX="-${{matrix.TARGET}}-aarch64" cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release - cmake --build . - file lib* - cp libjudy* ../libs/ - rm -fr * - - - name: artifacts - uses: actions/upload-artifact@v3 - with: - name: libjudy-${{ matrix.TARGET }} - path: libs/libjudy* - retention-days: 1 + # - name: artifacts + # uses: actions/upload-artifact@v3 + # with: + # name: libjudy-linux + # path: libs/libjudy* + # retention-days: 1 # package: # needs: From 437767b1016c8cdb450eeb818175ddf105f353af Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sat, 14 Oct 2023 23:40:00 +0200 Subject: [PATCH 11/22] disable linux aarch for now --- .github/workflows/build.yml | 176 +++++++++++++++--------------------- 1 file changed, 73 insertions(+), 103 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 769263c..6f7a8f2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,73 +7,73 @@ on: branches: [ main ] jobs: - # build-on-macos: - # runs-on: macos-latest - # steps: - # - name: 'Check out repository' - # uses: actions/checkout@v4 - # with: - # fetch-depth: 1 - - # - name: caching - # uses: actions/cache@v3 - # id: cmakelists - # with: - # path: CMakeLists.txt - # key: ${{ github.sha }}-${{ github.run_id }} - - # - name: Set up Homebrew - # id: set-up-homebrew - # uses: Homebrew/actions/setup-homebrew@master - # with: - # test-bot: false - - # - name: install prerequisites - # shell: bash - # run: | - # brew install gcc - # brew install conan - - # - name: conan-profile - # shell: bash - # run: | - # conan profile detect - # conan version - # cp .github/conan2/macos_default ~/.conan2/profiles/default - # conan profile show - # mkdir -p libs - # mkdir -p build - - # - name: compile x86_64 - # shell: bash - # run: | - # conan install . --output-folder=build --build=missing - # cd build - # cp ../toolchains/macos-x86_64.cmake conan_toolchain.cmake - # LIB_SUFFIX="-macos-x86_64" cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release - # cmake --build . - # file lib* - # cp libjudy* ../libs/ - # rm -fr * - - # - name: compile aarch64 - # shell: bash - # run: | - # conan install . --output-folder=build --build=missing - # cd build - # cp ../toolchains/macos-aarch64.cmake conan_toolchain.cmake - # LIB_SUFFIX="-macos-aarch64" cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release - # cmake --build . - # file lib* - # cp libjudy* ../libs/ - # rm -fr * - - # - name: artifacts - # uses: actions/upload-artifact@v3 - # with: - # name: libjudy-macos - # path: libs/libjudy* - # retention-days: 1 + build-on-macos: + runs-on: macos-latest + steps: + - name: 'Check out repository' + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: caching + uses: actions/cache@v3 + id: cmakelists + with: + path: CMakeLists.txt + key: ${{ github.sha }}-${{ github.run_id }} + + - name: Set up Homebrew + id: set-up-homebrew + uses: Homebrew/actions/setup-homebrew@master + with: + test-bot: false + + - name: install prerequisites + shell: bash + run: | + brew install gcc + brew install conan + + - name: conan-profile + shell: bash + run: | + conan profile detect + conan version + cp .github/conan2/macos_default ~/.conan2/profiles/default + conan profile show + mkdir -p libs + mkdir -p build + + - name: compile x86_64 + shell: bash + run: | + conan install . --output-folder=build --build=missing + cd build + cp ../toolchains/macos-x86_64.cmake conan_toolchain.cmake + LIB_SUFFIX="-macos-x86_64" cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release + cmake --build . + file lib* + cp libjudy* ../libs/ + rm -fr * + + - name: compile aarch64 + shell: bash + run: | + conan install . --output-folder=build --build=missing + cd build + cp ../toolchains/macos-aarch64.cmake conan_toolchain.cmake + LIB_SUFFIX="-macos-aarch64" cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release + cmake --build . + file lib* + cp libjudy* ../libs/ + rm -fr * + + - name: artifacts + uses: actions/upload-artifact@v3 + with: + name: libjudy-macos + path: libs/libjudy* + retention-days: 1 build-on-linux: runs-on: ubuntu-latest @@ -91,35 +91,6 @@ jobs: /usr/local/Cellar key: ${{ github.sha }}-${{ github.run_id }} - - uses: uraimo/run-on-arch-action@master - name: Run commands - id: aarch64 - with: - arch: aarch64 - distro: ubuntu-latest - githubToken: ${{ github.token }} - shell: /bin/sh - setup: | - mkdir -p "${PWD}/libs" - dockerRunArgs: | - --volume "${PWD}/libs:/libs" - install: - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - brew install gcc conan - conan profile detect - conan version - conan profile show - run: | - mkdir -p libs - mkdir -p build - conan install . --output-folder=build --build=missing - cd build - cp ../toolchains/linux-aarch64.cmake conan_toolchain.cmake - LIB_SUFFIX="-linux-aarch64" cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release - cmake --build . - file lib* - cp libjudy* /libs/ - - name: Set up Homebrew id: set-up-homebrew uses: Homebrew/actions/setup-homebrew@master @@ -147,19 +118,18 @@ jobs: run: | conan install . --output-folder=build --build=missing cd build - cp ../toolchains/linux-x86_64.cmake conan_toolchain.cmake LIB_SUFFIX="-linux-x86_64" cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release cmake --build . file lib* cp libjudy* ../libs/ rm -fr * - # - name: artifacts - # uses: actions/upload-artifact@v3 - # with: - # name: libjudy-linux - # path: libs/libjudy* - # retention-days: 1 + - name: artifacts + uses: actions/upload-artifact@v3 + with: + name: libjudy-linux + path: libs/libjudy* + retention-days: 1 # package: # needs: From 7c1d616e840ffe65acb1d6db1910d981c0a3e897 Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sun, 15 Oct 2023 00:39:05 +0200 Subject: [PATCH 12/22] re-enabling jar assembly --- .github/workflows/build.yml | 272 ++++++++++++++++++------------------ 1 file changed, 135 insertions(+), 137 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6f7a8f2..18cb900 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,7 +19,9 @@ jobs: uses: actions/cache@v3 id: cmakelists with: - path: CMakeLists.txt + path: | + CMakeLists.txt + /usr/local/Cellar key: ${{ github.sha }}-${{ github.run_id }} - name: Set up Homebrew @@ -88,7 +90,7 @@ jobs: with: path: | CMakeLists.txt - /usr/local/Cellar + /home/linuxbrew/.linuxbrew/Cellar key: ${{ github.sha }}-${{ github.run_id }} - name: Set up Homebrew @@ -131,138 +133,134 @@ jobs: path: libs/libjudy* retention-days: 1 - # package: - # needs: - # - build - # runs-on: ${{ matrix.os }} - # strategy: - # matrix: - # os: [ ubuntu-latest ] - # include: - # - os: ubuntu-latest - # TARGET: linux - # PLATFORM: x64 - # steps: - # - name: 'Check out repository' - # uses: actions/checkout@v3 - # with: - # fetch-depth: 1 - - # - name: 'Download jextract' - # id: jextract - # uses: oracle-actions/setup-java@v1 - # with: - # install: false - # uri: https://download.java.net/java/early_access/jextract/1/openjdk-21-jextract+1-2_${{ matrix.TARGET }}-x64_bin.tar.gz - - # - name: 'Extract jextract' - # shell: sh - # run: | - # mkdir -p /tmp/jextract - # tar --strip-components=1 -xvf ${{ steps.jextract.outputs.archive }} -C /tmp/jextract - # export PATH=${PATH}:/tmp/jextract/bin - - # - name: 'Install OracleJDK GA' - # id: jdk_21 - # uses: oracle-actions/setup-java@v1 - # with: - # website: oracle.com - # release: 21 - - # - name: prepare-project - # shell: bash - # run: | - # export PATH=${PATH}:/tmp/jextract/bin - # mkdir -p build - # jextract -I /usr/local/include @jextract_dump.txt include/api.h - - # - name: version - # id: version - # shell: bash - # run: echo "version_var=$(date +'%Y.%m.%d')" >> $GITHUB_ENV - - # - name: Set up Homebrew - # id: set-up-homebrew - # uses: Homebrew/actions/setup-homebrew@master - # with: - # test-bot: false - - # - name: install prerequisites - # shell: bash - # run: | - # brew install gcc - # brew install conan - - # - name: conan-profile - # shell: bash - # run: | - # conan profile detect - # conan version - # cp .github/conan2/${{ matrix.TARGET }}_default ~/.conan2/profiles/default - # conan profile show - - # - name: conan-install - # shell: bash - # run: | - # mkdir -p build - # conan install . --output-folder=build --build=missing - # cd build - # cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release - - # - name: java sources - # shell: bash - # run: | - # export PATH=${PATH}:/tmp/jextract/bin - # cd build - # make java-sources - # mkdir src/main/resources - - # - name: libjudy-x86_64.linux - # uses: actions/download-artifact@v3 - # with: - # name: libjudy-x86_64.linux - # path: build/src/main/resources/lib - - # - name: libjudy-x86_64.macos - # uses: actions/download-artifact@v3 - # with: - # name: libjudy-x86_64.macos - # path: build/src/main/resources/lib - - # - name: libjudy-arm64.linux - # uses: actions/download-artifact@v3 - # with: - # name: libjudy-arm64.linux - # path: build/src/main/resources/lib - - # - name: libjudy-arm64.macos - # uses: actions/download-artifact@v3 - # with: - # name: libjudy-arm64.macos - # path: build/src/main/resources/lib - - # - name: Display structure of downloaded files - # run: ls -R - # working-directory: build/src/main/resources - - # - name: jar - # shell: bash - # run: | - # cd build - # make jar - - # - name: jar tf - # run: jar tf ../target/judy*.jar - # working-directory: build/ - - # - name: 'make release' - # if: github.event_name == 'push' - # uses: marvinpinto/action-automatic-releases@latest - # with: - # repo_token: ${{ secrets.GH_RELEASE_TOKEN }} - # automatic_release_tag: ${{ env.version_var }} - # prerelease: false - # title: Judy C++ UDP server ${{ env.version_var }} for Java - # files: | - # LICENSE - # target/*.jar + package: + needs: [ build-on-macos, build-on-linux ] + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ ubuntu-latest ] + include: + - os: ubuntu-latest + TARGET: linux + PLATFORM: x64 + steps: + - name: 'Check out repository' + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: caching + uses: actions/cache@v3 + id: cmakelists + with: + path: | + CMakeLists.txt + /usr/local/Cellar + key: ${{ github.sha }}-${{ github.run_id }} + + - name: 'Download jextract' + id: jextract + uses: oracle-actions/setup-java@v1 + with: + install: false + uri: https://download.java.net/java/early_access/jextract/1/openjdk-21-jextract+1-2_${{ matrix.TARGET }}-x64_bin.tar.gz + + - name: 'Extract jextract' + shell: sh + run: | + mkdir -p /tmp/jextract + tar --strip-components=1 -xvf ${{ steps.jextract.outputs.archive }} -C /tmp/jextract + export PATH=${PATH}:/tmp/jextract/bin + + - name: 'Install OracleJDK GA' + id: jdk_21 + uses: oracle-actions/setup-java@v1 + with: + website: oracle.com + release: 21 + + - name: prepare-project + shell: bash + run: | + export PATH=${PATH}:/tmp/jextract/bin + mkdir -p build + jextract -I /usr/local/include @jextract_dump.txt include/api.h + + - name: version + id: version + shell: bash + run: echo "version_var=$(date +'%Y.%m.%d')" >> $GITHUB_ENV + + - name: Set up Homebrew + id: set-up-homebrew + uses: Homebrew/actions/setup-homebrew@master + with: + test-bot: false + + - name: install prerequisites + shell: bash + run: | + brew install gcc + brew install conan + + - name: conan-profile + shell: bash + run: | + conan profile detect + conan version + cp .github/conan2/${{ matrix.TARGET }}_default ~/.conan2/profiles/default + conan profile show + + - name: conan-install + shell: bash + run: | + mkdir -p build + conan install . --output-folder=build --build=missing + cd build + cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release + + - name: java sources + shell: bash + run: | + export PATH=${PATH}:/tmp/jextract/bin + cd build + make java-sources + mkdir src/main/resources + + - name: libjudy-linux + uses: actions/download-artifact@v3 + with: + name: libjudy-linux + path: build/src/main/resources/lib + + - name: libjudy-macos + uses: actions/download-artifact@v3 + with: + name: libjudy-macos + path: build/src/main/resources/lib + + - name: Display structure of downloaded files + run: ls -R + working-directory: build/src/main/resources + + - name: jar + shell: bash + run: | + cd build + make jar + + - name: jar tf + run: jar tf ../target/judy*.jar + working-directory: build/ + + - name: 'make release' + if: github.event_name == 'push' + uses: marvinpinto/action-automatic-releases@latest + with: + repo_token: ${{ secrets.GH_RELEASE_TOKEN }} + automatic_release_tag: ${{ env.version_var }} + prerelease: false + title: Judy C++ UDP server ${{ env.version_var }} for Java + files: | + LICENSE + target/*.jar From cfe84852938265f5545d06b2306c59d2eb566033 Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sun, 15 Oct 2023 01:07:40 +0200 Subject: [PATCH 13/22] attempting to find a way for linux aarch64 builds --- .github/workflows/build.yml | 10 +++- CMakeLists.txt | 8 +++ toolchains/linux-aarch64.cmake | 93 ++++------------------------------ 3 files changed, 27 insertions(+), 84 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 18cb900..ae82416 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,6 +22,7 @@ jobs: path: | CMakeLists.txt /usr/local/Cellar + /Users/runner/.conan2 key: ${{ github.sha }}-${{ github.run_id }} - name: Set up Homebrew @@ -91,6 +92,7 @@ jobs: path: | CMakeLists.txt /home/linuxbrew/.linuxbrew/Cellar + /home/runner/.conan2 key: ${{ github.sha }}-${{ github.run_id }} - name: Set up Homebrew @@ -124,7 +126,13 @@ jobs: cmake --build . file lib* cp libjudy* ../libs/ - rm -fr * + rm -fr CMakeFiles/ + + - name: aarch64-linux-gnu-gcc + shell: bash + run: | + sudo apt-get update + sudo apt-get -y install gcc-aarch64-linux-gnu - name: artifacts uses: actions/upload-artifact@v3 diff --git a/CMakeLists.txt b/CMakeLists.txt index 957ec90..361f616 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,14 @@ else() set(STDLIB_INCLUDE /usr/local/include) endif() +# if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR CMAKE_SYSTEM_PROCESSOR MATCHES "aarch") +# if(CMAKE_SIZEOF_VOID_P EQUAL 8) +# if(CMAKE_SYSTEM_NAME MATCHES "Linux") +# include(${CMAKE_CURRENT_LIST_DIR}/../toolchains/linux-aarch64.cmake) +# endif() +# endif() +# endif() + add_definitions("-std=c++14") add_compile_options(-pthread) diff --git a/toolchains/linux-aarch64.cmake b/toolchains/linux-aarch64.cmake index ac2f95f..b9b9f6c 100644 --- a/toolchains/linux-aarch64.cmake +++ b/toolchains/linux-aarch64.cmake @@ -1,89 +1,16 @@ -# Avoid including toolchain file several times (bad if appending to variables like -# CMAKE_CXX_FLAGS. See https://github.com/android/ndk/issues/323 -include_guard() - -MACRO(SUBDIRLIST result curdir) - FILE(GLOB children ${curdir}/*) - SET(dirlist "") - FOREACH(child ${children}) - IF(IS_DIRECTORY ${child}) - LIST(APPEND dirlist ${child}) - ENDIF() - ENDFOREACH() - SET(${result} ${dirlist}) -ENDMACRO() - -message(STATUS "Using Conan toolchain: ${CMAKE_CURRENT_LIST_FILE}") - -if(${CMAKE_VERSION} VERSION_LESS "3.15") - message(FATAL_ERROR "The 'CMakeToolchain' generator only works with CMake >= 3.15") -endif() - - - - - - - - - - set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) +set(CMAKE_C_COMPILER "aarch64-linux-gnu-gcc") +set(CMAKE_CXX_COMPILER "aarch64-linux-gnu-g++") +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -message(STATUS "Conan toolchain: C++ Standard 17 with extensions ON") -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_EXTENSIONS ON) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -# Extra c, cxx, linkflags and defines - - -if(DEFINED CONAN_CXX_FLAGS) - string(APPEND CMAKE_CXX_FLAGS_INIT " ${CONAN_CXX_FLAGS}") -endif() -if(DEFINED CONAN_C_FLAGS) - string(APPEND CMAKE_C_FLAGS_INIT " ${CONAN_C_FLAGS}") -endif() -if(DEFINED CONAN_SHARED_LINKER_FLAGS) - string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${CONAN_SHARED_LINKER_FLAGS}") -endif() -if(DEFINED CONAN_EXE_LINKER_FLAGS) - string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${CONAN_EXE_LINKER_FLAGS}") -endif() - -get_property( _CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE ) -if(_CMAKE_IN_TRY_COMPILE) - message(STATUS "Running toolchain IN_TRY_COMPILE") - return() -endif() - -set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON) - -# Definition of CMAKE_MODULE_PATH -# the generators folder (where conan generates files, like this toolchain) -list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) - -# Definition of CMAKE_PREFIX_PATH, CMAKE_XXXXX_PATH -# The Conan local "generators" folder, where this toolchain is saved. -list(PREPEND CMAKE_PREFIX_PATH ${CMAKE_CURRENT_LIST_DIR} ) -SUBDIRLIST(SUBDIRS "$ENV{HOME}/.conan2/p/b/") -FOREACH(subdir ${SUBDIRS}) - list(PREPEND CMAKE_LIBRARY_PATH "${subdir}/p/lib") - list(PREPEND CMAKE_INCLUDE_PATH "${subdir}/p/include") -ENDFOREACH() - - -if (DEFINED ENV{PKG_CONFIG_PATH}) -set(ENV{PKG_CONFIG_PATH} "${CMAKE_CURRENT_LIST_DIR}:$ENV{PKG_CONFIG_PATH}") -else() -set(ENV{PKG_CONFIG_PATH} "${CMAKE_CURRENT_LIST_DIR}:") -endif() - - - +set(CMAKE_C_FLAGS "-march=armv8-a") +set(CMAKE_CXX_FLAGS "-march=armv8-a") -# Variables -# Variables per configuration \ No newline at end of file +# cache flags +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags") From cbe18a9d7363f7b92782c76e790f6df3edee42ac Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sun, 15 Oct 2023 20:39:39 +0200 Subject: [PATCH 14/22] installing debootstrap --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ae82416..141ddd2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -132,7 +132,8 @@ jobs: shell: bash run: | sudo apt-get update - sudo apt-get -y install gcc-aarch64-linux-gnu + sudo apt-get -y install gcc-aarch64-linux-gnu debootstrap + sudo debootstrap --arch=arm64 bookworm /chroot-debian http://deb.debian.org/debian/ - name: artifacts uses: actions/upload-artifact@v3 From 3f170c635a57fa4e9aa5d4362594bc274197c6fa Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sun, 15 Oct 2023 20:45:58 +0200 Subject: [PATCH 15/22] don't cache .conan2 --- .github/workflows/build.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 141ddd2..3592b94 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,7 +22,6 @@ jobs: path: | CMakeLists.txt /usr/local/Cellar - /Users/runner/.conan2 key: ${{ github.sha }}-${{ github.run_id }} - name: Set up Homebrew @@ -92,7 +91,6 @@ jobs: path: | CMakeLists.txt /home/linuxbrew/.linuxbrew/Cellar - /home/runner/.conan2 key: ${{ github.sha }}-${{ github.run_id }} - name: Set up Homebrew From 357258e1ac790085f8538483e852d79c295ce8f5 Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sun, 15 Oct 2023 20:56:59 +0200 Subject: [PATCH 16/22] try to enable linux aarch --- .github/workflows/build.yml | 15 +++++- CMakeLists.txt | 8 --- toolchains/linux-aarch64.cmake | 93 ++++++++++++++++++++++++++++++---- 3 files changed, 96 insertions(+), 20 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3592b94..a4108a1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -130,8 +130,19 @@ jobs: shell: bash run: | sudo apt-get update - sudo apt-get -y install gcc-aarch64-linux-gnu debootstrap - sudo debootstrap --arch=arm64 bookworm /chroot-debian http://deb.debian.org/debian/ + sudo apt-get -y install gcc-aarch64-linux-gnu + + - name: compile aarch64 + shell: bash + run: | + conan install . --output-folder=build --build=missing + cd build + cp ../toolchains/linux-aarch64.cmake conan_toolchain.cmake + LIB_SUFFIX="-linux-aarch64" cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release + cmake --build . + file lib* + cp libjudy* ../libs/ + rm -fr * - name: artifacts uses: actions/upload-artifact@v3 diff --git a/CMakeLists.txt b/CMakeLists.txt index 361f616..957ec90 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,14 +10,6 @@ else() set(STDLIB_INCLUDE /usr/local/include) endif() -# if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR CMAKE_SYSTEM_PROCESSOR MATCHES "aarch") -# if(CMAKE_SIZEOF_VOID_P EQUAL 8) -# if(CMAKE_SYSTEM_NAME MATCHES "Linux") -# include(${CMAKE_CURRENT_LIST_DIR}/../toolchains/linux-aarch64.cmake) -# endif() -# endif() -# endif() - add_definitions("-std=c++14") add_compile_options(-pthread) diff --git a/toolchains/linux-aarch64.cmake b/toolchains/linux-aarch64.cmake index b9b9f6c..4e76309 100644 --- a/toolchains/linux-aarch64.cmake +++ b/toolchains/linux-aarch64.cmake @@ -1,16 +1,89 @@ +# Avoid including toolchain file several times (bad if appending to variables like +# CMAKE_CXX_FLAGS. See https://github.com/android/ndk/issues/323 +include_guard() + +MACRO(SUBDIRLIST result curdir) + FILE(GLOB children ${curdir}/*) + SET(dirlist "") + FOREACH(child ${children}) + IF(IS_DIRECTORY ${child}) + LIST(APPEND dirlist ${child}) + ENDIF() + ENDFOREACH() + SET(${result} ${dirlist}) +ENDMACRO() + +message(STATUS "Using Conan toolchain: ${CMAKE_CURRENT_LIST_FILE}") + +if(${CMAKE_VERSION} VERSION_LESS "3.15") + message(FATAL_ERROR "The 'CMakeToolchain' generator only works with CMake >= 3.15") +endif() + + + + + + + + + + +message(STATUS "Conan toolchain: C++ Standard 17 with extensions ON") +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_EXTENSIONS ON) +set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) +set(CMAKE_C_COMPILER "/usr/bin/aarch64-linux-gnu-gcc-8") +set(CMAKE_CXX_COMPILER "/usr/bin/aarch64-linux-gnu-g++-8") +set(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +# Extra c, cxx, linkflags and defines + + +if(DEFINED CONAN_CXX_FLAGS) + string(APPEND CMAKE_CXX_FLAGS_INIT " ${CONAN_CXX_FLAGS}") +endif() +if(DEFINED CONAN_C_FLAGS) + string(APPEND CMAKE_C_FLAGS_INIT " ${CONAN_C_FLAGS}") +endif() +if(DEFINED CONAN_SHARED_LINKER_FLAGS) + string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${CONAN_SHARED_LINKER_FLAGS}") +endif() +if(DEFINED CONAN_EXE_LINKER_FLAGS) + string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${CONAN_EXE_LINKER_FLAGS}") +endif() + +get_property( _CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE ) +if(_CMAKE_IN_TRY_COMPILE) + message(STATUS "Running toolchain IN_TRY_COMPILE") + return() +endif() + +set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON) + +# Definition of CMAKE_MODULE_PATH +# the generators folder (where conan generates files, like this toolchain) +list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) + +# Definition of CMAKE_PREFIX_PATH, CMAKE_XXXXX_PATH +# The Conan local "generators" folder, where this toolchain is saved. +list(PREPEND CMAKE_PREFIX_PATH ${CMAKE_CURRENT_LIST_DIR} ) +SUBDIRLIST(SUBDIRS "$ENV{HOME}/.conan2/p/b/") +FOREACH(subdir ${SUBDIRS}) + list(PREPEND CMAKE_LIBRARY_PATH "${subdir}/p/lib") + list(PREPEND CMAKE_INCLUDE_PATH "${subdir}/p/include") +ENDFOREACH() + + +if (DEFINED ENV{PKG_CONFIG_PATH}) +set(ENV{PKG_CONFIG_PATH} "${CMAKE_CURRENT_LIST_DIR}:$ENV{PKG_CONFIG_PATH}") +else() +set(ENV{PKG_CONFIG_PATH} "${CMAKE_CURRENT_LIST_DIR}:") +endif() -set(CMAKE_C_COMPILER "aarch64-linux-gnu-gcc") -set(CMAKE_CXX_COMPILER "aarch64-linux-gnu-g++") -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -set(CMAKE_C_FLAGS "-march=armv8-a") -set(CMAKE_CXX_FLAGS "-march=armv8-a") -# cache flags -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags") +# Variables +# Variables per configuration \ No newline at end of file From 977b816c499f3c7cddef26959d2eb132a3772a14 Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sun, 15 Oct 2023 21:02:59 +0200 Subject: [PATCH 17/22] fix aarch64-linux-gnu paths --- toolchains/linux-aarch64.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/toolchains/linux-aarch64.cmake b/toolchains/linux-aarch64.cmake index 4e76309..3155dc3 100644 --- a/toolchains/linux-aarch64.cmake +++ b/toolchains/linux-aarch64.cmake @@ -34,8 +34,8 @@ set(CMAKE_CXX_EXTENSIONS ON) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) -set(CMAKE_C_COMPILER "/usr/bin/aarch64-linux-gnu-gcc-8") -set(CMAKE_CXX_COMPILER "/usr/bin/aarch64-linux-gnu-g++-8") +set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc) +set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++) set(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Extra c, cxx, linkflags and defines From da8fe1bf2991f151e5e60898bd80732ee1f67f18 Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sun, 15 Oct 2023 21:04:56 +0200 Subject: [PATCH 18/22] remove brew cache for macos builds --- .github/workflows/build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a4108a1..c1179ec 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,7 +21,6 @@ jobs: with: path: | CMakeLists.txt - /usr/local/Cellar key: ${{ github.sha }}-${{ github.run_id }} - name: Set up Homebrew From e0c7a51e97b651f4ab09ce0419727017c1329790 Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sun, 15 Oct 2023 21:28:07 +0200 Subject: [PATCH 19/22] remove linux aarch64 --- .github/workflows/build.yml | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c1179ec..13219fa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -125,24 +125,6 @@ jobs: cp libjudy* ../libs/ rm -fr CMakeFiles/ - - name: aarch64-linux-gnu-gcc - shell: bash - run: | - sudo apt-get update - sudo apt-get -y install gcc-aarch64-linux-gnu - - - name: compile aarch64 - shell: bash - run: | - conan install . --output-folder=build --build=missing - cd build - cp ../toolchains/linux-aarch64.cmake conan_toolchain.cmake - LIB_SUFFIX="-linux-aarch64" cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release - cmake --build . - file lib* - cp libjudy* ../libs/ - rm -fr * - - name: artifacts uses: actions/upload-artifact@v3 with: From 3348d74ea3a244d993b8109e9ef9aac6c038c0be Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sun, 15 Oct 2023 21:34:37 +0200 Subject: [PATCH 20/22] install six for conan2 --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 13219fa..1bb0851 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -38,6 +38,7 @@ jobs: - name: conan-profile shell: bash run: | + pip3 install --ignore-installed six conan profile detect conan version cp .github/conan2/macos_default ~/.conan2/profiles/default From 213ae0d064b870ee23b835f8c073506fac791199 Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sun, 15 Oct 2023 22:09:03 +0200 Subject: [PATCH 21/22] fix conan version to 2.0.13_1 --- .github/workflows/build.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1bb0851..67e2312 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,12 +33,11 @@ jobs: shell: bash run: | brew install gcc - brew install conan + brew install conan@2.0.13_1 - name: conan-profile shell: bash run: | - pip3 install --ignore-installed six conan profile detect conan version cp .github/conan2/macos_default ~/.conan2/profiles/default From 05dd68d5a93520a38410361908674cb9265a4047 Mon Sep 17 00:00:00 2001 From: Denys Makogon Date: Sun, 15 Oct 2023 22:17:54 +0200 Subject: [PATCH 22/22] replace brew install with pip3 --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 67e2312..56aa281 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,7 +33,7 @@ jobs: shell: bash run: | brew install gcc - brew install conan@2.0.13_1 + pip3 install conan - name: conan-profile shell: bash