Fixes for embedded HRTFs on OSX

Use an empty source file to build a stub object file, instead of /dev/null. Use
_mh_dylib_header to retrieve the data on 10.7+, instead of _mh_execute_header.
And shorten the names to fit in the 16-character limit.

Thanks to Anna Cheremnykh for the fixes!
This commit is contained in:
Chris Robinson 2016-11-11 13:14:02 -08:00
parent 9ef7719734
commit e69af7ab92
2 changed files with 11 additions and 8 deletions

View File

@ -912,22 +912,23 @@ static const ALubyte *GetResource(int name, size_t *size)
#include <Availability.h>
#include <mach-o/getsect.h>
#include <mach-o/ldsyms.h>
static const ALubyte *GetResource(int name, size_t *size)
{
#if defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && (__MAC_OS_X_VERSION_MAX_ALLOWED >= 1070)
/* NOTE: OSX 10.7 and up need to call getsectiondata(&_mh_execute_header, ...). However, that
/* NOTE: OSX 10.7 and up need to call getsectiondata(&_mh_dylib_header, ...). However, that
* call requires 10.7.
*/
if(name == IDR_DEFAULT_44100_MHR)
return getsectiondata(&_mh_execute_header, "binary", "default_44100_mhr", size);
return getsectiondata(&_mh_dylib_header, "binary", "default_44100", size);
if(name == IDR_DEFAULT_48000_MHR)
return getsectiondata(&_mh_execute_header, "binary", "default_48000_mhr", size);
return getsectiondata(&_mh_dylib_header, "binary", "default_48000", size);
#else
if(name == IDR_DEFAULT_44100_MHR)
return getsectdata("binary", "default_44100_mhr", size);
return getsectdata("binary", "default_44100", size);
if(name == IDR_DEFAULT_48000_MHR)
return getsectdata("binary", "default_48000_mhr", size);
return getsectdata("binary", "default_48000", size);
#endif
*size = 0;
return NULL;

View File

@ -1111,19 +1111,21 @@ if(ALSOFT_EMBED_HRTF_DATA)
elseif(APPLE)
macro(add_custom_binary FILENAME BIN_NAME)
set(outfile ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${FILENAME}${CMAKE_C_OUTPUT_EXTENSION})
set(stubsrcfile ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${FILENAME}.stub.c)
set(stubfile ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${FILENAME}.stub${CMAKE_C_OUTPUT_EXTENSION})
add_custom_command(OUTPUT ${outfile}
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/hrtf/${FILENAME}"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/hrtf"
COMMAND "${CMAKE_C_COMPILER}" -o "${stubfile}" -c /dev/null
COMMAND touch "${stubsrcfile}"
COMMAND "${CMAKE_C_COMPILER}" -o "${stubfile}" -c "${stubsrcfile}"
COMMAND "${CMAKE_LINKER}" -r -o "${outfile}" -sectcreate binary ${BIN_NAME} ${FILENAME} "${stubfile}"
COMMENT "Generating ${FILENAME}${CMAKE_C_OUTPUT_EXTENSION}"
VERBATIM
)
set(ALC_OBJS ${ALC_OBJS} ${outfile})
endmacro()
add_custom_binary(default-44100.mhr "default_44100_mhr")
add_custom_binary(default-48000.mhr "default_48000_mhr")
add_custom_binary(default-44100.mhr "default_44100")
add_custom_binary(default-48000.mhr "default_48000")
else()
set(FILENAMES default-44100.mhr default-48000.mhr)
foreach(FILENAME ${FILENAMES})