I created a monster
This commit is contained in:
parent
eb0372edc5
commit
3778f764d4
8 changed files with 298 additions and 416 deletions
|
|
@ -314,7 +314,7 @@ if (WITH_MPEG)
|
|||
set(MP3LAME_LIBRARY mp3lame CACHE STRING "LAME library" FORCE)
|
||||
add_subdirectory(extern/lame EXCLUDE_FROM_ALL)
|
||||
add_subdirectory(extern/mpg123 EXCLUDE_FROM_ALL)
|
||||
set(mpg123_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/extern/mpg123/src/include CACHE STRING "mpg123 include dir" FORCE)
|
||||
set(mpg123_INCLUDE_DIR extern/mpg123/src/include CACHE STRING "mpg123 include dir" FORCE)
|
||||
set(mpg123_LIBRARY mpg123 CACHE STRING "mpg123 library" FORCE)
|
||||
endif()
|
||||
|
||||
|
|
|
|||
|
|
@ -39,13 +39,9 @@ if (mpg123_INCLUDE_DIR)
|
|||
set(mpg123_FIND_QUIETLY TRUE)
|
||||
endif ()
|
||||
|
||||
find_package (PkgConfig QUIET)
|
||||
pkg_check_modules(PC_MPG123 QUIET mpg123>=1.25.10)
|
||||
|
||||
# tildearrow: don't use pkg-config for vendored build
|
||||
find_path (mpg123_INCLUDE_DIR mpg123.h
|
||||
HINTS
|
||||
${PC_MPG123_INCLUDEDIR}
|
||||
${PC_MPG123_INCLUDE_DIRS}
|
||||
${mpg123_ROOT}
|
||||
)
|
||||
|
||||
|
|
@ -59,17 +55,14 @@ find_library (mpg123_LIBRARY
|
|||
libmpg123
|
||||
libmpg123_static
|
||||
HINTS
|
||||
${PC_MPG123_LIBDIR}
|
||||
${PC_MPG123_LIBRARY_DIRS}
|
||||
${mpg123_ROOT}
|
||||
)
|
||||
|
||||
if (PC_MPG123_FOUND)
|
||||
set (mpg123_VERSION ${PC_MPG123_VERSION})
|
||||
elseif (mpg123_INCLUDE_DIR)
|
||||
file (READ "${mpg123_INCLUDE_DIR}/mpg123.h" _mpg123_h)
|
||||
string (REGEX MATCH "[0-9]+.[0-9]+.[0-9]+" _mpg123_version_re "${_mpg123_h}")
|
||||
set (mpg123_VERSION "${_mpg123_version_re}")
|
||||
if (mpg123_INCLUDE_DIR)
|
||||
#file (READ "${mpg123_INCLUDE_DIR}/mpg123.h" _mpg123_h)
|
||||
#string (REGEX MATCH "[0-9]+.[0-9]+.[0-9]+" _mpg123_version_re "${_mpg123_h}")
|
||||
#set (mpg123_VERSION "${_mpg123_version_re}")
|
||||
set (mpg123_VERSION "NO")
|
||||
endif ()
|
||||
|
||||
# Handle the QUIETLY and REQUIRED arguments and set mpg123_FOUND
|
||||
|
|
@ -79,8 +72,6 @@ find_package_handle_standard_args (mpg123
|
|||
REQUIRED_VARS
|
||||
mpg123_LIBRARY
|
||||
mpg123_INCLUDE_DIR
|
||||
VERSION_VAR
|
||||
mpg123_VERSION
|
||||
)
|
||||
|
||||
if (mpg123_FOUND AND NOT TARGET MPG123::mpg123)
|
||||
|
|
|
|||
|
|
@ -50,7 +50,8 @@ else ()
|
|||
endif ()
|
||||
|
||||
find_package (mp3lame)
|
||||
find_package (mpg123 1.25.10)
|
||||
# tildearrow: removed version requirement to pass the build
|
||||
find_package (mpg123)
|
||||
# tildearrow: modified for fucking passing the build
|
||||
if (TARGET mp3lame::mp3lame AND (TARGET MPG123::mpg123))
|
||||
set (HAVE_MPEG_LIBS 1)
|
||||
|
|
|
|||
2
extern/mpg123/MODIFIED.md
vendored
2
extern/mpg123/MODIFIED.md
vendored
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
certain files have been modified to suit Furnace's needs, such as disabling integration with specific libraries, disabling certain options which are not necessary (such as doc generation) or allowing libsndfile to link against this library.
|
||||
|
||||
in particular, the build system is heavily modified as it simply did not permit compilation as a static library, let alone linking against libsndfile.
|
||||
|
||||
changes are preceded by "tildearrow".
|
||||
|
||||
- tildearrow
|
||||
|
|
|
|||
404
extern/mpg123/src/CMakeLists.txt
vendored
404
extern/mpg123/src/CMakeLists.txt
vendored
|
|
@ -207,116 +207,7 @@ if(NOT HAVE_FPU)
|
|||
endif()
|
||||
|
||||
# Modules
|
||||
|
||||
if(BUILD_LIBOUT123)
|
||||
if(CHECK_MODULES)
|
||||
list(FIND CHECK_MODULES alsa ALSA_REQUIRED)
|
||||
list(FIND CHECK_MODULES coreaudio COREAUDIO_REQUIRED)
|
||||
list(FIND CHECK_MODULES pulse PULSE_REQUIRED)
|
||||
list(FIND CHECK_MODULES jack JACK_REQUIRED)
|
||||
list(FIND CHECK_MODULES tinyalsa TINYALSA_REQUIRED)
|
||||
list(FIND CHECK_MODULES win32 WIN32_REQUIRED)
|
||||
list(FIND CHECK_MODULES win32_wasapi WIN32_WASAPI_REQUIRED)
|
||||
set(MODULE_NOT_FOUND_MESSAGE "module required but couldn't be found")
|
||||
endif()
|
||||
|
||||
if(NOT CHECK_MODULES OR NOT ALSA_REQUIRED EQUAL -1)
|
||||
find_package(ALSA)
|
||||
if(TARGET ALSA::ALSA)
|
||||
list(APPEND OUTPUT_MODULES alsa)
|
||||
elseif(CHECK_MODULES AND NOT ALSA_REQUIRED EQUAL -1)
|
||||
message(FATAL_ERROR "alsa ${MODULE_NOT_FOUND_MESSAGE}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT CHECK_MODULES OR NOT COREAUDIO_REQUIRED EQUAL -1)
|
||||
if(APPLE)
|
||||
find_library(AUDIO_TOOLBOX AudioToolbox)
|
||||
list(APPEND OUTPUT_MODULES coreaudio)
|
||||
elseif(CHECK_MODULES AND NOT COREAUDIO_REQUIRED EQUAL -1)
|
||||
message(FATAL_ERROR "coreaudio ${MODULE_NOT_FOUND_MESSAGE}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
find_package(PkgConfig)
|
||||
if(PKG_CONFIG_FOUND)
|
||||
if(NOT CHECK_MODULES OR NOT PULSE_REQUIRED EQUAL -1)
|
||||
pkg_search_module(PULSE libpulse-simple)
|
||||
if(PULSE_FOUND)
|
||||
list(APPEND OUTPUT_MODULES pulse)
|
||||
elseif(CHECK_MODULES AND NOT PULSE_REQUIRED EQUAL -1)
|
||||
message(FATAL_ERROR "pulse ${MODULE_NOT_FOUND_MESSAGE}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT CHECK_MODULES OR NOT JACK_REQUIRED EQUAL -1)
|
||||
pkg_search_module(JACK jack)
|
||||
if(JACK_FOUND)
|
||||
list(APPEND OUTPUT_MODULES jack)
|
||||
elseif(CHECK_MODULES AND NOT JACK_REQUIRED EQUAL -1)
|
||||
message(FATAL_ERROR "jack ${MODULE_NOT_FOUND_MESSAGE}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT CHECK_MODULES OR NOT TINYALSA_REQUIRED EQUAL -1)
|
||||
pkg_search_module(TINYALSA tinyalsa)
|
||||
if(TINYALSA_FOUND)
|
||||
list(APPEND OUTPUT_MODULES tinyalsa)
|
||||
elseif(CHECK_MODULES AND NOT TINYALSA_REQUIRED EQUAL -1)
|
||||
message(FATAL_ERROR "tinyalsa ${MODULE_NOT_FOUND_MESSAGE}")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT CHECK_MODULES OR NOT WIN32_REQUIRED EQUAL -1)
|
||||
if(HAVE_WINDOWS_H)
|
||||
set(WIN32_LIBRARIES winmm)
|
||||
list(APPEND OUTPUT_MODULES win32)
|
||||
elseif(CHECK_MODULES AND NOT WIN32_REQUIRED EQUAL -1)
|
||||
message(FATAL_ERROR "win32 ${MODULE_NOT_FOUND_MESSAGE}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT CHECK_MODULES OR NOT WIN32_WASAPI_REQUIRED EQUAL -1)
|
||||
set(WASAPI_INCLUDES "initguid.h" "audioclient.h" "mmdeviceapi.h" "avrt.h")
|
||||
check_include_files("${WASAPI_INCLUDES}" HAVE_WASAPI)
|
||||
if(HAVE_WASAPI)
|
||||
set(WIN32_WASAPI_LIBRARIES ole32 avrt)
|
||||
list(APPEND OUTPUT_MODULES win32_wasapi)
|
||||
elseif(CHECK_MODULES AND NOT WIN32_WASAPI_REQUIRED EQUAL -1)
|
||||
message(FATAL_ERROR "win32_wasapi ${MODULE_NOT_FOUND_MESSAGE}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CHECK_MODULES)
|
||||
list(REMOVE_AT CHECK_MODULES
|
||||
${ALSA_REQUIRED}
|
||||
${COREAUDIO_REQUIRED}
|
||||
${PULSE_REQUIRED}
|
||||
${JACK_REQUIRED}
|
||||
${TINYALSA_REQUIRED}
|
||||
${WIN32_REQUIRED}
|
||||
${WIN32_WASAPI_REQUIRED})
|
||||
list(LENGTH CHECK_MODULES CHECK_MODULES_LENGTH)
|
||||
if(NOT CHECK_MODULES_LENGTH EQUAL 0)
|
||||
message(FATAL_ERROR "Dunno how to find modules: ${CHECK_MODULES}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT OUTPUT_MODULES)
|
||||
set(DEFAULT_OUTPUT_MODULE dummy)
|
||||
set(DEFAULT_OUTPUT_MODULES ${DEFAULT_OUTPUT_MODULE})
|
||||
else()
|
||||
list(GET OUTPUT_MODULES 0 _DEFAULT_OUTPUT_MODULE)
|
||||
set(DEFAULT_OUTPUT_MODULE ${_DEFAULT_OUTPUT_MODULE} CACHE STRING "Default output module")
|
||||
if(BUILD_SHARED_LIBS)
|
||||
string(REPLACE ";" "," DEFAULT_OUTPUT_MODULES "${OUTPUT_MODULES}")
|
||||
else()
|
||||
set(DEFAULT_OUTPUT_MODULES ${DEFAULT_OUTPUT_MODULE})
|
||||
endif()
|
||||
set_property(CACHE DEFAULT_OUTPUT_MODULE PROPERTY STRINGS ${OUTPUT_MODULES})
|
||||
endif()
|
||||
endif()
|
||||
# tildearrow: removed libout123
|
||||
|
||||
option(ACCURATE_ROUNDING "use rounding instead of fast truncation for integer output, where possible" ON)
|
||||
cmake_dependent_option(FIFO "FIFO support for control interface" ON "HAVE_MKFIFO" OFF)
|
||||
|
|
@ -353,26 +244,299 @@ option(SYN123_NO_CASES "include special cases for likely parameter values (chann
|
|||
cmake_dependent_option(USE_MODULES "dynamically loadable output modules" OFF "BUILD_SHARED_LIBS;HAVE_WIN_DL OR HAVE_UNIX_DL" OFF)
|
||||
option(USE_NEW_HUFFTABLE "use new huffman decoding scheme by Taihei (faster on modern CPUs at least, so on by default)" ON)
|
||||
|
||||
# what a hack
|
||||
include_directories(
|
||||
"${CMAKE_CURRENT_BINARY_DIR}"
|
||||
"include")
|
||||
|
||||
# again
|
||||
set(TARGET compat)
|
||||
add_library(${TARGET} OBJECT
|
||||
"compat/compat.c"
|
||||
"compat/compat_str.c")
|
||||
if(BUILD_SHARED_LIBS)
|
||||
set_target_properties(${TARGET} PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||
endif()
|
||||
|
||||
add_library(${TARGET}_dl OBJECT
|
||||
"compat/compat_dl.c")
|
||||
if(BUILD_SHARED_LIBS)
|
||||
set_target_properties(${TARGET}_dl PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||
endif()
|
||||
|
||||
add_library(${TARGET}_str OBJECT
|
||||
"compat/compat_str.c")
|
||||
if(BUILD_SHARED_LIBS)
|
||||
set_target_properties(${TARGET}_str PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||
endif()
|
||||
|
||||
target_include_directories(${TARGET} PRIVATE
|
||||
"${CMAKE_CURRENT_BINARY_DIR}")
|
||||
# "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
|
||||
add_compile_definitions(
|
||||
# a motherfiretrucking explosion because I NEED the include directory
|
||||
option(NO_FEATURE_REPORT "Disable feature report function" OFF)
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Android")
|
||||
option(WITH_SSE "x86: build with SSE support if detected. Turn OFF for older devices where autodetection is misleading." ON)
|
||||
endif()
|
||||
|
||||
if(HAVE_STDLIB_H)
|
||||
set(INCLUDE_STDLIB_H "#include <stdlib.h>")
|
||||
else()
|
||||
set(INCLUDE_STDLIB_H "/* #include <stdlib.h> is not available on this system */")
|
||||
endif()
|
||||
if(HAVE_SYS_TYPES_H)
|
||||
set(INCLUDE_SYS_TYPE_H "#include <sys/types.h>")
|
||||
else()
|
||||
set(INCLUDE_SYS_TYPE_H "/* #include <sys/types.h> is not available on this system */")
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
# PPC with AltiVec is missing. But probably obsolete enough for CMake users.
|
||||
|
||||
if(ARCH_IS_X64)
|
||||
set(MACHINE amd64)
|
||||
elseif(ARCH_IS_X86)
|
||||
set(MACHINE x86)
|
||||
elseif(ARCH_IS_ARM64)
|
||||
set(MACHINE arm64)
|
||||
elseif(ARCH_IS_ARM32)
|
||||
set(MACHINE arm32)
|
||||
else()
|
||||
message(WARNING "Unknown processor. Using generic optimizations.")
|
||||
set(MACHINE generic)
|
||||
endif()
|
||||
message(STATUS "Detected machine: ${MACHINE}")
|
||||
|
||||
set(TARGET mpg123)
|
||||
add_library(${TARGET} STATIC
|
||||
"libmpg123/parse.c"
|
||||
"libmpg123/frame.c"
|
||||
"libmpg123/format.c"
|
||||
"libmpg123/dct64.c"
|
||||
"libmpg123/equalizer.c"
|
||||
"libmpg123/id3.c"
|
||||
"libmpg123/optimize.c"
|
||||
"libmpg123/readers.c"
|
||||
"libmpg123/tabinit.c"
|
||||
"libmpg123/libmpg123.c"
|
||||
"libmpg123/index.c"
|
||||
"$<$<NOT:$<BOOL:${NO_ICY}>>:libmpg123/icy.c>"
|
||||
"$<$<NOT:$<BOOL:${NO_ICY}>>:libmpg123/icy2utf8.c>"
|
||||
"$<$<NOT:$<BOOL:${NO_LAYER1}>>:libmpg123/layer1.c>"
|
||||
"$<$<NOT:$<OR:$<BOOL:${NO_LAYER1}>,$<BOOL:${NO_LAYER2}>>>:libmpg123/layer2.c>"
|
||||
"$<$<NOT:$<BOOL:${NO_LAYER3}>>:libmpg123/layer3.c>"
|
||||
"$<$<NOT:$<BOOL:${NO_NTOM}>>:libmpg123/ntom.c>"
|
||||
"$<$<NOT:$<BOOL:${NO_8BIT}>>:libmpg123/synth_8bit.c>"
|
||||
"$<$<NOT:$<BOOL:${NO_16BIT}>>:libmpg123/synth.c>"
|
||||
"$<$<AND:$<BOOL:${HAVE_FPU}>,$<NOT:$<BOOL:${NO_32BIT}>>>:libmpg123/synth_s32.c>"
|
||||
"$<$<AND:$<BOOL:${HAVE_FPU}>,$<NOT:$<BOOL:${NO_REAL}>>>:libmpg123/synth_real.c>"
|
||||
"$<$<NOT:$<BOOL:${NO_STRING}>>:libmpg123/stringbuf.c>"
|
||||
"$<$<NOT:$<BOOL:${NO_FEATURE_REPORT}>>:libmpg123/feature.c>"
|
||||
"$<$<NOT:$<BOOL:${PORTABLE_API}>>:libmpg123/lfs_wrap.c>"
|
||||
$<TARGET_OBJECTS:compat>)
|
||||
|
||||
add_library(MPG123::mpg123 ALIAS mpg123)
|
||||
|
||||
if(MSVC)
|
||||
if(MACHINE MATCHES "x86|amd64")
|
||||
find_program(YASM_ASSEMBLER yasm)
|
||||
if(NOT YASM_ASSEMBLER)
|
||||
message(WARNING "Couldn't find yasm assembler for optimizded decoders. Please set YASM_ASSEMBLER variable")
|
||||
set(MACHINE generic)
|
||||
endif()
|
||||
else()
|
||||
message(WARNING "Need work to support non-x86 assembly optimizations with MSVC.")
|
||||
set(MACHINE generic)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(MACHINE STREQUAL "amd64")
|
||||
if(HAVE_FPU)
|
||||
set(PLATFORM_DEFINITIONS OPT_MULTI OPT_X86_64 OPT_AVX OPT_GENERIC OPT_GENERIC_DITHER)
|
||||
set(PLATFORM_SOURCES
|
||||
"libmpg123/dct36_x86_64.S"
|
||||
"libmpg123/dct64_x86_64_float.S"
|
||||
"libmpg123/synth_x86_64_float.S"
|
||||
"libmpg123/synth_x86_64_s32.S"
|
||||
"libmpg123/synth_stereo_x86_64_float.S"
|
||||
"libmpg123/synth_stereo_x86_64_s32.S"
|
||||
"libmpg123/dct36_avx.S"
|
||||
"libmpg123/dct64_avx_float.S"
|
||||
"libmpg123/synth_stereo_avx_float.S"
|
||||
"libmpg123/synth_stereo_avx_s32.S"
|
||||
"libmpg123/getcpuflags_x86_64.S")
|
||||
target_sources(${TARGET} PRIVATE
|
||||
"libmpg123/dither.c")
|
||||
if(ACCURATE_ROUNDING)
|
||||
list(APPEND PLATFORM_SOURCES
|
||||
"libmpg123/synth_x86_64_accurate.S"
|
||||
"libmpg123/synth_stereo_x86_64_accurate.S"
|
||||
"libmpg123/synth_stereo_avx_accurate.S")
|
||||
else()
|
||||
list(APPEND PLATFORM_SOURCES
|
||||
"libmpg123/dct64_x86_64.S"
|
||||
"libmpg123/synth_x86_64.S"
|
||||
"libmpg123/synth_stereo_x86_64.S"
|
||||
"libmpg123/synth_stereo_avx.S"
|
||||
"libmpg123/dct64_avx.S")
|
||||
endif()
|
||||
else()
|
||||
set(PLATFORM_DEFINITIONS OPT_GENERIC)
|
||||
endif()
|
||||
elseif(MACHINE STREQUAL "x86")
|
||||
if(TRUE)
|
||||
set(PLATFORM_DEFINITIONS OPT_I386)
|
||||
target_sources(${TARGET} PRIVATE
|
||||
"libmpg123/dct64_i386.c")
|
||||
endif()
|
||||
|
||||
cmake_host_system_information(RESULT HAVE_SSE QUERY HAS_SSE)
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Android")
|
||||
set(HAVE_SSE ${WITH_SSE})
|
||||
endif()
|
||||
if(HAVE_SSE)
|
||||
set(PLATFORM_DEFINITIONS OPT_SSE)
|
||||
set(PLATFORM_SOURCES
|
||||
"libmpg123/tabinit_mmx.S"
|
||||
"libmpg123/dct36_sse.S"
|
||||
"libmpg123/dct64_sse_float.S"
|
||||
"libmpg123/synth_sse_float.S"
|
||||
"libmpg123/synth_stereo_sse_float.S"
|
||||
"libmpg123/synth_sse_s32.S"
|
||||
"libmpg123/synth_stereo_sse_s32.S")
|
||||
if(ACCURATE_ROUNDING)
|
||||
list(APPEND PLATFORM_SOURCES
|
||||
"libmpg123/synth_sse_accurate.S"
|
||||
"libmpg123/synth_stereo_sse_accurate.S")
|
||||
else()
|
||||
list(APPEND PLATFORM_SOURCES
|
||||
"libmpg123/dct64_sse.S"
|
||||
"libmpg123/synth_sse.S")
|
||||
endif()
|
||||
endif()
|
||||
elseif(MACHINE STREQUAL "arm64")
|
||||
set(PLATFORM_DEFINITIONS OPT_MULTI OPT_GENERIC OPT_GENERIC_DITHER OPT_NEON64)
|
||||
set(PLATFORM_SOURCES
|
||||
"libmpg123/dct36_neon64.S"
|
||||
"libmpg123/dct64_neon64_float.S"
|
||||
"libmpg123/synth_neon64_float.S"
|
||||
"libmpg123/synth_neon64_s32.S"
|
||||
"libmpg123/synth_stereo_neon64_float.S"
|
||||
"libmpg123/synth_stereo_neon64_s32.S"
|
||||
"libmpg123/check_neon.S")
|
||||
if(ACCURATE_ROUNDING)
|
||||
list(APPEND PLATFORM_SOURCES
|
||||
"libmpg123/synth_neon64_accurate.S"
|
||||
"libmpg123/synth_stereo_neon64_accurate.S")
|
||||
else()
|
||||
list(APPEND PLATFORM_SOURCES
|
||||
"libmpg123/synth_neon64.S"
|
||||
"libmpg123/synth_stereo_neon64.S")
|
||||
endif()
|
||||
target_sources(${TARGET} PRIVATE
|
||||
"libmpg123/dither.c"
|
||||
"libmpg123/getcpuflags_arm.c")
|
||||
elseif(MACHINE STREQUAL "arm32")
|
||||
if(HAVE_FPU)
|
||||
set(PLATFORM_DEFINITIONS OPT_MULTI OPT_GENERIC OPT_GENERIC_DITHER OPT_NEON)
|
||||
set(PLATFORM_SOURCES
|
||||
"libmpg123/dct36_neon.S"
|
||||
"libmpg123/dct64_neon_float.S"
|
||||
"libmpg123/synth_neon_float.S"
|
||||
"libmpg123/synth_neon_s32.S"
|
||||
"libmpg123/synth_stereo_neon_float.S"
|
||||
"libmpg123/synth_stereo_neon_s32.S"
|
||||
"libmpg123/check_neon.S")
|
||||
target_sources(${TARGET} PRIVATE
|
||||
"libmpg123/getcpuflags_arm.c")
|
||||
if(ACCURATE_ROUNDING)
|
||||
list(APPEND PLATFORM_SOURCES
|
||||
"libmpg123/synth_neon_accurate.S"
|
||||
"libmpg123/synth_stereo_neon_accurate.S")
|
||||
else()
|
||||
list(APPEND PLATFORM_SOURCES
|
||||
"libmpg123/dct64_neon.S"
|
||||
"libmpg123/synth_neon.S"
|
||||
"libmpg123/synth_stereo_neon.S")
|
||||
endif()
|
||||
target_sources(${TARGET} PRIVATE ${PLATFORM_SOURCES})
|
||||
target_sources(${TARGET} PRIVATE
|
||||
"libmpg123/dither.c")
|
||||
else()
|
||||
set(PLATFORM_DEFINITIONS OPT_ARM)
|
||||
if(ACCURATE_ROUNDING)
|
||||
set(PLATFORM_SOURCES
|
||||
"libmpg123/synth_arm_accurate.S")
|
||||
else()
|
||||
set(PLATFORM_SOURCES
|
||||
"libmpg123/synth_arm.S")
|
||||
endif()
|
||||
target_sources(${TARGET} PRIVATE ${PLATFORM_SOURCES})
|
||||
endif()
|
||||
elseif(MACHINE STREQUAL "generic")
|
||||
set(PLATFORM_DEFINITIONS OPT_GENERIC)
|
||||
endif()
|
||||
|
||||
#set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME mpg123)
|
||||
|
||||
target_compile_definitions(${TARGET} PRIVATE
|
||||
$<$<BOOL:${WIN32}>:_CRT_SECURE_NO_WARNINGS>
|
||||
$<$<BOOL:${NO_BUFFER}>:NOXFERMEM>
|
||||
$<$<BOOL:${NEWOLD_WRITE_SAMPLE}>:NEWOLD_WRITE_SAMPLE>)
|
||||
|
||||
add_compile_options(
|
||||
target_compile_options(${TARGET} PRIVATE
|
||||
$<$<BOOL:${MSVC}>:/wd4996>)
|
||||
|
||||
add_subdirectory("compat")
|
||||
add_subdirectory("libmpg123")
|
||||
#add_subdirectory("libsyn123")
|
||||
target_compile_definitions(${TARGET} PRIVATE
|
||||
$<$<BOOL:$<TARGET_PROPERTY:POSITION_INDEPENDENT_CODE>>:PIC>)
|
||||
|
||||
target_compile_definitions(${TARGET} PRIVATE
|
||||
${PLATFORM_DEFINITIONS}
|
||||
$<$<BOOL:${HAVE_FPU}>:REAL_IS_FLOAT>
|
||||
$<$<NOT:$<BOOL:${HAVE_FPU}>>:REAL_IS_FIXED>)
|
||||
|
||||
if(MSVC AND MACHINE MATCHES "x86|amd64" AND YASM_ASSEMBLER)
|
||||
list(TRANSFORM PLATFORM_DEFINITIONS PREPEND /D)
|
||||
foreach(FILE ${PLATFORM_SOURCES})
|
||||
get_filename_component(FILENAME ${FILE} NAME)
|
||||
add_custom_command(
|
||||
OUTPUT ${FILENAME}.asm
|
||||
COMMAND ${CMAKE_C_COMPILER} /DASMALIGN_BALIGN ${PLATFORM_DEFINITIONS}
|
||||
/I"${PROJECT_SOURCE_DIR}/src" /I"${PROJECT_BINARY_DIR}/src" /P /Fi${FILENAME}.asm /Tc "${FILE}"
|
||||
DEPENDS ${FILE}
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
add_custom_command(
|
||||
OUTPUT ${FILENAME}.obj
|
||||
COMMAND ${YASM_ASSEMBLER} -a x86 -m ${MACHINE} -p gas -r raw -f win32 -g null -o ${FILENAME}.obj ${FILENAME}.asm
|
||||
DEPENDS ${FILENAME}.asm
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
target_sources(${TARGET} PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/${FILENAME}.obj")
|
||||
endforeach()
|
||||
else()
|
||||
target_sources(${TARGET} PRIVATE ${PLATFORM_SOURCES})
|
||||
endif()
|
||||
|
||||
if(HAVE_M)
|
||||
string(APPEND LIBMPG123_LIBS " -lm")
|
||||
endif()
|
||||
if(WANT_WIN32_UNICODE)
|
||||
string(APPEND LIBMPG123_LIBS " -lshlwapi")
|
||||
endif()
|
||||
set(LIBMPG123_LIBS "${LIBMPG123_LIBS}" PARENT_SCOPE)
|
||||
target_link_libraries(${TARGET} PRIVATE
|
||||
$<$<BOOL:${HAVE_M}>:m>
|
||||
$<$<BOOL:${WANT_WIN32_UNICODE}>:shlwapi>)
|
||||
#target_include_directories(${TARGET} INTERFACE
|
||||
# "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
|
||||
# "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
|
||||
# what a hack
|
||||
target_include_directories(${TARGET} PUBLIC
|
||||
"include"
|
||||
PRIVATE
|
||||
"${CMAKE_CURRENT_BINARY_DIR}")
|
||||
# "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
|
||||
|
||||
|
||||
configure_file(config.cmake.h.in config.h)
|
||||
|
||||
set(LIBMPG123_LIBS "${LIBMPG123_LIBS}" PARENT_SCOPE)
|
||||
set(LIBOUT123_LIBS "${LIBOUT123_LIBS}" PARENT_SCOPE)
|
||||
#set(LIBSYN123_LIBS "${LIBSYN123_LIBS}" PARENT_SCOPE)
|
||||
|
|
|
|||
19
extern/mpg123/src/compat/CMakeLists.txt
vendored
19
extern/mpg123/src/compat/CMakeLists.txt
vendored
|
|
@ -1,19 +0,0 @@
|
|||
set(TARGET compat)
|
||||
add_library(${TARGET} OBJECT
|
||||
"compat.c"
|
||||
"compat_str.c")
|
||||
if(BUILD_SHARED_LIBS)
|
||||
set_target_properties(${TARGET} PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||
endif()
|
||||
|
||||
add_library(${TARGET}_dl OBJECT
|
||||
"compat_dl.c")
|
||||
if(BUILD_SHARED_LIBS)
|
||||
set_target_properties(${TARGET}_dl PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||
endif()
|
||||
|
||||
add_library(${TARGET}_str OBJECT
|
||||
"compat_str.c")
|
||||
if(BUILD_SHARED_LIBS)
|
||||
set_target_properties(${TARGET}_str PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||
endif()
|
||||
260
extern/mpg123/src/libmpg123/CMakeLists.txt
vendored
260
extern/mpg123/src/libmpg123/CMakeLists.txt
vendored
|
|
@ -1,260 +0,0 @@
|
|||
cmake_minimum_required(VERSION 3.0...3.19)
|
||||
|
||||
option(NO_FEATURE_REPORT "Disable feature report function" OFF)
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Android")
|
||||
option(WITH_SSE "x86: build with SSE support if detected. Turn OFF for older devices where autodetection is misleading." ON)
|
||||
endif()
|
||||
|
||||
if(HAVE_STDLIB_H)
|
||||
set(INCLUDE_STDLIB_H "#include <stdlib.h>")
|
||||
else()
|
||||
set(INCLUDE_STDLIB_H "/* #include <stdlib.h> is not available on this system */")
|
||||
endif()
|
||||
if(HAVE_SYS_TYPES_H)
|
||||
set(INCLUDE_SYS_TYPE_H "#include <sys/types.h>")
|
||||
else()
|
||||
set(INCLUDE_SYS_TYPE_H "/* #include <sys/types.h> is not available on this system */")
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
# PPC with AltiVec is missing. But probably obsolete enough for CMake users.
|
||||
|
||||
if(ARCH_IS_X64)
|
||||
set(MACHINE amd64)
|
||||
elseif(ARCH_IS_X86)
|
||||
set(MACHINE x86)
|
||||
elseif(ARCH_IS_ARM64)
|
||||
set(MACHINE arm64)
|
||||
elseif(ARCH_IS_ARM32)
|
||||
set(MACHINE arm32)
|
||||
else()
|
||||
message(WARNING "Unknown processor. Using generic optimizations.")
|
||||
set(MACHINE generic)
|
||||
endif()
|
||||
message(STATUS "Detected machine: ${MACHINE}")
|
||||
|
||||
set(TARGET mpg123)
|
||||
add_library(${TARGET}
|
||||
"parse.c"
|
||||
"frame.c"
|
||||
"format.c"
|
||||
"dct64.c"
|
||||
"equalizer.c"
|
||||
"id3.c"
|
||||
"optimize.c"
|
||||
"readers.c"
|
||||
"tabinit.c"
|
||||
"libmpg123.c"
|
||||
"index.c"
|
||||
"$<$<NOT:$<BOOL:${NO_ICY}>>:icy.c>"
|
||||
"$<$<NOT:$<BOOL:${NO_ICY}>>:icy2utf8.c>"
|
||||
"$<$<NOT:$<BOOL:${NO_LAYER1}>>:layer1.c>"
|
||||
"$<$<NOT:$<OR:$<BOOL:${NO_LAYER1}>,$<BOOL:${NO_LAYER2}>>>:layer2.c>"
|
||||
"$<$<NOT:$<BOOL:${NO_LAYER3}>>:layer3.c>"
|
||||
"$<$<NOT:$<BOOL:${NO_NTOM}>>:ntom.c>"
|
||||
"$<$<NOT:$<BOOL:${NO_8BIT}>>:synth_8bit.c>"
|
||||
"$<$<NOT:$<BOOL:${NO_16BIT}>>:synth.c>"
|
||||
"$<$<AND:$<BOOL:${HAVE_FPU}>,$<NOT:$<BOOL:${NO_32BIT}>>>:synth_s32.c>"
|
||||
"$<$<AND:$<BOOL:${HAVE_FPU}>,$<NOT:$<BOOL:${NO_REAL}>>>:synth_real.c>"
|
||||
"$<$<NOT:$<BOOL:${NO_STRING}>>:stringbuf.c>"
|
||||
"$<$<NOT:$<BOOL:${NO_FEATURE_REPORT}>>:feature.c>"
|
||||
"$<$<NOT:$<BOOL:${PORTABLE_API}>>:lfs_wrap.c>"
|
||||
$<TARGET_OBJECTS:compat>)
|
||||
|
||||
if(MSVC)
|
||||
if(MACHINE MATCHES "x86|amd64")
|
||||
find_program(YASM_ASSEMBLER yasm)
|
||||
if(NOT YASM_ASSEMBLER)
|
||||
message(WARNING "Couldn't find yasm assembler for optimizded decoders. Please set YASM_ASSEMBLER variable")
|
||||
set(MACHINE generic)
|
||||
endif()
|
||||
else()
|
||||
message(WARNING "Need work to support non-x86 assembly optimizations with MSVC.")
|
||||
set(MACHINE generic)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(MACHINE STREQUAL "amd64")
|
||||
if(HAVE_FPU)
|
||||
set(PLATFORM_DEFINITIONS OPT_MULTI OPT_X86_64 OPT_AVX OPT_GENERIC OPT_GENERIC_DITHER)
|
||||
set(PLATFORM_SOURCES
|
||||
"dct36_x86_64.S"
|
||||
"dct64_x86_64_float.S"
|
||||
"synth_x86_64_float.S"
|
||||
"synth_x86_64_s32.S"
|
||||
"synth_stereo_x86_64_float.S"
|
||||
"synth_stereo_x86_64_s32.S"
|
||||
"dct36_avx.S"
|
||||
"dct64_avx_float.S"
|
||||
"synth_stereo_avx_float.S"
|
||||
"synth_stereo_avx_s32.S"
|
||||
"getcpuflags_x86_64.S")
|
||||
target_sources(${TARGET} PRIVATE
|
||||
"dither.c")
|
||||
if(ACCURATE_ROUNDING)
|
||||
list(APPEND PLATFORM_SOURCES
|
||||
"synth_x86_64_accurate.S"
|
||||
"synth_stereo_x86_64_accurate.S"
|
||||
"synth_stereo_avx_accurate.S")
|
||||
else()
|
||||
list(APPEND PLATFORM_SOURCES
|
||||
"dct64_x86_64.S"
|
||||
"synth_x86_64.S"
|
||||
"synth_stereo_x86_64.S"
|
||||
"synth_stereo_avx.S"
|
||||
"dct64_avx.S")
|
||||
endif()
|
||||
else()
|
||||
set(PLATFORM_DEFINITIONS OPT_GENERIC)
|
||||
endif()
|
||||
elseif(MACHINE STREQUAL "x86")
|
||||
if(TRUE)
|
||||
set(PLATFORM_DEFINITIONS OPT_I386)
|
||||
target_sources(${TARGET} PRIVATE
|
||||
"dct64_i386.c")
|
||||
endif()
|
||||
|
||||
cmake_host_system_information(RESULT HAVE_SSE QUERY HAS_SSE)
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Android")
|
||||
set(HAVE_SSE ${WITH_SSE})
|
||||
endif()
|
||||
if(HAVE_SSE)
|
||||
set(PLATFORM_DEFINITIONS OPT_SSE)
|
||||
set(PLATFORM_SOURCES
|
||||
"tabinit_mmx.S"
|
||||
"dct36_sse.S"
|
||||
"dct64_sse_float.S"
|
||||
"synth_sse_float.S"
|
||||
"synth_stereo_sse_float.S"
|
||||
"synth_sse_s32.S"
|
||||
"synth_stereo_sse_s32.S")
|
||||
if(ACCURATE_ROUNDING)
|
||||
list(APPEND PLATFORM_SOURCES
|
||||
"synth_sse_accurate.S"
|
||||
"synth_stereo_sse_accurate.S")
|
||||
else()
|
||||
list(APPEND PLATFORM_SOURCES
|
||||
"dct64_sse.S"
|
||||
"synth_sse.S")
|
||||
endif()
|
||||
endif()
|
||||
elseif(MACHINE STREQUAL "arm64")
|
||||
set(PLATFORM_DEFINITIONS OPT_MULTI OPT_GENERIC OPT_GENERIC_DITHER OPT_NEON64)
|
||||
set(PLATFORM_SOURCES
|
||||
"dct36_neon64.S"
|
||||
"dct64_neon64_float.S"
|
||||
"synth_neon64_float.S"
|
||||
"synth_neon64_s32.S"
|
||||
"synth_stereo_neon64_float.S"
|
||||
"synth_stereo_neon64_s32.S"
|
||||
"check_neon.S")
|
||||
if(ACCURATE_ROUNDING)
|
||||
list(APPEND PLATFORM_SOURCES
|
||||
"synth_neon64_accurate.S"
|
||||
"synth_stereo_neon64_accurate.S")
|
||||
else()
|
||||
list(APPEND PLATFORM_SOURCES
|
||||
"synth_neon64.S"
|
||||
"synth_stereo_neon64.S")
|
||||
endif()
|
||||
target_sources(${TARGET} PRIVATE
|
||||
"dither.c"
|
||||
"getcpuflags_arm.c")
|
||||
elseif(MACHINE STREQUAL "arm32")
|
||||
if(HAVE_FPU)
|
||||
set(PLATFORM_DEFINITIONS OPT_MULTI OPT_GENERIC OPT_GENERIC_DITHER OPT_NEON)
|
||||
set(PLATFORM_SOURCES
|
||||
"dct36_neon.S"
|
||||
"dct64_neon_float.S"
|
||||
"synth_neon_float.S"
|
||||
"synth_neon_s32.S"
|
||||
"synth_stereo_neon_float.S"
|
||||
"synth_stereo_neon_s32.S"
|
||||
"check_neon.S")
|
||||
target_sources(${TARGET} PRIVATE
|
||||
"getcpuflags_arm.c")
|
||||
if(ACCURATE_ROUNDING)
|
||||
list(APPEND PLATFORM_SOURCES
|
||||
"synth_neon_accurate.S"
|
||||
"synth_stereo_neon_accurate.S")
|
||||
else()
|
||||
list(APPEND PLATFORM_SOURCES
|
||||
"dct64_neon.S"
|
||||
"synth_neon.S"
|
||||
"synth_stereo_neon.S")
|
||||
endif()
|
||||
target_sources(${TARGET} PRIVATE ${PLATFORM_SOURCES})
|
||||
target_sources(${TARGET} PRIVATE
|
||||
"dither.c")
|
||||
else()
|
||||
set(PLATFORM_DEFINITIONS OPT_ARM)
|
||||
if(ACCURATE_ROUNDING)
|
||||
set(PLATFORM_SOURCES
|
||||
"synth_arm_accurate.S")
|
||||
else()
|
||||
set(PLATFORM_SOURCES
|
||||
"synth_arm.S")
|
||||
endif()
|
||||
target_sources(${TARGET} PRIVATE ${PLATFORM_SOURCES})
|
||||
endif()
|
||||
elseif(MACHINE STREQUAL "generic")
|
||||
set(PLATFORM_DEFINITIONS OPT_GENERIC)
|
||||
endif()
|
||||
|
||||
#set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME mpg123)
|
||||
|
||||
target_compile_definitions(${TARGET} PRIVATE
|
||||
$<$<BOOL:$<TARGET_PROPERTY:POSITION_INDEPENDENT_CODE>>:PIC>)
|
||||
|
||||
target_compile_definitions(${TARGET} PRIVATE
|
||||
${PLATFORM_DEFINITIONS}
|
||||
$<$<BOOL:${HAVE_FPU}>:REAL_IS_FLOAT>
|
||||
$<$<NOT:$<BOOL:${HAVE_FPU}>>:REAL_IS_FIXED>)
|
||||
|
||||
if(MSVC AND MACHINE MATCHES "x86|amd64" AND YASM_ASSEMBLER)
|
||||
list(TRANSFORM PLATFORM_DEFINITIONS PREPEND /D)
|
||||
foreach(FILE ${PLATFORM_SOURCES})
|
||||
get_filename_component(FILENAME ${FILE} NAME)
|
||||
add_custom_command(
|
||||
OUTPUT ${FILENAME}.asm
|
||||
COMMAND ${CMAKE_C_COMPILER} /DASMALIGN_BALIGN ${PLATFORM_DEFINITIONS}
|
||||
/I"${PROJECT_SOURCE_DIR}/src" /I"${PROJECT_BINARY_DIR}/src" /P /Fi${FILENAME}.asm /Tc "${FILE}"
|
||||
DEPENDS ${FILE}
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
add_custom_command(
|
||||
OUTPUT ${FILENAME}.obj
|
||||
COMMAND ${YASM_ASSEMBLER} -a x86 -m ${MACHINE} -p gas -r raw -f win32 -g null -o ${FILENAME}.obj ${FILENAME}.asm
|
||||
DEPENDS ${FILENAME}.asm
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
target_sources(${TARGET} PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/${FILENAME}.obj")
|
||||
endforeach()
|
||||
else()
|
||||
target_sources(${TARGET} PRIVATE ${PLATFORM_SOURCES})
|
||||
endif()
|
||||
|
||||
if(HAVE_M)
|
||||
string(APPEND LIBMPG123_LIBS " -lm")
|
||||
endif()
|
||||
if(WANT_WIN32_UNICODE)
|
||||
string(APPEND LIBMPG123_LIBS " -lshlwapi")
|
||||
endif()
|
||||
set(LIBMPG123_LIBS "${LIBMPG123_LIBS}" PARENT_SCOPE)
|
||||
target_link_libraries(${TARGET} PRIVATE
|
||||
$<$<BOOL:${HAVE_M}>:m>
|
||||
$<$<BOOL:${WANT_WIN32_UNICODE}>:shlwapi>)
|
||||
target_include_directories(${TARGET} INTERFACE
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
|
||||
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
|
||||
|
||||
install(TARGETS ${TARGET} EXPORT targets
|
||||
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/"
|
||||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/"
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/")
|
||||
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../../src/include/mpg123.h"
|
||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../../src/include/fmt123.h"
|
||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
|
||||
# tildearrow: necessary
|
||||
export(EXPORT targets NAMESPACE MPG123:: FILE mpg123Targets.cmake)
|
||||
3
src/dummy.c
Normal file
3
src/dummy.c
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
int main(int argc, char** argv) {
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue