Просмотр исходного кода

Merge pull request #176 from JuliaLang/aa/openbsd

Fixes for building on OpenBSD
Alex Arslan 7 лет назад
Родитель
Сommit
a844d584d3
5 измененных файлов с 23 добавлено и 20 удалено
  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
 USEGCC = 1
 USECLANG = 0
 USECLANG = 0
 
 
-ifeq ($(OS), Darwin)
-USEGCC = 0
-USECLANG = 1
-endif
-
-ifeq ($(OS), FreeBSD)
+ifneq (,$(findstring $(OS),Darwin FreeBSD OpenBSD))
 USEGCC = 0
 USEGCC = 0
 USECLANG = 1
 USECLANG = 1
 endif
 endif

+ 5 - 5
Makefile

@@ -83,19 +83,19 @@ openlibm.pc: openlibm.pc.in Make.inc Makefile
 
 
 install-static: libopenlibm.a
 install-static: libopenlibm.a
 	mkdir -p $(DESTDIR)$(libdir)
 	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)
 install-shared: libopenlibm.$(OLM_MAJOR_MINOR_SHLIB_EXT)
 	mkdir -p $(DESTDIR)$(shlibdir)
 	mkdir -p $(DESTDIR)$(shlibdir)
-	cp -f -a libopenlibm.*$(SHLIB_EXT)* $(DESTDIR)$(shlibdir)/
+	cp -RpP -f libopenlibm.*$(SHLIB_EXT)* $(DESTDIR)$(shlibdir)/
 
 
 install-pkgconfig: openlibm.pc
 install-pkgconfig: openlibm.pc
 	mkdir -p $(DESTDIR)$(pkgconfigdir)
 	mkdir -p $(DESTDIR)$(pkgconfigdir)
-	cp -f -a openlibm.pc $(DESTDIR)$(pkgconfigdir)/
+	cp -RpP -f openlibm.pc $(DESTDIR)$(pkgconfigdir)/
 
 
 install-headers:
 install-headers:
 	mkdir -p $(DESTDIR)$(includedir)/openlibm
 	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
 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.
 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
 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
 ## 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
 2. Use `make USEGCC=1` to build with GCC. This is the default on
    Linux and Windows.
    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
 4. Architectures are auto-detected. Use `make ARCH=i386` to force a
    build for i386. Other supported architectures are i486, i586, and
    build for i386. Other supported architectures are i486, i586, and
    i686. GCC 4.8 is the minimum requirement for correct codegen on
    i686. GCC 4.8 is the minimum requirement for correct codegen on
    older 32-bit architectures.
    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
 ## 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.
  * Macro to test if we're using a specific version of gcc or later.
  */
  */
+#ifndef __GNUC_PREREQ__
 #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
 #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
 #define	__GNUC_PREREQ__(ma, mi)	\
 #define	__GNUC_PREREQ__(ma, mi)	\
 	(__GNUC__ > (ma) || __GNUC__ == (ma) && __GNUC_MINOR__ >= (mi))
 	(__GNUC__ > (ma) || __GNUC__ == (ma) && __GNUC_MINOR__ >= (mi))
 #else
 #else
 #define	__GNUC_PREREQ__(ma, mi)	0
 #define	__GNUC_PREREQ__(ma, mi)	0
 #endif
 #endif
+#endif /* __GNUC_PREREQ__ */
 
 
 /*
 /*
  * Compiler-dependent macro to help declare pure (no side effects) functions.
  * 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_
 #ifndef _CDEFS_COMPAT_H_
 #define	_CDEFS_COMPAT_H_
 #define	_CDEFS_COMPAT_H_
 
 
+#if !defined(__BEGIN_DECLS)
 #if defined(__cplusplus)
 #if defined(__cplusplus)
 #define	__BEGIN_DECLS	extern "C" {
 #define	__BEGIN_DECLS	extern "C" {
 #define	__END_DECLS	}
 #define	__END_DECLS	}
@@ -8,6 +9,7 @@
 #define	__BEGIN_DECLS
 #define	__BEGIN_DECLS
 #define	__END_DECLS
 #define	__END_DECLS
 #endif
 #endif
+#endif /* !defined(__BEGIN_DECLS) */
 
 
 #ifdef __GNUC__
 #ifdef __GNUC__
 #ifndef __strong_reference
 #ifndef __strong_reference
