Skip to content

Commit

Permalink
improving cmakelists for cross-compiling
Browse files Browse the repository at this point in the history
  • Loading branch information
denismakogon committed Oct 14, 2023
1 parent c65f9f7 commit 103d0ff
Show file tree
Hide file tree
Showing 2 changed files with 117 additions and 16 deletions.
39 changes: 30 additions & 9 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down
94 changes: 87 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,18 +1,98 @@
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)
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)

Expand All @@ -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
Expand Down

0 comments on commit 103d0ff

Please sign in to comment.