diff --git a/CMakeLists.txt b/CMakeLists.txt index d872a3bd..adc3b6ce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ project(machinarium) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -g") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -g -fPIC") if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2") @@ -18,9 +18,12 @@ endif() include_directories("${PROJECT_SOURCE_DIR}/src") include_directories("${PROJECT_BINARY_DIR}/src") +add_custom_target(build_libs) set(mm_libraries "") -find_package(LIBUV) +# machinarium +include(BuildLIBUV) +build_libuv() set(mm_libraries ${mm_libraries} ${LIBUV_LIBRARIES}) include_directories(${LIBUV_INCLUDE_DIRS}) diff --git a/cmake/BuildLIBUV.cmake b/cmake/BuildLIBUV.cmake new file mode 100644 index 00000000..b765abe6 --- /dev/null +++ b/cmake/BuildLIBUV.cmake @@ -0,0 +1,31 @@ + +macro(build_libuv) + set(LIBUV_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/lib/libuv/include) + set(LIBUV_OPTS CFLAGS="${CMAKE_C_FLAGS}" LDFLAGS="${CMAKE_STATIC_LINKER_FLAGS}") + separate_arguments(LIBUV_OPTS) + if (${PROJECT_BINARY_DIR} STREQUAL ${PROJECT_SOURCE_DIR}) + add_custom_command( + OUTPUT ${PROJECT_BINARY_DIR}/lib/libuv/.libs/libuv${CMAKE_STATIC_LIBRARY_SUFFIX} + COMMAND ./autogen.sh + COMMAND ./configure + COMMAND ${CMAKE_MAKE_PROGRAM} ${LIBUV_OPTS} -C ${PROJECT_BINARY_DIR}/lib/libuv + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/lib/libuv + ) + else() + add_custom_command( + OUTPUT ${PROJECT_BINARY_DIR}/lib/libuv/.libs/libuv${CMAKE_STATIC_LIBRARY_SUFFIX} + COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/lib/libuv + COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/lib/libuv ${PROJECT_BINARY_DIR}/lib/libuv + COMMAND cd ${PROJECT_BINARY_DIR}/lib/libuv && ./autogen.sh + COMMAND cd ${PROJECT_BINARY_DIR}/lib/libuv && ./configure + COMMAND ${CMAKE_MAKE_PROGRAM} ${LIBUV_OPTS} -C ${PROJECT_BINARY_DIR}/lib/libuv + ) + endif() + add_custom_target(libuv ALL + DEPENDS ${PROJECT_BINARY_DIR}/lib/libuv/.libs/libuv${CMAKE_STATIC_LIBRARY_SUFFIX} + ) + message(STATUS "Use shipped libuv: ${PROJECT_SOURCE_DIR}/lib/libuv") + set (LIBUV_LIBRARIES "${PROJECT_BINARY_DIR}/lib/libuv/.libs/libuv${CMAKE_STATIC_LIBRARY_SUFFIX}") + set (LIBUV_FOUND 1) + add_dependencies(build_libs libuv) +endmacro(build_libuv)