]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
FreeBSD/build: Files specific for building on FreeBSD
authorWillem Jan Withagen <wjw@digiware.nl>
Thu, 24 Mar 2016 11:47:34 +0000 (12:47 +0100)
committerWillem Jan Withagen <wjw@digiware.nl>
Tue, 10 May 2016 21:41:17 +0000 (23:41 +0200)
 - README.FreeBSD for the description of the current work thusfar
 - do_freebsd.sh, the srcipt to run autobuild/compile/tests
 - autogen_freebsd.sh set the options to use in the auto/configure tools
 - do_freebsd.sh: Install bash and softlink, so other bash scripts can
   run as is. Using /usr/bin/env would be more compliant.
   But not for now. This makes it compatible with the std-linux environment
 - So now we can even have Clang in /usr/bin and /usr/local/bin
   and still get the right one.
 - Use less error suppression, but start fixing warning.

Signed-off-by: Willem Jan Withagen <wjw@digiware.nl>
README.FreeBSD [new file with mode: 0644]
autogen_freebsd.sh [new file with mode: 0644]
do_freebsd.sh [new file with mode: 0755]

diff --git a/README.FreeBSD b/README.FreeBSD
new file mode 100644 (file)
index 0000000..ab29d9c
--- /dev/null
@@ -0,0 +1,59 @@
+
+The FreeBSD build will build most of the tools in Ceph.
+Note that the RBD dependant items will not work since FreeBSD does not have RBS
+
+Build Prerequisites
+===================
+
+Compiling and building Ceph is tested on 11-CURRENT 
+It uses the CLANG toolset that is available, which needs to be atleast 3.7
+Clang 3.4 (on 10.2-STABLE) does not have all required capabilites to compile everything
+
+The following setup will get things running for FreeBSD:
+
+ - Install bash and link it in /bin
+       # requires root privileges
+       sudo pkg install bash
+       sudo ln -s /usr/local/bin/bash /bin/bash
+
+Building Ceph
+=============
+ - Go and start building
+       ./do_freebsd.sh
+
+Parts not (yet) included:
+=========================
+
+ - RBD kernel client
+   Rados Block Devices is implemented in the Linux kernel
+   It seems that there used to be a userspace implementation first.
+   And perhaps ggated could be used as a template since it does some of the
+   same, other than just between 2 disks. And it has a userspace counterpart.
+   * @trociny suggests:
+      Userspace RBD is available under FreeBSD (both librbd and rbd tool 
+      (without linux specific commands) are buildable).
+ - BlueStore.
+   FreeBSD and Linux have different AIO API, and that needs to be made compatible
+   Next to that is there discussion in FreeBSD about aio_cancel not working for all
+   devicetypes
+ - CephFS
+   Cython tries to access an internal field in dirent which does not compile
+
+Tests that verify the correct working of the above are also excluded from the testset
+
+Test not (yet) include:
+=======================
+
+ - ceph-detect-init/run-tox.sh
+   Because the current implementation does not know anything about FreeBSD rc-init.
+ - Tests that make use on nosestests.
+   Calling these doest not really work since nostests is not in /usr/bin, and calling
+   thru /usr/bin/env/nosetests does not work on FreeBSD.
+     test/pybind/test_ceph_argparse.py
+     test/pybind/test_ceph_daemon.py
+
+Things to investigate:
+======================
+
+ - ceph-{osd,mon} need 2 signals before they actually terminate.
+
diff --git a/autogen_freebsd.sh b/autogen_freebsd.sh
new file mode 100644 (file)
index 0000000..e3a578f
--- /dev/null
@@ -0,0 +1,63 @@
+# Set the FreeBSD specific configure flags
+FREEBSD_CONFIGURE_FLAGS=
+if [ x`uname`x = x"FreeBSD"x ]; then
+    MAKE=gmake
+    # We need at least something > clang 3.4
+    # tested with package clang37 on FreeBSD 10.2 ( Which has 3.4 as default )
+    if clang -v 2>&1 | grep -q "3.8" ; then
+        CC=clang
+        CXX=clang++
+    elif [ -f /usr/local/bin/clang37 ]; then
+        CC=clang37
+        CXX=clang++37
+    else
+       echo "Need a better compiler"
+       exit 1
+    fi
+    CWARN=""
+    CLANGWARN="-Wno-unused-function -Wno-unused-local-typedef -Wno-inconsistent-missing-override"
+    CLANGWARN="$CLANGWARN -Wno-unused-private-field"
+    CLANGWARN="$CLANGWARN -Wno-varargs"
+    CLANGWARN="$CLANGWARN -Wno-gnu-designator"
+
+# "-Wno-unused-local-typedef -Wno-mismatched-tags -Wno-macro-redefined -Wno-unused-function -Wno-unused-label -Wno-undefined-bool-conversion -Wno-unused-private-field -Wno-unused-local-typedef -Wno-uninitialized -Wno-gnu-designator -Wno-inconsistent-missing-override -Wno-deprecated-declarations -Wno-parentheses"
+
+    CFLAGS="-g -I/usr/local/include ${CWARN} ${CLANGWARN}"
+    CXXFLAGS="-g -DGTEST_USE_OWN_TR1_TUPLE=1 -I/usr/local/include ${CWARN} ${CLANGWARN}"
+    LDFLAGS="-g ${LDFLAGS} -L/usr/local/lib -export-dynamic -luuid"
+    FREEBSD_CONFIGURE_FLAGS="
+      --disable-silent-rules
+      --disable-gitversion
+      --with-debug
+      --with-rados
+      --without-rbd 
+      --with-radosgw
+      --with-radosstriper
+      --with-mon
+      --with-osd
+      --with-mds
+      --with-radosgw
+      --with-nss
+      --without-tcmalloc
+      --without-libaio
+      --without-libxfs
+      --without-fuse
+      --without-lttng
+      --with-libzfs=no
+      --without-rocksdb
+      --without-cephfs
+        "
+#      --without-radosgw
+#      --with-gnu-ld
+fi
+
+CONFIGURE_FLAGS="${FREEBSD_CONFIGURE_FLAGS}"
+
+# Export these so that ./configure will pick up 
+export MAKE
+export CC
+export CXX
+export CFLAGS
+export CXXFLAGS
+export CONFIGURE_FLAGS
+export LDFLAGS
diff --git a/do_freebsd.sh b/do_freebsd.sh
new file mode 100755 (executable)
index 0000000..eb09362
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/sh -xve
+NPROC=`sysctl -n hw.ncpu`
+
+if [ x"$1"x = x"--deps"x ]; then
+    # we need bash first otherwise almost nothing will work
+    sudo pkg install bash
+    if [ ! -L /bin/bash ]; then
+        echo linking /bin/bash to /usr/local/bin/bash
+        ln -s /usr/local/bin/bash /bin/bash
+    fi
+    sudo ./install-deps.sh
+fi
+. ./autogen_freebsd.sh
+./autogen.sh
+./configure ${CONFIGURE_FLAGS}
+( cd src/gmock/gtest; patch < /usr/ports/devel/googletest/files/patch-bsd-defines )
+gmake -j$NPROC ENABLE_GIT_VERSION=OFF
+gmake -j$NPROC check ENABLE_GIT_VERSION=OFF CEPH_BUFFER_NO_BENCH=yes
+