Bläddra i källkod

Merge pull request #176 from JuliaLang/aa/openbsd

Fixes for building on OpenBSD
Alex Arslan 7 år sedan
förälder
incheckning
a844d584d3
5 ändrade filer med 23 tillägg och 20 borttagningar
  1. 1 6
      Make.inc
  2. 5 5
      Makefile
  3. 5 9
      README.md
  4. 2 0
      src/bsd_cdefs.h
  5. 10 0
      src/cdefs-compat.h

+ 1 - 6
Make.inc

@@ -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

+ 5 - 5
Makefile

@@ -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

+ 5 - 9
README.md

@@ -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
 

+ 2 - 0
src/bsd_cdefs.h

@@ -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.

+ 10 - 0
src/cdefs-compat.h

@@ -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 */