@@ -25,18 +27,22 @@
 #define	__weak_reference(sym,alias)	\
 #define	__weak_reference(sym,alias)	\
 	__asm__(".weak " #alias);	\
 	__asm__(".weak " #alias);	\
 	__asm__(".equ "  #alias ", " #sym)
 	__asm__(".equ "  #alias ", " #sym)
+#ifndef __warn_references
 #define	__warn_references(sym,msg)	\
 #define	__warn_references(sym,msg)	\
 	__asm__(".section .gnu.warning." #sym);	\
 	__asm__(".section .gnu.warning." #sym);	\
 	__asm__(".asciz \"" msg "\"");	\
 	__asm__(".asciz \"" msg "\"");	\
 	__asm__(".previous")
 	__asm__(".previous")
+#endif /* __warn_references */
 #else
 #else
 #define	__weak_reference(sym,alias)	\
 #define	__weak_reference(sym,alias)	\
 	__asm__(".weak alias");		\
 	__asm__(".weak alias");		\
 	__asm__(".equ alias, sym")
 	__asm__(".equ alias, sym")
+#ifndef __warn_references
 #define	__warn_references(sym,msg)	\
 #define	__warn_references(sym,msg)	\
 	__asm__(".section .gnu.warning.sym"); \
 	__asm__(".section .gnu.warning.sym"); \
 	__asm__(".asciz \"msg\"");	\
 	__asm__(".asciz \"msg\"");	\
 	__asm__(".previous")
 	__asm__(".previous")
+#endif	/* __warn_references */
 #endif	/* __STDC__ */
 #endif	/* __STDC__ */
 #elif defined(__clang__) /* CLANG */
 #elif defined(__clang__) /* CLANG */
 #ifdef __STDC__
 #ifdef __STDC__
@@ -53,16 +59,20 @@
 #define __weak_reference(sym,alias)	\
 #define __weak_reference(sym,alias)	\
 	__asm__(".stabs \"_" #alias "\",11,0,0,0");	\
 	__asm__(".stabs \"_" #alias "\",11,0,0,0");	\
 	__asm__(".stabs \"_" #sym "\",1,0,0,0")
 	__asm__(".stabs \"_" #sym "\",1,0,0,0")
+#ifndef __warn_references
 #define __warn_references(sym,msg)	\
 #define __warn_references(sym,msg)	\
 	__asm__(".stabs \"" msg "\",30,0,0,0");		\
 	__asm__(".stabs \"" msg "\",30,0,0,0");		\
 	__asm__(".stabs \"_" #sym "\",1,0,0,0")
 	__asm__(".stabs \"_" #sym "\",1,0,0,0")
+#endif /* __warn_references */
 #else
 #else
 #define __weak_reference(sym,alias)	\
 #define __weak_reference(sym,alias)	\
 	__asm__(".stabs \"_/**/alias\",11,0,0,0");	\
 	__asm__(".stabs \"_/**/alias\",11,0,0,0");	\
 	__asm__(".stabs \"_/**/sym\",1,0,0,0")
 	__asm__(".stabs \"_/**/sym\",1,0,0,0")
+#ifndef __warn_references
 #define __warn_references(sym,msg)	\
 #define __warn_references(sym,msg)	\
 	__asm__(".stabs msg,30,0,0,0");			\
 	__asm__(".stabs msg,30,0,0,0");			\
 	__asm__(".stabs \"_/**/sym\",1,0,0,0")
 	__asm__(".stabs \"_/**/sym\",1,0,0,0")
+#endif	/* __warn_references */
 #endif	/* __STDC__ */
 #endif	/* __STDC__ */
 #endif	/* __ELF__ */
 #endif	/* __ELF__ */
 #endif  /* __weak_reference */
 #endif  /* __weak_reference */