XInputSimulator/XInputSimulator/CMakeLists.txt

94 lines
3.5 KiB
CMake
Executable File

cmake_minimum_required(VERSION 2.8.4)
project(XInputSimulator)
set(PROJECT_VERSION 0.1)
option(WITH_PIC "Compile static library as position-independent code" OFF) # Shared library is always PIC
option(BUILD_STATIC_LIBS "Build the static library" ON)
option(BUILD_SHARED_LIBS "Build the shared library" ON)
option(BUILD_MACOS_FATLIB "Build Fat library for both i386 and x86_64 on macOS" ON)
option(BUILD_MANUAL_TEST "Build the test application" ON)
if(BUILD_MACOS_FATLIB)
if (CMAKE_OSX_ARCHITECTURES)
message(FATAL_ERROR "User supplied -DCMAKE_OSX_ARCHITECTURES overrides BUILD_MACOS_FATLIB=ON")
else()
SET(CMAKE_OSX_ARCHITECTURES "x86_64;i386")
endif()
endif()
# Linux
if(UNIX AND NOT APPLE)
find_library(X_11 X11)
find_library(X_TST Xtst)
set(EXTRA_LIBS ${X_11} ${X_TST})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# Not nice, but I don't know how to have CMake generate all dependencies
# One could run ldd(1) on the .so and extract all deps...
set(PKG_CONFIG_EXTRA_LIBS "-lX11 -lXtst -lXext -lxcb -lXau -pthread -lXdmcp -lrt")
set(PLATFORM_SOURCE_FILES xinputsimulatorimpllinux.cpp xinputsimulatorimpllinux.h)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
endif(UNIX AND NOT APPLE)
# Apple
if(APPLE)
find_library(CARBON Carbon)
find_library(CORE_FOUNDATION CoreFoundation)
set(EXTRA_LIBS ${CARBON} ${CORE_FOUNDATION})
set(PKG_CONFIG_EXTRA_LIBS "-framework CoreFoundation -framework Carbon")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(PLATFORM_SOURCE_FILES xinputsimulatorimplmacos.cpp xinputsimulatorimplmacos.h)
set(CMAKE_MACOSX_RPATH ON)
endif(APPLE)
# Windows
if(WIN32)
#find_library(USER_32 User32.Lib)
#set(EXTRA_LIBS ${USER_32})
set(PLATFORM_SOURCE_FILES xinputsimulatorimplwin.cpp xinputsimulatorimplwin.h)
endif(WIN32)
set(SOURCE_FILES
notimplementedexception.cpp
xinputsimulator.cpp
xinputsimulator.h
xinputsimulatorimpl.cpp
xinputsimulatorimpl.h
${PLATFORM_SOURCE_FILES})
link_libraries(${EXTRA_LIBS} )
configure_file(XInputSimulator.pc.in XInputSimulator.pc @ONLY)
if (BUILD_SHARED_LIBS)
add_library(XInputSimulator SHARED ${SOURCE_FILES})
set_property(TARGET XInputSimulator PROPERTY POSITION_INDEPENDENT_CODE ON)
endif()
if (BUILD_STATIC_LIBS)
add_library(XInputSimulator_static STATIC ${SOURCE_FILES})
if (WITH_PIC)
set_property(TARGET XInputSimulator_static PROPERTY POSITION_INDEPENDENT_CODE ON)
endif()
if(NOT WIN32) # Keep lib*.(a|dll) name, but avoid *.lib files overwriting each other on Windows
set_target_properties(XInputSimulator_static PROPERTIES OUTPUT_NAME XInputSimulator)
endif()
endif()
IF (NOT (BUILD_STATIC_LIBS OR BUILD_SHARED_LIBS))
MESSAGE(FATAL_ERROR "Both -DBUILD_SHARED_LIBS=OFF and -DBUILD_STATIC_LIBS=OFF supplied. Nothing to do...")
ENDIF()
if (BUILD_MANUAL_TEST)
add_executable(XInputSimulator_bin main.cpp)
target_link_libraries(XInputSimulator_bin XInputSimulator)
set_target_properties(XInputSimulator_bin PROPERTIES OUTPUT_NAME "XInputSimulator")
endif()
install(FILES ${CMAKE_BINARY_DIR}/XInputSimulator.pc DESTINATION lib/pkgconfig)
install(TARGETS XInputSimulator XInputSimulator_static
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
install(FILES xinputsimulator.h DESTINATION include)