Applied the FreeBSD patch from Ralith, closes ticket #95 , slightly changed but basically the same. Thanx Ralith :)

This commit is contained in:
Tomas Lindquist Olsen 2008-10-02 03:25:46 +02:00
parent e77e235307
commit d0c5df393c
7 changed files with 33 additions and 10 deletions

View file

@ -487,6 +487,9 @@ Expression *Mod(Type *type, Expression *e1, Expression *e2)
c = fmodl(e1->toReal(), r2) + fmodl(e1->toImaginary(), r2) * I; c = fmodl(e1->toReal(), r2) + fmodl(e1->toImaginary(), r2) * I;
#elif defined(IN_GCC) #elif defined(IN_GCC)
c = complex_t(e1->toReal() % r2, e1->toImaginary() % r2); c = complex_t(e1->toReal() % r2, e1->toImaginary() % r2);
#elif defined(__FreeBSD__) && __FreeBSD_version < 800000
// freebsd is kinda messed up. the STABLE branch doesn't support C99's fmodl !?!
c = complex_t(fmod(e1->toReal(), r2), fmod(e1->toImaginary(), r2));
#else #else
c = complex_t(fmodl(e1->toReal(), r2), fmodl(e1->toImaginary(), r2)); c = complex_t(fmodl(e1->toReal(), r2), fmodl(e1->toImaginary(), r2));
#endif #endif
@ -498,6 +501,9 @@ Expression *Mod(Type *type, Expression *e1, Expression *e2)
c = fmodl(e1->toReal(), i2) + fmodl(e1->toImaginary(), i2) * I; c = fmodl(e1->toReal(), i2) + fmodl(e1->toImaginary(), i2) * I;
#elif defined(IN_GCC) #elif defined(IN_GCC)
c = complex_t(e1->toReal() % i2, e1->toImaginary() % i2); c = complex_t(e1->toReal() % i2, e1->toImaginary() % i2);
#elif defined(__FreeBSD__) && __FreeBSD_version < 800000
// freebsd is kinda messed up. the STABLE branch doesn't support C99's fmodl !?!
c = complex_t(fmod(e1->toReal(), i2), fmod(e1->toImaginary(), i2));
#else #else
c = complex_t(fmodl(e1->toReal(), i2), fmodl(e1->toImaginary(), i2)); c = complex_t(fmodl(e1->toReal(), i2), fmodl(e1->toImaginary(), i2));
#endif #endif

View file

@ -330,8 +330,10 @@ int main(int argc, char *argv[])
global.params.os = OSLinux; global.params.os = OSLinux;
#elif __APPLE__ #elif __APPLE__
global.params.os = OSMacOSX; global.params.os = OSMacOSX;
#elif __FreeBSD__
global.params.os = OSFreeBSD;
#else #else
#error #error Unsupported OS
#endif /* linux */ #endif /* linux */
assert(global.params.os != OSinvalid); assert(global.params.os != OSinvalid);
@ -843,6 +845,11 @@ int main(int argc, char *argv[])
global.params.tt_os = "-pc-darwin-gnu"; global.params.tt_os = "-pc-darwin-gnu";
break; break;
case OSFreeBSD:
VersionCondition::addPredefinedGlobalIdent("freebsd");
VersionCondition::addPredefinedGlobalIdent("Posix");
break;
default: default:
assert(false && "Target OS not supported"); assert(false && "Target OS not supported");
} }

View file

@ -52,7 +52,8 @@ enum OS
OSinvalid, OSinvalid,
OSLinux, OSLinux,
OSWindows, OSWindows,
OSMacOSX OSMacOSX,
OSFreeBSD
}; };
// Put command line switches in here // Put command line switches in here

View file

@ -151,15 +151,18 @@ int linkExecutable(const char* argv0)
} }
// default libs // default libs
if(global.params.os == OSLinux || global.params.os == OSMacOSX) switch(global.params.os) {
{ case OSLinux:
args.push_back("-lpthread"); case OSMacOSX:
args.push_back("-ldl"); args.push_back("-ldl");
case OSFreeBSD:
args.push_back("-lpthread");
args.push_back("-lm"); args.push_back("-lm");
} break;
else if (global.params.os == OSWindows)
{ case OSWindows:
// FIXME: I'd assume kernel32 etc // FIXME: I'd assume kernel32 etc
break;
} }
// object files // object files

View file

@ -704,6 +704,12 @@ const LLStructType* DtoMutexType()
return LLStructType::get(types); return LLStructType::get(types);
} }
// FreeBSD
else if (global.params.os == OSFreeBSD) {
// Just a pointer
return LLStructType::get(DtoSize_t(), 0);
}
// pthread_fastlock // pthread_fastlock
std::vector<const LLType*> types2; std::vector<const LLType*> types2;
types2.push_back(DtoSize_t()); types2.push_back(DtoSize_t());

View file

@ -75,7 +75,7 @@ void _STD_critical_term()
/* ================================= linux ============================ */ /* ================================= linux ============================ */
#if linux || __APPLE__ #if linux || __APPLE__ || __FreeBSD__
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/bin/sh
# check for command line arguments # check for command line arguments
if [ -z "$1" ] ; then if [ -z "$1" ] ; then