--- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -370,6 +370,10 @@ ${SDL2_SOURCE_DIR}/src/video/*.c ${SDL2_SOURCE_DIR}/src/video/yuv2rgb/*.c) +if(IOS) + set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/render/metal/SDL_render_metal.m) +endif() + if(ASSERTIONS STREQUAL "auto") # Do nada - use optimization settings to determine the assertion level @@ -637,6 +641,10 @@ # endif() endif() +if(NOT IOS) + list(APPEND EXTRA_LIBS SDL2main) +endif() + # TODO: Can't deactivate on FreeBSD? w/o LIBC, SDL_stdinc.h can't define # anything. if(LIBC) @@ -744,8 +752,13 @@ endif() endforeach() if(SDL_JOYSTICK) - file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/*.c) + set(SDL_JOYSTICK_HIDAPI 1) + file(GLOB JOYSTICK_SOURCES + ${SDL2_SOURCE_DIR}/src/joystick/*.c + ${SDL2_SOURCE_DIR}/src/joystick/hidapi/*.c) set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES}) + add_subdirectory(src/hidapi) + list(APPEND EXTRA_LIBS hidapi) endif() if(SDL_HAPTIC) if(NOT SDL_JOYSTICK) @@ -757,7 +770,10 @@ endif() if(SDL_SENSOR) file(GLOB SENSOR_SOURCES ${SDL2_SOURCE_DIR}/src/sensor/*.c) - set(SOURCE_FILES ${SOURCE_FILES} ${SENSOR_SOURCES}) + if(IOS) + file(GLOB EXTRA_SENSOR_SOURCES ${SDL2_SOURCE_DIR}/src/sensor/coremotion/*.m) + endif() + set(SOURCE_FILES ${SOURCE_FILES} ${SENSOR_SOURCES} ${EXTRA_SENSOR_SOURCES}) endif() if(SDL_POWER) file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/*.c) @@ -1482,7 +1498,7 @@ find_library(IOKIT IOKit) list(APPEND EXTRA_LIBS ${IOKIT}) endif() - if(SDL_FRAMEWORK_FF) + if(SDL_FRAMEWORK_FF AND NOT IOS) find_library(FORCEFEEDBACK ForceFeedback) list(APPEND EXTRA_LIBS ${FORCEFEEDBACK}) endif() @@ -1621,8 +1637,18 @@ # endif() # endif() -configure_file("${SDL2_SOURCE_DIR}/include/SDL_config.h.cmake" - "${SDL2_BINARY_DIR}/include/SDL_config.h") +# Since check_function_exists isn't working properly on iOS, +# the auto-generated SDL_config.h falsely determines several +# functions exist when they actually don't. As a workaround, +# use the pre-generated header instead. +if(IOS) + configure_file("${SDL2_SOURCE_DIR}/include/SDL_config_iphoneos.h" + "${SDL2_BINARY_DIR}/include/SDL_config.h" + ) +else() + configure_file("${SDL2_SOURCE_DIR}/include/SDL_config.h.cmake" + "${SDL2_BINARY_DIR}/include/SDL_config.h") +endif() # Prepare the flags and remove duplicates if(EXTRA_LDFLAGS) @@ -1734,8 +1760,25 @@ add_library(SDL2main STATIC ${SDLMAIN_SOURCES}) target_include_directories(SDL2main PUBLIC "$" $) set(_INSTALL_LIBS "SDL2main") -if (NOT ANDROID) - set_target_properties(SDL2main PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX}) +set_target_properties(SDL2main PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX}) + +if(IOS) + set(IOS_FRAMEWORKS + "-framework AudioToolbox" + "-framework AVFoundation" + "-framework CoreAudio" + "-framework CoreBluetooth" + "-framework CoreGraphics" + "-framework CoreMotion" + "-framework CoreVideo" + "-framework Foundation" + "-framework GameController" + "-framework IOKit" + "-framework Metal" + "-framework OpenGLES" + "-framework QuartzCore" + "-framework UIKit" + ) endif() if(SDL_SHARED) @@ -1764,8 +1807,9 @@ set(_INSTALL_LIBS "SDL2" ${_INSTALL_LIBS}) target_link_libraries(SDL2 ${EXTRA_LIBS} ${EXTRA_LDFLAGS}) target_include_directories(SDL2 PUBLIC "$" $) - if (NOT ANDROID) - set_target_properties(SDL2 PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX}) + set_target_properties(SDL2 PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX}) + if(IOS) + target_link_libraries(SDL2 ${IOS_FRAMEWORKS}) endif() endif() @@ -1790,8 +1834,9 @@ set(_INSTALL_LIBS "SDL2-static" ${_INSTALL_LIBS}) target_link_libraries(SDL2-static ${EXTRA_LIBS} ${EXTRA_LDFLAGS}) target_include_directories(SDL2-static PUBLIC "$" $) - if (NOT ANDROID) - set_target_properties(SDL2-static PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX}) + set_target_properties(SDL2-static PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX}) + if(IOS) + target_link_libraries(SDL2-static ${IOS_FRAMEWORKS}) endif() endif()