cmake_minimum_required(VERSION 2.8) project(OIS) set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CmakeModules) set(CMAKE_CXX_STANDARD 11) if(NOT CMAKE_DEBUG_POSTFIX) set(CMAKE_DEBUG_POSTFIX "_d") endif() set(OIS_MAJOR_VERSION 1) set(OIS_MINOR_VERSION 5) set(OIS_PATCH_VERSION 1) set(OIS_VERSION ${OIS_MAJOR_VERSION}.${OIS_MINOR_VERSION}.${OIS_PATCH_VERSION}) set(OIS_COMPATIBILITY_VERSION ${OIS_MAJOR_VERSION}.${OIS_MINOR_VERSION}.0) set(OIS_SOVERSION ${OIS_MAJOR_VERSION}.${OIS_MINOR_VERSION}.0) set(OIS_LIBRARY_NAME OIS) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/includes/OISPrereqs.h.in ${CMAKE_CURRENT_SOURCE_DIR}/includes/OISPrereqs.h @ONLY) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE) endif() option(OIS_BUILD_SHARED_LIBS "Build shared libraries" ON) option(OIS_BUILD_DEMOS "Build demo applications" ON) set(CMAKE_MACOSX_RPATH 0) include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/includes ${CMAKE_CURRENT_SOURCE_DIR}/includes/linux ${CMAKE_CURRENT_SOURCE_DIR}/includes/SDL ${CMAKE_CURRENT_SOURCE_DIR}/includes/iphone ${CMAKE_CURRENT_SOURCE_DIR}/includes/mac ${CMAKE_CURRENT_SOURCE_DIR}/includes/win32 ) set(ois_source ${ois_source} "${CMAKE_CURRENT_SOURCE_DIR}/src/OISInputManager.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/OISObject.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/OISEffect.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/OISJoyStick.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/OISKeyboard.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/OISForceFeedback.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/OISException.cpp" ) set(BUILD_SHARED_LIBS ${OIS_BUILD_SHARED_LIBS}) if (UNIX AND NOT APPLE) find_package(X11 REQUIRED) include_directories(SYSTEM ${X11_INCLUDE_DIR}) set(ois_source ${ois_source} "${CMAKE_CURRENT_SOURCE_DIR}/src/linux/EventHelpers.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/linux/LinuxForceFeedback.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/linux/LinuxInputManager.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/linux/LinuxJoyStickEvents.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/linux/LinuxKeyboard.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/linux/LinuxMouse.cpp" ) endif() if (WIN32) option(OIS_WIN32_XINPUT_SUPPORT "Add support XInput." ON) if ("${CMAKE_CXX_PLATFORM_ID}" STREQUAL "MinGW") # Directly specify the MinGW DirectX library paths set(DINPUT8_LIBRARY "$ENV{MSYSTEM_PREFIX}/lib/libdinput8.a") set(XINPUT8_LIBRARY "$ENV{MSYSTEM_PREFIX}/lib/libxinput.a") set(DXGUID_LIBRARY "$ENV{MSYSTEM_PREFIX}/lib/libdxguid.a") if (NOT EXISTS ${DINPUT8_LIBRARY}) MESSAGE(FATAL_ERROR "Could not locate dinput8 DirectX library") endif() if (NOT EXISTS ${XINPUT8_LIBRARY}) MESSAGE(FATAL_ERROR "Could not locate xinput DirectX library") endif() if (NOT EXISTS ${DXGUID_LIBRARY}) MESSAGE(FATAL_ERROR "Could not locate dxguid DirectX library") endif() MESSAGE(STATUS "Using ${DINPUT8_LIBRARY}, ${XINPUT8_LIBRARY} and ${DXGUID_LIBRARY}") if(BUILD_SHARED_LIBS) add_definitions(-DOIS_DYNAMIC_LIB) endif() else() # Existing code for non-MinGW platforms if(CMAKE_CROSSCOMPILING) MESSAGE(STATUS "Cross-compiling ... search libraries instead of WindowsSDK") find_library(DINPUT8_LIBRARY NAMES libdinput8.a dinput8.lib) find_library(XINPUT8_LIBRARY NAMES libxinput.a) find_library(DXGUID_LIBRARY NAMES libdxguid.a) if (NOT DINPUT8_LIBRARY) MESSAGE(FATAL_ERROR "Could not locate dinput8 DirectX library") endif() if (NOT XINPUT8_LIBRARY) MESSAGE(FATAL_ERROR "Could not locate xinput DirectX library") endif() if (NOT DXGUID_LIBRARY) MESSAGE(FATAL_ERROR "Could not locate dxguid DirectX library") endif() MESSAGE(STATUS "Using ${DINPUT8_LIBRARY}, ${XINPUT8_LIBRARY} and ${DXGUID_LIBRARY}") else() find_package(WindowsSDK) if(WINDOWSSDK_FOUND) set(OIS_WIN32_DXSDK_DIR ${WINDOWSSDK_PREFERRED_DIR} CACHE PATH "Location of the DirectX SDK on your system.") else() set(OIS_WIN32_DXSDK_DIR "$ENV{DXSDK_DIR}" CACHE PATH "Location of the DirectX SDK on your system.") endif() if("${OIS_WIN32_DXSDK_DIR}" STREQUAL "") MESSAGE(FATAL_ERROR "Could not locate DirectX SDK on this system") else() MESSAGE(STATUS "Found DirectX SDK at ${OIS_WIN32_DXSDK_DIR}") endif() include_directories("${OIS_WIN32_DXSDK_DIR}/Include") endif() endif() if(BUILD_SHARED_LIBS) add_definitions(-DOIS_DYNAMIC_LIB) endif() if(OIS_WIN32_XINPUT_SUPPORT) add_definitions(-DOIS_WIN32_XINPUT_SUPPORT) endif() set(ois_source ${ois_source} "${CMAKE_CURRENT_SOURCE_DIR}/src/win32/Win32ForceFeedback.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/win32/Win32InputManager.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/win32/Win32JoyStick.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/win32/Win32KeyBoard.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/win32/Win32Mouse.cpp" ) endif() if (APPLE) set(CMAKE_MACOSX_RPATH 1) find_library(COCOA_LIBRARY Cocoa) find_library(FOUNDATION_LIBRARY Foundation) find_library(IOKIT_LIBRARY IOKit) find_path(COCOA_INCLUDE_DIR Cocoa/Cocoa.h) find_library(CARBON_LIBRARY Carbon) add_definitions(-x objective-c++) include_directories(SYSTEM ${COCOA_INCLUDE_DIR}) set(ois_source ${ois_source} "${CMAKE_CURRENT_SOURCE_DIR}/src/mac/MacHelpers.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/mac/MacHIDManager.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/mac/MacInputManager.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/mac/MacJoyStick.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/mac/MacKeyboard.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/mac/MacMouse.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/mac/CocoaInputManager.mm" "${CMAKE_CURRENT_SOURCE_DIR}/src/mac/CocoaJoyStick.mm" "${CMAKE_CURRENT_SOURCE_DIR}/src/mac/CocoaKeyboard.mm" "${CMAKE_CURRENT_SOURCE_DIR}/src/mac/CocoaMouse.mm" ) endif() source_group("OIS" FILES ${ois_source}) add_library(OIS ${ois_source}) # This is neccessary to get the dll import/export to work without modifying the # source to use cmake's method of setting the dll import/export definitions if (WIN32) SET_TARGET_PROPERTIES(OIS PROPERTIES COMPILE_FLAGS "-DOIS_NONCLIENT_BUILD") endif() set_target_properties(OIS PROPERTIES SOLUTION_FOLDER "libOIS") if (APPLE) target_link_libraries(OIS ${COCOA_LIBRARY}) target_link_libraries(OIS ${IOKIT_LIBRARY}) target_link_libraries(OIS ${FOUNDATION_LIBRARY}) endif() if (WIN32) if ("${CMAKE_CXX_PLATFORM_ID}" STREQUAL "MinGW") # Directly specify the MinGW DirectX library paths link_directories("$ENV{MSYSTEM_PREFIX}/lib") target_link_libraries(OIS "$ENV{MSYSTEM_PREFIX}/lib/libdinput8.a" "$ENV{MSYSTEM_PREFIX}/lib/libxinput.a" "$ENV{MSYSTEM_PREFIX}/lib/libdxguid.a") else() if (CMAKE_CL_64) set(DIRECTX_ARCH x64) else() set(DIRECTX_ARCH x86) endif() if (WINDOWSSDK_FOUND) target_link_libraries(OIS "dinput8.lib" "dxguid.lib") elseif(CMAKE_CROSSCOMPILING) target_link_libraries(OIS "${DINPUT8_LIBRARY}" "${XINPUT8_LIBRARY}" "${DXGUID_LIBRARY}") else() target_link_libraries(OIS "${DXSDK_DIR}/Lib/${DIRECTX_ARCH}/dinput8.lib" "${DXSDK_DIR}/Lib/${DIRECTX_ARCH}/dxguid.lib") endif() endif() endif() if(UNIX) if (NOT APPLE) add_dependencies(OIS X11) target_link_libraries(OIS X11) endif() set_target_properties(OIS PROPERTIES VERSION ${OIS_VERSION} SOVERSION ${OIS_SOVERSION} ) endif() if (OIS_BUILD_DEMOS) source_group("ConsoleApp" FILES "${CMAKE_CURRENT_SOURCE_DIR}/demos/OISConsoleDemo/OISConsole.cpp") include_directories(${CMAKE_CURRENT_SOURCE_DIR}/includes) if (WIN32) add_executable(ConsoleApp "${CMAKE_CURRENT_SOURCE_DIR}/demos/OISConsoleDemo/OISConsole.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/demos/OISConsoleDemo/CommandLine.rc") else() add_executable(ConsoleApp "${CMAKE_CURRENT_SOURCE_DIR}/demos/OISConsoleDemo/OISConsole.cpp") endif() set_target_properties(ConsoleApp PROPERTIES SOLUTION_FOLDER "OIS Console Demo") add_dependencies(ConsoleApp OIS) target_link_libraries(ConsoleApp "OIS") if (APPLE) target_link_libraries(ConsoleApp ${CARBON_LIBRARY}) endif() source_group("FFConsoleApp" FILES "${CMAKE_CURRENT_SOURCE_DIR}/demos/FFConsoleDemo/FFConsoleDemo.cpp") include_directories(${CMAKE_CURRENT_SOURCE_DIR}/includes) if (WIN32) add_executable(FFConsoleApp "${CMAKE_CURRENT_SOURCE_DIR}/demos/FFConsoleDemo/FFConsoleDemo.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/demos/FFConsoleDemo/FF.rc") else() add_executable(FFConsoleApp "${CMAKE_CURRENT_SOURCE_DIR}/demos/FFConsoleDemo/FFConsoleDemo.cpp") endif() set_target_properties(FFConsoleApp PROPERTIES SOLUTION_FOLDER "OIS FF Console Demo") add_dependencies(FFConsoleApp OIS) target_link_libraries(FFConsoleApp "OIS") if (APPLE) target_link_libraries(FFConsoleApp ${CARBON_LIBRARY}) endif() endif() if(UNIX) include(GNUInstallDirs) set(LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}) else() set(LIB_INSTALL_DIR "lib") endif() set(OIS_LIB_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}) file(GLOB PUBLIC_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/includes/*.h") install(FILES ${PUBLIC_HEADERS} DESTINATION include/ois ) install(TARGETS OIS RUNTIME DESTINATION bin LIBRARY DESTINATION ${LIB_INSTALL_DIR} ARCHIVE DESTINATION ${LIB_INSTALL_DIR} FRAMEWORK DESTINATION Library/Frameworks ) if(MSVC AND BUILD_SHARED_LIBS) install(FILES $ DESTINATION bin OPTIONAL) endif(MSVC AND BUILD_SHARED_LIBS) if(UNIX) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/OIS.pc.in ${CMAKE_BINARY_DIR}/OIS.pc @ONLY) install(FILES ${CMAKE_BINARY_DIR}/OIS.pc DESTINATION ${OIS_LIB_DIRECTORY}/pkgconfig) endif()