#!/usr/bin/cmake cmake_minimum_required (VERSION 3.18) # ------------------------------------------------------------------------------------------------- project( Vorbis VERSION 1.3.7 DESCRIPTION "Free and once popular audio codec for music and other streams" ) include("../../BuildSystem/cmake/cplusplus.cmake") # As a standalone audio file, Vorbis is usually delivered in an OGG container, # so we'll depend on the OGG library as well if(NOT (TARGET OGG)) add_subdirectory(${PROJECT_SOURCE_DIR}/../ogg ${CMAKE_BINARY_DIR}/ogg) endif() # ------------------------------------------------------------------------------------------------- if(NOT EXISTS ${PROJECT_SOURCE_DIR}/downloads/libvorbis-1.3.7.tar.gz) message(STATUS "Downloading Vorbis sources") file( DOWNLOAD https://ftp.osuosl.org/pub/xiph/releases/vorbis/libvorbis-1.3.7.tar.gz ${PROJECT_SOURCE_DIR}/downloads/libvorbis-1.3.7.tar.gz SHOW_PROGRESS EXPECTED_HASH SHA256=0e982409a9c3fc82ee06e08205b1355e5c6aa4c36bca58146ef399621b0ce5ab STATUS DOWNLOAD_STATUS ) if(NOT DOWNLOAD_STATUS EQUAL 0) file(REMOVE ${PROJECT_SOURCE_DIR}/downloads/libvorbis-1.3.7.tar.gz) message(FATAL_ERROR "Download failed, stopping build (error ${DOWNLOAD_STATUS})") endif() endif() # ------------------------------------------------------------------------------------------------- if(NOT EXISTS ${PROJECT_SOURCE_DIR}/build) message(STATUS "Extracting Vorbis sources") file( ARCHIVE_EXTRACT INPUT ${PROJECT_SOURCE_DIR}/downloads/libvorbis-1.3.7.tar.gz DESTINATION ${CMAKE_BINARY_DIR}/extract ) file( RENAME ${CMAKE_BINARY_DIR}/extract/libvorbis-1.3.7 ${PROJECT_SOURCE_DIR}/build ) endif() file( COPY "${PROJECT_SOURCE_DIR}/config.h" DESTINATION "${PROJECT_SOURCE_DIR}/build/lib/" ) # ------------------------------------------------------------------------------------------------- set( sourceFiles "build/lib/mapping0.c" "build/lib/analysis.c" #"build/lib/barkmel.c" "build/lib/bitrate.c" "build/lib/block.c" "build/lib/codebook.c" "build/lib/envelope.c" "build/lib/floor0.c" "build/lib/floor1.c" "build/lib/info.c" "build/lib/lookup.c" "build/lib/lpc.c" "build/lib/lsp.c" "build/lib/mdct.c" "build/lib/psy.c" #"build/lib/psytune.c" "build/lib/registry.c" "build/lib/res0.c" "build/lib/sharedbook.c" "build/lib/smallft.c" "build/lib/synthesis.c" #"build/lib/tone.c" "build/lib/vorbisenc.c" "build/lib/vorbisfile.c" "build/lib/window.c" ) file( GLOB_RECURSE headerFiles CONFIGURE_DEPENDS "build/include/*.h" ) # ------------------------------------------------------------------------------------------------- add_library(Vorbis STATIC) add_library(Vorbis::Static ALIAS Vorbis) target_compile_definitions( Vorbis PRIVATE HAVE_CONFIG_H ) target_include_directories( Vorbis PUBLIC "build/include/" PRIVATE "build/lib/" ) target_sources( Vorbis PUBLIC ${headerFiles} PRIVATE ${sourceFiles} ) target_link_libraries( Vorbis PUBLIC OGG::Static ) #set_target_properties(Vorbis PROPERTIES PREFIX "") set_target_properties(Vorbis PROPERTIES OUTPUT_NAME "vorbis") # ------------------------------------------------------------------------------------------------- #set_property(GLOBAL PROPERTY QUIET_INSTALL ON) #install( # DIRECTORY build/include/ # DESTINATION ${PROJECT_SOURCE_DIR}/Include #) install( TARGETS Vorbis ARCHIVE DESTINATION ${PROJECT_SOURCE_DIR}/bin/${NUCLEX_COMPILER_TAG} ) # ------------------------------------------------------------------------------------------------- file( WRITE "${PROJECT_SOURCE_DIR}/VorbisConfig.cmake" "#!/usr/bin/cmake # Configuration to include Vorbis in a CMake-based project. If you want to # reference Vorbis as an externally compiled static library, do this: # # set(Vorbis_DIR \"../ThirdParty/vorbis\") # find_package(Vorbis REQUIRED CONFIG) # # target_link_libraries( # MyAwesomeProject # PRIVATE GTest::Static # PRIVATE GTest::Main # ) # # Alternatively, if you want to build Vorbis together with your project, # use the normal CMakeLists.txt with CMake's add_subdirectory() command: # # add_subdirectory( # \"\${PROJECT_SOURCE_DIR}/../ThirdParty/vorbis\" # \"\${CMAKE_BINARY_DIR}/vorbis\" # ) # # target_link_libraries( # MyAwesomeProject # PRIVATE Vorbis # PRIVATE VorbisMain # ) # # ------------------------------------------------------------------------------------------------- if(NOT DEFINED NUCLEX_COMPILER_TAG) message( FATAL_ERROR \"NUCLEX_COMPILER_TAG not defined! Include cplusplus.cmake before importing this package \\ in order to generate a tag identifying the platform/compiler/architecture/variant!\" ) endif() # ------------------------------------------------------------------------------------------------- if(NOT EXISTS \"\${CMAKE_CURRENT_LIST_DIR}/bin/\${NUCLEX_COMPILER_TAG}\") # TODO: Warn and link release build when compiling in debug mode # TODO: Warn and link build for older compiler version if found message( FATAL_ERROR \"Directory '\${CMAKE_CURRENT_LIST_DIR}/bin/\${NUCLEX_COMPILER_TAG}' not found. \\ Please either build and install this project before importing it via \\ find_package() or use this project's main CMakeFiles.txt via add_subdirectory()!\" ) endif() # ------------------------------------------------------------------------------------------------- add_library(Vorbis::Static STATIC IMPORTED) add_library(Vorbis::Main STATIC IMPORTED) # This may cause warnings on recent GCC versions (10.0.0+?) with LTO because GCC detects # that the headers used during build (residing in build/) are not the same used when # linking the library (copies resising in Include/). # # CMake doesn't run the install step during build, so the only way to get the headers # in place before building would be by copying them rather than installing them. set_target_properties( Vorbis::Static PROPERTIES INTERFACE_INCLUDE_DIRECTORIES \"\${CMAKE_CURRENT_LIST_DIR}/Include\" IMPORTED_LINK_INTERFACE_LANGUAGES \"CXX\" ) set_target_properties( Vorbis::Main PROPERTIES INTERFACE_INCLUDE_DIRECTORIES \"\${CMAKE_CURRENT_LIST_DIR}/Include\" IMPORTED_LINK_INTERFACE_LANGUAGES \"CXX\" ) if(WIN32) set_target_properties( Vorbis::Static PROPERTIES IMPORTED_LOCATION \"\${CMAKE_CURRENT_LIST_DIR}/bin/\${NUCLEX_COMPILER_TAG}/vorbis.lib\" ) else() set_target_properties( Vorbis::Static PROPERTIES IMPORTED_LOCATION \"\${CMAKE_CURRENT_LIST_DIR}/bin/\${NUCLEX_COMPILER_TAG}/libvorbis.a\" ) endif() message(STATUS \"Imported Vorbis targets with binaries in '\${CMAKE_CURRENT_LIST_DIR}'\")" ) # -------------------------------------------------------------------------------------------------