Mercurial > almixer_isolated
diff CMakeLists.txt @ 3:a929285e1db0
Added CMake build system.
There are problems with the SDL_sound module due to changes in CMake. Right now they just seem to be warnings, but I am unable to suppress them.
Added license.
Added README.
author | Eric Wing <ewing . public |-at-| gmail . com> |
---|---|
date | Wed, 27 Oct 2010 20:43:14 -0700 |
parents | |
children | 26aec5629f68 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CMakeLists.txt Wed Oct 27 20:43:14 2010 -0700 @@ -0,0 +1,261 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.4) +# These are all useless <sigh> +cmake_policy(SET CMP0000 OLD) +cmake_policy(SET CMP0004 OLD) + +PROJECT(ALmixer) + +INCLUDE(CMakeDependentOption) +SET(CPACK_SET_DESTDIR TRUE) +INCLUDE(CPack) +FIND_PACKAGE(OpenAL) +FIND_PACKAGE(SDL) +# Note: SDL_sound needs to be updated for 2.6+. You'll get annoying warnings. +FIND_PACKAGE(SDL_sound) + + + +SET(ALMIXER_MAJOR_VERSION 0) +SET(ALMIXER_MINOR_VERSION 1) +SET(ALMIXER_PATCH_VERSION 0) + +SET(ALMIXER_VERSION ${ALMIXER_MAJOR_VERSION}.${ALMIXER_MINOR_VERSION}.${ALMIXER_PATCH_VERSION}) +SET(ALMIXER_COMPATIBILITY_VERSION ${ALMIXER_MAJOR_VERSION}.${ALMIXER_MINOR_VERSION}.0) +# ??? Don't know +SET(ALMIXER_SOVERSION ${ALMIXER_MAJOR_VERSION}.${ALMIXER_MINOR_VERSION}.0) + + +OPTION(WANTS_BUILD_SHARED_LIBRARY "Set to ON to build dynamic library." ON) +#OPTION(ALMIXER_COMPILE_WITHOUT_SDL "Not supported. Don't use" OFF) +OPTION(ENABLE_ALMIXER_THREADS "Use background thread for ALmixer_Update()" OFF) + +IF(APPLE) + CMAKE_DEPENDENT_OPTION(WANTS_BUILD_FRAMEWORK "Set to ON to build framework instead of dylib. Only valid if BUILD_SHARED_LIBRARY is ON an is OS X." ON "WANTS_BUILD_SHARED_LIBRARY" ON) +ENDIF(APPLE) + +SET(ALMIXER_LIBRARY_NAME ALmixer) +IF(APPLE) + SET(CMAKE_FRAMEWORK_INSTALL_DIR "/Library/Frameworks" CACHE STRING "Directory to install frameworks to.") + SET(CMAKE_FRAMEWORK_INSTALL_NAME_DIR "@executable_path/../Frameworks" CACHE STRING "install_name path for framework.") + #SET(CMAKE_DYLIB_INSTALL_NAME_DIR "" CACHE STRING "install_name path for dylib.") + SET(CMAKE_DYLIB_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE STRING "install_name path for dylib.") + SET(ALMIXER_FRAMEWORK_NAME "${ALMIXER_LIBRARY_NAME}.framework") + SET(ALMIXER_FRAMEWORK_VERSION_NUMBER "A") + SET(ALMIXER_FRAMEWORK_VERSIONED_EXECUTABLE_DIR "Versions/${ALMIXER_FRAMEWORK_VERSION_NUMBER}/MacOS") + SET(ALMIXER_FRAMEWORK_VERSIONED_LIB_DIR "Versions/${ALMIXER_FRAMEWORK_VERSION_NUMBER}/lib") + SET(ALMIXER_FRAMEWORK_CURRENT_EXECUTABLE_DIR "Versions/Current/MacOS") + + # For Apple install_name, is it better to detect if Xcode vs Makefile? + # Xcode default=1, Makefile=0? Or detect if Framework vs. dylib, + # Framework=1, dylib=0? + OPTION(CMAKE_BUILD_WITH_INSTALL_RPATH "Set to YES to set the rpath or install_name on build instead of install." ON) + +ELSEIF(UNIX) + SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" CACHE STRING "rpaths separated by semicolons.") + OPTION(CMAKE_BUILD_WITH_INSTALL_RPATH "Set to YES to set the rpath or install_name on build instead of install." OFF) + +ENDIF(APPLE) + + + +SET(ALMIXER_SOURCE + ${ALmixer_SOURCE_DIR}/ALmixer.c + ${ALmixer_SOURCE_DIR}/CircularQueue.c + ${ALmixer_SOURCE_DIR}/CircularQueue.h +) + +SET(PUBLIC_HEADERS + ${ALmixer_SOURCE_DIR}/ALmixer.h +) + +#SET(RESOURCE_FILES +#) + +ADD_DEFINITIONS(-DALMIXER_BUILD_LIBRARY) +IF(ENABLE_ALMIXER_THREADS) + ADD_DEFINITIONS(-DENABLE_ALMIXER_THREADS) +ELSE(ENABLE_ALMIXER_THREADS) + REMOVE_DEFINITIONS(-DENABLE_ALMIXER_THREADS) +ENDIF(ENABLE_ALMIXER_THREADS) + + + +IF(WANTS_BUILD_SHARED_LIBRARY) + ADD_LIBRARY(ALMIXER_LIBRARY SHARED ${PUBLIC_HEADERS} ${ALMIXER_SOURCE} ${RESOURCE_FILES}) + SET_TARGET_PROPERTIES(ALMIXER_LIBRARY PROPERTIES OUTPUT_NAME "ALmixer") +ENDIF(WANTS_BUILD_SHARED_LIBRARY) + +# Set Dynamic Library and Framework properties +IF(WANTS_BUILD_SHARED_LIBRARY AND WANTS_BUILD_FRAMEWORK) + + SET_TARGET_PROPERTIES(ALMIXER_LIBRARY PROPERTIES + FRAMEWORK TRUE + FRAMEWORK_VERSION "${ALMIXER_FRAMEWORK_VERSION_NUMBER}" + # PRIVATE_HEADER "fooPrivate.h;fooBoth.h" + PUBLIC_HEADER "${PUBLIC_HEADERS}" + RESOURCE "${RESOURCE_FILES}" + # INSTALL_NAME_DIR ${CMAKE_FRAMEWORK_INSTALL_NAME_DIR} + # BUILD_WITH_INSTALL_RPATH ${CMAKE_BUILD_WITH_INSTALL_RPATH} + VERSION ${ALMIXER_VERSION} + SOVERSION ${ALMIXER_COMPATIBILITY_VERSION} +# COMPILE_FLAGS "${ALMIXER_C_FLAGS}" + ) + + # I moved the INSTALL_NAME_DIR to use SET_PROPERTY instead because + # SET_TARGET_PROPERTIES will fail if the variable is empty. + SET_PROPERTY(TARGET ALMIXER_LIBRARY PROPERTY INSTALL_NAME_DIR ${CMAKE_FRAMEWORK_INSTALL_NAME_DIR}) + SET_PROPERTY(TARGET ALMIXER_LIBRARY PROPERTY BUILD_WITH_INSTALL_RPATH NO) + # If the user deletes the install_name path, use the gcc default + # and disable the option completely. But CMake by default places + # the name of the library in the install_name if + # BUILD_WITH_INSTALL_RPATH is ON. So to avoid this, I need to + # disable the switch. + IF(CMAKE_FRAMEWORK_INSTALL_NAME_DIR) + # MESSAGE("got dir ${CMAKE_FRAMEWORK_INSTALL_NAME_DIR}") + SET_PROPERTY(TARGET ALMIXER_LIBRARY PROPERTY BUILD_WITH_INSTALL_RPATH ${CMAKE_BUILD_WITH_INSTALL_RPATH}) + + ELSE(CMAKE_FRAMEWORK_INSTALL_NAME_DIR) + # MESSAGE("no dir ${CMAKE_FRAMEWORK_INSTALL_NAME_DIR}") + SET_PROPERTY(TARGET ALMIXER_LIBRARY PROPERTY BUILD_WITH_INSTALL_RPATH NO) + + ENDIF(CMAKE_FRAMEWORK_INSTALL_NAME_DIR) + + + + # Short Version is the "marketing version". It is the version + # the user sees in an information panel. + SET(MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${ALMIXER_MAJOR_VERSION}.${ALMIXER_MINOR_VERSION}.${ALMIXER_PATCH_VERSION}") + # Bundle version is the version the OS looks at. + SET(MACOSX_FRAMEWORK_BUNDLE_VERSION "${ALMIXER_MAJOR_VERSION}.${ALMIXER_MINOR_VERSION}.${ALMIXER_PATCH_VERSION}") + SET(MACOSX_FRAMEWORK_IDENTIFIER "net.playcontrol.almixer") + +ELSEIF(WANTS_BUILD_SHARED_LIBRARY) + IF(APPLE) + SET_TARGET_PROPERTIES(ALMIXER_LIBRARY PROPERTIES + FRAMEWORK FALSE + # INSTALL_NAME_DIR ${CMAKE_DYLIB_INSTALL_NAME_DIR} + # BUILD_WITH_INSTALL_RPATH ${CMAKE_BUILD_WITH_INSTALL_RPATH} + VERSION ${ALMIXER_VERSION} + SOVERSION ${ALMIXER_COMPATIBILITY_VERSION} +# COMPILE_FLAGS "${ALMIXER_C_FLAGS}" + ) + # I moved the INSTALL_NAME_DIR to use SET_PROPERTY instead because + # SET_TARGET_PROPERTIES will fail if the variable is empty. + SET_PROPERTY(TARGET ALMIXER_LIBRARY PROPERTY INSTALL_NAME_DIR ${CMAKE_DYLIB_INSTALL_NAME_DIR}) + SET_PROPERTY(TARGET ALMIXER_LIBRARY PROPERTY BUILD_WITH_INSTALL_RPATH NO) + # If the user deletes the install_name path, use the gcc default + # and disable the option completely. But CMake by default places + # the name of the library in the install_name if + # BUILD_WITH_INSTALL_RPATH is ON. So to avoid this, I need to + # disable the switch. + IF(CMAKE_DYLIB_INSTALL_NAME_DIR) + SET_PROPERTY(TARGET ALMIXER_LIBRARY PROPERTY BUILD_WITH_INSTALL_RPATH ${CMAKE_BUILD_WITH_INSTALL_RPATH}) + ELSE(CMAKE_DYLIB_INSTALL_NAME_DIR) + SET_PROPERTY(TARGET ALMIXER_LIBRARY PROPERTY BUILD_WITH_INSTALL_RPATH OFF) + ENDIF(CMAKE_DYLIB_INSTALL_NAME_DIR) + + + + ELSEIF(UNIX) + SET_TARGET_PROPERTIES(ALMIXER_LIBRARY PROPERTIES + INSTALL_RPATH ${CMAKE_INSTALL_RPATH} + BUILD_WITH_INSTALL_RPATH ${CMAKE_BUILD_WITH_INSTALL_RPATH} + VERSION ${ALMIXER_VERSION} + SOVERSION ${ALMIXER_SOVERSION} +# COMPILE_FLAGS "${ALMIXER_C_FLAGS}" + ) + + ELSEIF(WIN32) + SET_TARGET_PROPERTIES(ALMIXER_LIBRARY PROPERTIES + VERSION ${ALMIXER_VERSION} + SOVERSION ${ALMIXER_COMPATIBILITY_VERSION} +# COMPILE_FLAGS "${ALMIXER_C_FLAGS} -DALMIXER_BUILD_AS_DLL" + ) + + ELSE(APPLE) + SET_TARGET_PROPERTIES(ALMIXER_LIBRARY PROPERTIES + VERSION ${ALMIXER_VERSION} + SOVERSION ${ALMIXER_COMPATIBILITY_VERSION} +# COMPILE_FLAGS "${ALMIXER_C_FLAGS}" + ) + + ENDIF(APPLE) + + +ENDIF(WANTS_BUILD_SHARED_LIBRARY AND WANTS_BUILD_FRAMEWORK) + +INCLUDE_DIRECTORIES(${OPENAL_INCLUDE_DIR} ${SDL_INCLUDE_DIR} ${SDL_SOUND_INCLUDE_DIR}) +#TARGET_LINK_LIBRARIES(ALMIXER_LIBRARY "${OPENAL_LIBRARY} ${SDL_LIBRARIES} ${SDL_SOUND_LIBRARIES}") +MESSAGE("SDL_libraries: ${SDL_LIBRARY}, ${SDL_SOUND_LIBRARIES}.") +TARGET_LINK_LIBRARIES(ALMIXER_LIBRARY ${OPENAL_LIBRARY} "${SDL_SOUND_LIBRARIES}" ${SDL_LIBRARY}) + + + +# Install commands below +IF(APPLE AND WANTS_BUILD_SHARED_LIBRARY AND WANTS_BUILD_FRAMEWORK) + # Will install framework to /Library/Frameworks directory or user specified + INSTALL(TARGETS + ALMIXER_LIBRARY + FRAMEWORK DESTINATION ${CMAKE_FRAMEWORK_INSTALL_DIR} + ) +ELSE(APPLE AND WANTS_BUILD_SHARED_LIBRARY AND WANTS_BUILD_FRAMEWORK) + INSTALL(TARGETS + ALMIXER_LIBRARY + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + PUBLIC_HEADER DESTINATION include + ) +ENDIF(APPLE AND WANTS_BUILD_SHARED_LIBRARY AND WANTS_BUILD_FRAMEWORK) + + + + + +# For uninstall (needs cmake_uninstall.cmake.in in the top-level directory) +CONFIGURE_FILE( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + IMMEDIATE @ONLY) +ADD_CUSTOM_TARGET(uninstall + "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") + + + +# Set defaults for Universal Binaries. We want 32-bit Intel/PPC on 10.4 +# and 32/64-bit Intel/PPC on >= 10.5. Anything <= 10.3 doesn't support. +IF(APPLE) + # These are just defaults/recommendations, but how we want to build + # out of the box. But the user needs to be able to change these options. + # So we must only set the values the first time CMake is run, or we + # will overwrite any changes the user sets. + # FORCE is used because the options are not reflected in the UI otherwise. + # Seems like a good place to add version specific compiler flags too. + IF(NOT ALMIXER_CONFIG_HAS_BEEN_RUN_BEFORE) + # This is really fragile, but CMake doesn't provide the OS system + # version information we need. (Darwin versions can be changed + # independently of OS X versions.) + # It does look like CMake handles the CMAKE_OSX_SYSROOT automatically. + IF(EXISTS /Developer/SDKs/MacOSX10.5.sdk) + SET(CMAKE_OSX_ARCHITECTURES "ppc;i386;x86_64" CACHE STRING "Build architectures for OSX" FORCE) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=10.5" CACHE STRING "Flags used by the compiler during all build types." FORCE) + ELSE(EXISTS /Developer/SDKs/MacOSX10.5.sdk) + IF(EXISTS /Developer/SDKs/MacOSX10.4u.sdk) + SET(CMAKE_OSX_ARCHITECTURES "ppc;i386" CACHE STRING "Build architectures for OSX" FORCE) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=10.4" CACHE STRING "Flags used by the compiler during all build types." FORCE) + ELSE(EXISTS /Developer/SDKs/MacOSX10.4u.sdk) + # No Universal Binary support + # Should break down further to set the -mmacosx-version-min, + # but the SDK detection is too unreliable here. + ENDIF(EXISTS /Developer/SDKs/MacOSX10.4u.sdk) + ENDIF(EXISTS /Developer/SDKs/MacOSX10.5.sdk) + ENDIF(NOT ALMIXER_CONFIG_HAS_BEEN_RUN_BEFORE) +ENDIF(APPLE) + +# This needs to be run very last so other parts of the scripts can take +# advantage of this. +IF(NOT ALMIXER_CONFIG_HAS_BEEN_RUN_BEFORE) + SET(ALMIXER_CONFIG_HAS_BEEN_RUN_BEFORE 1 CACHE INTERNAL "Flag to track whether this is the first time running CMake or if CMake has been configured before") +ENDIF(NOT ALMIXER_CONFIG_HAS_BEEN_RUN_BEFORE) + + +