various fixes for successfully building LMMS for win64
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@1804 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
@@ -2,7 +2,9 @@ INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include")
|
||||
FILE(GLOB SOURCES *.cc)
|
||||
ADD_LIBRARY(caps MODULE ${SOURCES})
|
||||
INSTALL(TARGETS caps LIBRARY DESTINATION ${PLUGIN_DIR}/ladspa)
|
||||
|
||||
IF(LMMS_BUILD_WIN64)
|
||||
ADD_DEFINITIONS(-DLMMS_BUILD_WIN64)
|
||||
ENDIF(LMMS_BUILD_WIN64)
|
||||
SET_TARGET_PROPERTIES(caps PROPERTIES PREFIX "")
|
||||
EXEC_PROGRAM(${CMAKE_C_COMPILER} ARGS --version OUTPUT_VARIABLE _gcc_version_info)
|
||||
STRING(REGEX MATCH "4\\.1\\.[0-9]" _gcc_is_4_1_x "${_gcc_version_info}")
|
||||
@@ -15,7 +17,7 @@ ELSE(NO_O3)
|
||||
ENDIF(NO_O3)
|
||||
|
||||
IF(LMMS_BUILD_WIN32)
|
||||
ADD_CUSTOM_COMMAND(TARGET caps POST_BUILD COMMAND /opt/mingw/bin/i586-mingw32-strip ${CMAKE_CURRENT_BINARY_DIR}/caps.dll)
|
||||
ADD_CUSTOM_COMMAND(TARGET caps POST_BUILD COMMAND ${STRIP} ${CMAKE_CURRENT_BINARY_DIR}/caps.dll)
|
||||
ENDIF(LMMS_BUILD_WIN32)
|
||||
|
||||
IF(LMMS_BUILD_APPLE)
|
||||
|
||||
@@ -147,8 +147,12 @@ kaiser (d_sample * s, int n, double beta)
|
||||
{
|
||||
double k = besseli ((beta * sqrt (1 - pow ((2 * i / (n - 1)), 2)))) / bb;
|
||||
|
||||
#if LMMS_BUILD_WIN64
|
||||
if (!isfinite (k))
|
||||
#else
|
||||
/* can you spell hack */
|
||||
if (!finite (k))
|
||||
#endif
|
||||
k = 0;
|
||||
|
||||
F (s[si], k);
|
||||
|
||||
@@ -7,7 +7,7 @@ SET_TARGET_PROPERTIES(cmt PROPERTIES PREFIX "")
|
||||
SET_TARGET_PROPERTIES(cmt PROPERTIES COMPILE_FLAGS "-Wall -O3 -fno-strict-aliasing")
|
||||
|
||||
IF(LMMS_BUILD_WIN32)
|
||||
ADD_CUSTOM_COMMAND(TARGET cmt POST_BUILD COMMAND /opt/mingw/bin/i586-mingw32-strip ${CMAKE_CURRENT_BINARY_DIR}/cmt.dll)
|
||||
ADD_CUSTOM_COMMAND(TARGET cmt POST_BUILD COMMAND ${STRIP} ${CMAKE_CURRENT_BINARY_DIR}/cmt.dll)
|
||||
ELSE(LMMS_BUILD_WIN32)
|
||||
SET_TARGET_PROPERTIES(cmt PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -fPIC")
|
||||
ENDIF(LMMS_BUILD_WIN32)
|
||||
|
||||
@@ -17,7 +17,7 @@ FOREACH(_item ${PLUGIN_SOURCES})
|
||||
SET_TARGET_PROPERTIES(${_plugin} PROPERTIES PREFIX "")
|
||||
SET_TARGET_PROPERTIES(${_plugin} PROPERTIES COMPILE_FLAGS "-O3 -Wall -fomit-frame-pointer -fstrength-reduce -funroll-loops -ffast-math -c -fno-strict-aliasing")
|
||||
IF(LMMS_BUILD_WIN32)
|
||||
ADD_CUSTOM_COMMAND(TARGET ${_plugin} POST_BUILD COMMAND /opt/mingw/bin/i586-mingw32-strip ${CMAKE_CURRENT_BINARY_DIR}/${_plugin}.dll)
|
||||
ADD_CUSTOM_COMMAND(TARGET ${_plugin} POST_BUILD COMMAND ${STRIP} ${CMAKE_CURRENT_BINARY_DIR}/${_plugin}.dll)
|
||||
ELSE(LMMS_BUILD_WIN32)
|
||||
SET_TARGET_PROPERTIES(${_plugin} PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -fPIC -DPIC")
|
||||
ENDIF(LMMS_BUILD_WIN32)
|
||||
|
||||
@@ -7,7 +7,7 @@ FOREACH(_item ${PLUGIN_SOURCES})
|
||||
INSTALL(TARGETS ${_plugin} LIBRARY DESTINATION ${PLUGIN_DIR}/ladspa)
|
||||
SET_TARGET_PROPERTIES(${_plugin} PROPERTIES PREFIX "")
|
||||
IF(LMMS_BUILD_WIN32)
|
||||
ADD_CUSTOM_COMMAND(TARGET ${_plugin} POST_BUILD COMMAND /opt/mingw/bin/i586-mingw32-strip ${CMAKE_CURRENT_BINARY_DIR}/${_plugin}.dll)
|
||||
ADD_CUSTOM_COMMAND(TARGET ${_plugin} POST_BUILD COMMAND ${STRIP} ${CMAKE_CURRENT_BINARY_DIR}/${_plugin}.dll)
|
||||
ENDIF(LMMS_BUILD_WIN32)
|
||||
IF(LMMS_BUILD_APPLE)
|
||||
SET_TARGET_PROPERTIES(${_plugin} PROPERTIES LINK_FLAGS "${LINK_FLAGS} -shared -no-undefined -Bsymbolic -lm")
|
||||
|
||||
@@ -50,6 +50,8 @@
|
||||
#define __ALLEGRO__
|
||||
#include <assert.h>
|
||||
|
||||
#include "lmmsconfig.h"
|
||||
|
||||
#define ALG_EPS 0.000001 // epsilon
|
||||
#define ALG_DEFAULT_BPM 100.0 // default tempo
|
||||
|
||||
@@ -511,13 +513,17 @@ public:
|
||||
char *fence = buffer + len;
|
||||
assert(ptr < fence);
|
||||
while ((*ptr++ = *s++)) assert(ptr < fence);
|
||||
assert((char *)(((long) (ptr + 7)) & ~7) <= fence);
|
||||
// assert((char *)(((long) (ptr + 7)) & ~7) <= fence);
|
||||
pad(); }
|
||||
void set_int32(long v) { *((long *) ptr) = v; ptr += 4; }
|
||||
void set_double(double v) { *((double *) ptr) = v; ptr += 8; }
|
||||
void set_float(float v) { *((float *) ptr) = v; ptr += 4; }
|
||||
void set_char(char v) { *ptr++ = v; }
|
||||
#ifdef LMMS_BUILD_WIN64
|
||||
void pad() { while (((long long) ptr) & 7) set_char(0); }
|
||||
#else
|
||||
void pad() { while (((long) ptr) & 7) set_char(0); }
|
||||
#endif
|
||||
void *to_heap(long *len) {
|
||||
*len = get_posn();
|
||||
char *newbuf = new char[*len];
|
||||
@@ -539,7 +545,11 @@ public:
|
||||
while (*ptr++) assert(ptr < fence);
|
||||
get_pad();
|
||||
return s; }
|
||||
#ifdef LMMS_BUILD_WIN64
|
||||
void get_pad() { while (((long long) ptr) & 7) ptr++; }
|
||||
#else
|
||||
void get_pad() { while (((long) ptr) & 7) ptr++; }
|
||||
#endif
|
||||
void check_input_buffer(long needed) {
|
||||
assert(get_posn() + needed <= len); }
|
||||
} *Serial_buffer_ptr;
|
||||
|
||||
@@ -7,9 +7,9 @@ BUILD_PLUGIN(vstbase vst_base.cpp vst_plugin.cpp vst_plugin.h communication.h MO
|
||||
|
||||
IF(LMMS_BUILD_WIN32)
|
||||
ADD_DEFINITIONS(-DPTW32_STATIC_LIB)
|
||||
LINK_LIBRARIES(-lQtCore4 -lpthread -lgdi32 -lwsock32)
|
||||
LINK_LIBRARIES(-lQtCore4 -lpthread -lgdi32 -lws2_32)
|
||||
ADD_EXECUTABLE(remote_vst_plugin ${CMAKE_CURRENT_SOURCE_DIR}/remote_vst_plugin.cpp)
|
||||
ADD_CUSTOM_COMMAND(TARGET remote_vst_plugin POST_BUILD COMMAND /opt/mingw/bin/i586-mingw32-strip ${CMAKE_CURRENT_BINARY_DIR}/remote_vst_plugin.exe)
|
||||
ADD_CUSTOM_COMMAND(TARGET remote_vst_plugin POST_BUILD COMMAND ${STRIP} ${CMAKE_CURRENT_BINARY_DIR}/remote_vst_plugin.exe)
|
||||
INSTALL(TARGETS remote_vst_plugin RUNTIME DESTINATION ${PLUGIN_DIR})
|
||||
ENDIF(LMMS_BUILD_WIN32)
|
||||
|
||||
|
||||
166
plugins/vst_base/basename.c
Executable file
166
plugins/vst_base/basename.c
Executable file
@@ -0,0 +1,166 @@
|
||||
/* basename.c
|
||||
*
|
||||
* $Id: basename.c,v 1.2 2007/03/08 23:15:58 keithmarshall Exp $
|
||||
*
|
||||
* Provides an implementation of the "basename" function, conforming
|
||||
* to SUSv3, with extensions to accommodate Win32 drive designators,
|
||||
* and suitable for use on native Microsoft(R) Win32 platforms.
|
||||
*
|
||||
* Written by Keith Marshall <keithmarshall@users.sourceforge.net>
|
||||
*
|
||||
* This is free software. You may redistribute and/or modify it as you
|
||||
* see fit, without restriction of copyright.
|
||||
*
|
||||
* This software is provided "as is", in the hope that it may be useful,
|
||||
* but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
|
||||
* MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
|
||||
* time will the author accept any form of liability for any damages,
|
||||
* however caused, resulting from the use of this software.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <locale.h>
|
||||
|
||||
#ifndef __cdecl /* If compiling on any non-Win32 platform ... */
|
||||
#define __cdecl /* this may not be defined. */
|
||||
#endif
|
||||
|
||||
__cdecl char *basename( char *path )
|
||||
{
|
||||
size_t len;
|
||||
static char *retfail = NULL;
|
||||
|
||||
/* to handle path names for files in multibyte character locales,
|
||||
* we need to set up LC_CTYPE to match the host file system locale
|
||||
*/
|
||||
|
||||
char *locale = setlocale( LC_CTYPE, NULL );
|
||||
if( locale != NULL ) locale = strdup( locale );
|
||||
setlocale( LC_CTYPE, "" );
|
||||
|
||||
if( path && *path )
|
||||
{
|
||||
/* allocate sufficient local storage space,
|
||||
* in which to create a wide character reference copy of path
|
||||
*/
|
||||
|
||||
wchar_t refcopy[1 + (len = mbstowcs( NULL, path, 0 ))];
|
||||
|
||||
/* create the wide character reference copy of path,
|
||||
* and step over the drive designator, if present ...
|
||||
*/
|
||||
|
||||
wchar_t *refpath = refcopy;
|
||||
if( ((len = mbstowcs( refpath, path, len )) > 1) && (refpath[1] == L':') )
|
||||
{
|
||||
/* FIXME: maybe should confirm *refpath is a valid drive designator */
|
||||
|
||||
refpath += 2;
|
||||
}
|
||||
|
||||
/* ensure that our wide character reference path is NUL terminated */
|
||||
|
||||
refcopy[ len ] = L'\0';
|
||||
|
||||
/* check again, just to ensure we still have a non-empty path name ... */
|
||||
|
||||
if( *refpath )
|
||||
{
|
||||
/* and, when we do, process it in the wide character domain ...
|
||||
* scanning from left to right, to the char after the final dir separator
|
||||
*/
|
||||
|
||||
wchar_t *refname;
|
||||
for( refname = refpath ; *refpath ; ++refpath )
|
||||
{
|
||||
if( (*refpath == L'/') || (*refpath == L'\\') )
|
||||
{
|
||||
/* we found a dir separator ...
|
||||
* step over it, and any others which immediately follow it
|
||||
*/
|
||||
|
||||
while( (*refpath == L'/') || (*refpath == L'\\') )
|
||||
++refpath;
|
||||
|
||||
/* if we didn't reach the end of the path string ... */
|
||||
|
||||
if( *refpath )
|
||||
|
||||
/* then we have a new candidate for the base name */
|
||||
|
||||
refname = refpath;
|
||||
|
||||
/* otherwise ...
|
||||
* strip off any trailing dir separators which we found
|
||||
*/
|
||||
|
||||
else while( (refpath > refname)
|
||||
&& ((*--refpath == L'/') || (*refpath == L'\\')) )
|
||||
*refpath = L'\0';
|
||||
}
|
||||
}
|
||||
|
||||
/* in the wide character domain ...
|
||||
* refname now points at the resolved base name ...
|
||||
*/
|
||||
|
||||
if( *refname )
|
||||
{
|
||||
/* if it's not empty,
|
||||
* then we transform the full normalised path back into
|
||||
* the multibyte character domain, and skip over the dirname,
|
||||
* to return the resolved basename.
|
||||
*/
|
||||
|
||||
if( (len = wcstombs( path, refcopy, len )) != (size_t)(-1) )
|
||||
path[ len ] = '\0';
|
||||
*refname = L'\0';
|
||||
if( (len = wcstombs( NULL, refcopy, 0 )) != (size_t)(-1) )
|
||||
path += len;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
/* the basename is empty, so return the default value of "/",
|
||||
* transforming from wide char to multibyte char domain, and
|
||||
* returning it in our own buffer.
|
||||
*/
|
||||
|
||||
retfail = (char *) realloc( retfail, len = 1 + wcstombs( NULL, L"/", 0 ));
|
||||
wcstombs( path = retfail, L"/", len );
|
||||
}
|
||||
|
||||
/* restore the caller's locale, clean up, and return the result */
|
||||
|
||||
setlocale( LC_CTYPE, locale );
|
||||
free( locale );
|
||||
return( path );
|
||||
}
|
||||
|
||||
/* or we had an empty residual path name, after the drive designator,
|
||||
* in which case we simply fall through ...
|
||||
*/
|
||||
}
|
||||
|
||||
/* and, if we get to here ...
|
||||
* the path name is either NULL, or it decomposes to an empty string;
|
||||
* in either case, we return the default value of "." in our own buffer,
|
||||
* reloading it with the correct value, transformed from the wide char
|
||||
* to the multibyte char domain, just in case the caller trashed it
|
||||
* after a previous call.
|
||||
*/
|
||||
|
||||
retfail = (char *) realloc( retfail, len = 1 + wcstombs( NULL, L".", 0 ));
|
||||
wcstombs( retfail, L".", len );
|
||||
|
||||
/* restore the caller's locale, clean up, and return the result */
|
||||
|
||||
setlocale( LC_CTYPE, locale );
|
||||
free( locale );
|
||||
return( retfail );
|
||||
}
|
||||
|
||||
/* $RCSfile: basename.c,v $$Revision: 1.2 $: end of file */
|
||||
@@ -51,8 +51,11 @@
|
||||
#include <windows.h>
|
||||
|
||||
#ifdef LMMS_BUILD_WIN32
|
||||
#ifdef LMMS_BUILD_WIN64
|
||||
#include "basename.c"
|
||||
#else
|
||||
#include <libgen.h>
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -724,8 +727,11 @@ VstIntPtr remoteVstPlugin::hostCallback( AEffect * _effect, VstInt32 _opcode,
|
||||
_timeInfo.timeSigDenominator = 4;
|
||||
_timeInfo.flags |= (/* kVstBarsValid|*/kVstTempoValid );
|
||||
_timeInfo.flags |= kVstTransportPlaying;
|
||||
|
||||
#ifdef LMMS_BUILD_WIN64
|
||||
return( (long long) &_timeInfo );
|
||||
#else
|
||||
return( (long) &_timeInfo );
|
||||
#endif
|
||||
|
||||
case audioMasterProcessEvents:
|
||||
//SHOW_CALLBACK( "amc: audioMasterProcessEvents\n" );
|
||||
|
||||
Reference in New Issue
Block a user