Merge pull request #176 from JuliaLang/aa/openbsd

Fixes for building on OpenBSD
This commit is contained in:
Alex Arslan 2018-04-07 10:25:01 -07:00 committed by GitHub
commit a844d584d3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 23 additions and 20 deletions

View file

@ -24,12 +24,7 @@ endif
USEGCC = 1
USECLANG = 0
ifeq ($(OS), Darwin)
USEGCC = 0
USECLANG = 1
endif
ifeq ($(OS), FreeBSD)
ifneq (,$(findstring $(OS),Darwin FreeBSD OpenBSD))
USEGCC = 0
USECLANG = 1
endif

View file

@ -83,19 +83,19 @@ openlibm.pc: openlibm.pc.in Make.inc Makefile
install-static: libopenlibm.a
mkdir -p $(DESTDIR)$(libdir)
cp -f -a libopenlibm.a $(DESTDIR)$(libdir)/
cp -RpP -f libopenlibm.a $(DESTDIR)$(libdir)/
install-shared: libopenlibm.$(OLM_MAJOR_MINOR_SHLIB_EXT)
mkdir -p $(DESTDIR)$(shlibdir)
cp -f -a libopenlibm.*$(SHLIB_EXT)* $(DESTDIR)$(shlibdir)/
cp -RpP -f libopenlibm.*$(SHLIB_EXT)* $(DESTDIR)$(shlibdir)/
install-pkgconfig: openlibm.pc
mkdir -p $(DESTDIR)$(pkgconfigdir)
cp -f -a openlibm.pc $(DESTDIR)$(pkgconfigdir)/
cp -RpP -f openlibm.pc $(DESTDIR)$(pkgconfigdir)/
install-headers:
mkdir -p $(DESTDIR)$(includedir)/openlibm
cp -f -a include/*.h $(DESTDIR)$(includedir)/openlibm
cp -f -a src/*.h $(DESTDIR)$(includedir)/openlibm
cp -RpP -f include/*.h $(DESTDIR)$(includedir)/openlibm
cp -RpP -f src/*.h $(DESTDIR)$(includedir)/openlibm
install: install-static install-shared install-pkgconfig install-headers

View file

@ -16,24 +16,20 @@ consistently across compilers and operating systems, and in 32-bit and
OpenLibm builds on Linux, Mac OS X, Windows, FreeBSD, OpenBSD, and DragonFly BSD.
It builds with both GCC and clang. Although largely tested and widely
used on x86 architectures, openlibm also supports ARM and
powerPC.
used on x86 architectures, OpenLibm also supports ARM and
PowerPC.
## Build instructions
1. Use `make` to build OpenLibm.
1. Use GNU Make to build OpenLibm. This is `make` on most systems, but `gmake` on BSDs.
2. Use `make USEGCC=1` to build with GCC. This is the default on
Linux and Windows.
3. Use `make USECLANG=1` to build with clang. This is the default on OS X
and FreeBSD.
3. Use `make USECLANG=1` to build with clang. This is the default on OS X, FreeBSD,
and OpenBSD.
4. Architectures are auto-detected. Use `make ARCH=i386` to force a
build for i386. Other supported architectures are i486, i586, and
i686. GCC 4.8 is the minimum requirement for correct codegen on
older 32-bit architectures.
5. On OpenBSD, you need to install GNU Make (port name: `gmake`) and a recent
version of `gcc` (tested: 4.9.2), as the default version provided by OpenBSD
is too old (4.2.1). If you use OpenBSD's port system for this (port name:
`gcc`), run `make CC=egcc` to force Make to use the newer `gcc`.
## Acknowledgements

View file

@ -78,12 +78,14 @@
/*
* Macro to test if we're using a specific version of gcc or later.
*/
#ifndef __GNUC_PREREQ__
#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
#define __GNUC_PREREQ__(ma, mi) \
(__GNUC__ > (ma) || __GNUC__ == (ma) && __GNUC_MINOR__ >= (mi))
#else
#define __GNUC_PREREQ__(ma, mi) 0
#endif
#endif /* __GNUC_PREREQ__ */
/*
* Compiler-dependent macro to help declare pure (no side effects) functions.

View file

@ -1,6 +1,7 @@
#ifndef _CDEFS_COMPAT_H_
#define _CDEFS_COMPAT_H_
#if !defined(__BEGIN_DECLS)
#if defined(__cplusplus)
#define __BEGIN_DECLS extern "C" {
#define __END_DECLS }
@ -8,6 +9,7 @@
#define __BEGIN_DECLS
#define __END_DECLS
#endif
#endif /* !defined(__BEGIN_DECLS) */
#ifdef __GNUC__
#ifndef __strong_reference
@ -25,18 +27,22 @@
#define __weak_reference(sym,alias) \
__asm__(".weak " #alias); \
__asm__(".equ " #alias ", " #sym)
#ifndef __warn_references
#define __warn_references(sym,msg) \
__asm__(".section .gnu.warning." #sym); \
__asm__(".asciz \"" msg "\""); \
__asm__(".previous")
#endif /* __warn_references */
#else
#define __weak_reference(sym,alias) \
__asm__(".weak alias"); \
__asm__(".equ alias, sym")
#ifndef __warn_references
#define __warn_references(sym,msg) \
__asm__(".section .gnu.warning.sym"); \
__asm__(".asciz \"msg\""); \
__asm__(".previous")
#endif /* __warn_references */
#endif /* __STDC__ */
#elif defined(__clang__) /* CLANG */
#ifdef __STDC__
@ -53,16 +59,20 @@
#define __weak_reference(sym,alias) \
__asm__(".stabs \"_" #alias "\",11,0,0,0"); \
__asm__(".stabs \"_" #sym "\",1,0,0,0")
#ifndef __warn_references
#define __warn_references(sym,msg) \
__asm__(".stabs \"" msg "\",30,0,0,0"); \
__asm__(".stabs \"_" #sym "\",1,0,0,0")
#endif /* __warn_references */
#else
#define __weak_reference(sym,alias) \
__asm__(".stabs \"_/**/alias\",11,0,0,0"); \
__asm__(".stabs \"_/**/sym\",1,0,0,0")
#ifndef __warn_references
#define __warn_references(sym,msg) \
__asm__(".stabs msg,30,0,0,0"); \
__asm__(".stabs \"_/**/sym\",1,0,0,0")
#endif /* __warn_references */
#endif /* __STDC__ */
#endif /* __ELF__ */
#endif /* __weak_reference */