# Copyright 2013 Douglas Linder # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # We have configure style deps, sadly. include(ExternalProject) # Archive names set(SDL "SDL-2.0.3-8615") set(SDL_IMG "SDL2_image-2.0.0") set(SDL_MIXER "SDL2_mixer-2.0.0") set(SDL_TTF "SDL2_ttf-2.0.12") set(SDL_GPU "SDL_gpu") set(FREETYPE "freetype-2.5.0.1") set(OGG "libogg-1.3.1") set(VORBIS "libvorbis-1.3.3") # Decompress archives if(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/src) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src) execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf ${CMAKE_CURRENT_LIST_DIR}/deps/${SDL}.tar.gz WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src) execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf ${CMAKE_CURRENT_LIST_DIR}/deps/${SDL_TTF}.tar.gz WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src) execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf ${CMAKE_CURRENT_LIST_DIR}/deps/${SDL_IMG}.tar.gz WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src) execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf ${CMAKE_CURRENT_LIST_DIR}/deps/${SDL_MIXER}.tar.gz WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src) execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf ${CMAKE_CURRENT_LIST_DIR}/deps/${SDL_GPU}.tar.gz WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src) execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf ${CMAKE_CURRENT_LIST_DIR}/deps/${FREETYPE}.tar.gz WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src) execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf ${CMAKE_CURRENT_LIST_DIR}/deps/${OGG}.tar.gz WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src) execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf ${CMAKE_CURRENT_LIST_DIR}/deps/${VORBIS}.tar.gz WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src) endif() # SDL supports cmake, but we have to do this because the sublibs don't. set(SRC ${CMAKE_CURRENT_BINARY_DIR}/src/${SDL}) ExternalProject_Add( sdl_autofail SOURCE_DIR ${SRC} INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} CONFIGURE_COMMAND ${SRC}/configure --prefix=${CMAKE_CURRENT_BINARY_DIR} BUILD_COMMAND ${MAKE} ) add_library(sdl UNKNOWN IMPORTED) set_property(TARGET sdl PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/lib/libSDL2.a) add_dependencies(sdl sdl_autofail) # SDL_gpu is clever and understands cmake # ...but because nothing else does, we actually build it as an external library # There's probably a much better way of doing this, but the cmake configure step # for SDL_gpu requires SDL itself to *already* be build, which is troublesom. set(SRC ${CMAKE_CURRENT_BINARY_DIR}/src/${SDL_GPU}) set(SDL2_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/include/SDL2") set(SDL2_LIBRARY "${CMAKE_CURRENT_BINARY_DIR}/lib/libSDL2.a") set(SDL2MAIN_LIBRARY "${CMAKE_CURRENT_BINARY_DIR}/lib/libSDL2main.a") set(SDL_GPU_LIB "${CMAKE_CURRENT_BINARY_DIR}/sdl_gpu_autofail-prefix/src/sdl_gpu_autofail-build/SDL_gpu/libSDL2_gpu.a") set(SDL_GPU_HEADER "${CMAKE_CURRENT_BINARY_DIR}/src/SDL_gpu/SDL_gpu/SDL_gpu.h") ExternalProject_Add( sdl_gpu_autofail SOURCE_DIR ${SRC} INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} CONFIGURE_COMMAND ${CMAKE_COMMAND} ${SRC} -DSDL_gpu_USE_SDL2=True -DSDL_gpu_BUILD_SHARED=False -DSDL_gpu_BUILD_DEMOS=False -DSDL_gpu_BUILD_TOOLS=False -DSDL2MAIN_LIBRARY=${SDL2MAIN_LIBRARY} -DSDL_gpu_BUILD_DEBUG=False -DSDL2_LIBRARY=${SDL2_LIBRARY} -DSDL2_INCLUDE_DIR=${SDL2_INCLUDE_DIR} -DSDL_gpu_INSTALL=False BUILD_COMMAND ${MAKE} INSTALL_COMMAND ${CMAKE_COMMAND} -E copy ${SDL_GPU_LIB} ${CMAKE_CURRENT_BINARY_DIR}/lib COMMAND ${CMAKE_COMMAND} -E copy ${SDL_GPU_HEADER} ${CMAKE_CURRENT_BINARY_DIR}/include/SDL2 ) add_library(sdl_gpu UNKNOWN IMPORTED) set_property(TARGET sdl_gpu PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/lib/libSDL2_gpu.a) add_dependencies(sdl_gpu sdl_gpu_autofail) add_dependencies(sdl_gpu_autofail sdl) # ogg set(SRC ${CMAKE_CURRENT_BINARY_DIR}/src/${OGG}) ExternalProject_Add( ogg_autofail SOURCE_DIR ${SRC} INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} CONFIGURE_COMMAND ${SRC}/configure --prefix=${CMAKE_CURRENT_BINARY_DIR} BUILD_COMMAND ${MAKE} ) add_library(ogg UNKNOWN IMPORTED) set_property(TARGET ogg PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/lib/libogg.a) add_dependencies(ogg ogg_autofail) # vorbis set(SRC ${CMAKE_CURRENT_BINARY_DIR}/src/${VORBIS}) ExternalProject_Add( vorbis_autofail SOURCE_DIR ${SRC} INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} CONFIGURE_COMMAND ${SRC}/configure --prefix=${CMAKE_CURRENT_BINARY_DIR} --with-ogg=${CMAKE_CURRENT_BINARY_DIR} BUILD_COMMAND ${MAKE} ) add_library(vorbis UNKNOWN IMPORTED) set_property(TARGET vorbis PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/lib/libvorbis.a) add_dependencies(vorbis vorbis_autofail) add_dependencies(vorbis_autofail ogg) # Freetype set(SRC ${CMAKE_CURRENT_BINARY_DIR}/src/${FREETYPE}) ExternalProject_Add( freetype_autofail SOURCE_DIR ${SRC} INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} CONFIGURE_COMMAND ${SRC}/configure --prefix=${CMAKE_CURRENT_BINARY_DIR} --without-zlib --without-png --without-bzip2 BUILD_COMMAND ${MAKE} ) add_library(freetype UNKNOWN IMPORTED) set_property(TARGET freetype PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/lib/libfreetype.a) add_dependencies(freetype freetype_autofail) # SDL TTF set(SRC ${CMAKE_CURRENT_BINARY_DIR}/src/${SDL_TTF}) ExternalProject_Add( sdl_ttf_autofail SOURCE_DIR ${SRC} INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} CONFIGURE_COMMAND ${SRC}/configure --prefix=${CMAKE_CURRENT_BINARY_DIR} --with-sdl-prefix=${CMAKE_CURRENT_BINARY_DIR} --with-freetype-prefix=${CMAKE_CURRENT_BINARY_DIR} BUILD_COMMAND ${MAKE} ) add_library(sdl_ttf UNKNOWN IMPORTED) set_property(TARGET sdl_ttf PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/lib/libSDL2_ttf.a) add_dependencies(sdl_ttf sdl_ttf_autofail) add_dependencies(sdl_ttf_autofail sdl freetype) # SDL Image set(SRC ${CMAKE_CURRENT_BINARY_DIR}/src/${SDL_IMG}) ExternalProject_Add( sdl_img_autofail SOURCE_DIR ${SRC} INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} CONFIGURE_COMMAND ${SRC}/configure --prefix=${CMAKE_CURRENT_BINARY_DIR} --with-sdl-prefix=${CMAKE_CURRENT_BINARY_DIR} BUILD_COMMAND ${MAKE} ) add_library(sdl_img UNKNOWN IMPORTED) set_property(TARGET sdl_img PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/lib/libSDL2_image.a) add_dependencies(sdl_img sdl_img_autofail) add_dependencies(sdl_img_autofail sdl) # SDL mixer set(SRC ${CMAKE_CURRENT_BINARY_DIR}/src/${SDL_MIXER}) ExternalProject_Add( sdl_mixer_autofail SOURCE_DIR ${SRC} INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} CONFIGURE_COMMAND ${SRC}/configure --prefix=${CMAKE_CURRENT_BINARY_DIR} --with-sdl-prefix=${CMAKE_CURRENT_BINARY_DIR} --enable-music-ogg-shared=no BUILD_COMMAND ${MAKE} ) add_library(sdl_mixer UNKNOWN IMPORTED) set_property(TARGET sdl_mixer PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/lib/libSDL2_mixer.a) add_dependencies(sdl_mixer sdl_mixer_autofail) add_dependencies(sdl_mixer_autofail sdl) add_dependencies(sdl_mixer_autofail vorbis) if(APPLE) FIND_LIBRARY(AT_LIBRARY AudioToolbox) set(EXTRA_LIBS ${EXTRA_LIBS} ${AT_LIBRARY}) endif()