diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 77d7b3531..f23c9837f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,3 +18,13 @@ jobs: run: make - name: make distcheck run: make distcheck + + build_cmake: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Configure CMake + run: cmake -B ${{github.workspace}}/build + - name: Build + run: cmake --build ${{github.workspace}}/build diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..915ef7575 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,28 @@ +cmake_minimum_required(VERSION 3.23) +project(modbus) + +if(NOT TARGET ${PROJECT_NAME}) + message(STATUS "Running ./autogen.sh") + execute_process(COMMAND ./autogen.sh + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + RESULT_VARIABLE AUTOGEN_RESULT) + + if(NOT AUTOGEN_RESULT EQUAL "0") + message(FATAL_ERROR "autogen.sh failed") + endif() + + message(STATUS "Running ./configure --host=${CMAKE_SYSTEM_PROCESSOR}") + execute_process(COMMAND ./configure --host=${CMAKE_SYSTEM_PROCESSOR} + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + RESULT_VARIABLE CONFIGURE_RESULT) + + if(NOT CONFIGURE_RESULT EQUAL "0") + message(FATAL_ERROR "configure failed") + endif() + + add_library(${PROJECT_NAME}) + + target_sources(${PROJECT_NAME} PRIVATE FILE_SET configuration TYPE HEADERS FILES config.h) + target_sources(${PROJECT_NAME} PUBLIC FILE_SET public_headers TYPE HEADERS FILES src/modbus.h src/modbus-rtu.h src/modbus-tcp.h src/modbus-version.h) + target_sources(${PROJECT_NAME} PRIVATE src/modbus.c src/modbus-data.c src/modbus-rtu.c src/modbus-tcp.c) +endif()