On the current tip of master, with clang 3.8.0 on my Ubuntu box I get: avc_internal.c:105:25: error: cast from 'char *' to 'struct nlmsghdr *' increases required alignment from 1 to 4 [-Werror,-Wcast-align] struct nlmsghdr *nlh = (struct nlmsghdr *)buf; ^~~~~~~~~~~~~~~~~~~~~~ avc_internal.c:161:25: error: cast from 'char *' to 'struct nlmsghdr *' increases required alignment from 1 to 4 [-Werror,-Wcast-align] struct nlmsghdr *nlh = (struct nlmsghdr *)buf; I'm not sure of the best way to handle that, considering we don't unsure that buf is bigger than a nlmsghdr... I'll send a test patch out in bit. On Tue, Nov 1, 2016 at 12:48 PM, William Roberts <bill.c.roberts@xxxxxxxxx> wrote: > On Tue, Nov 1, 2016 at 11:06 AM, Nicolas Iooss <nicolas.iooss@xxxxxxx> wrote: >> Hello, >> >> After this commit, libselinux fails to build with clang on Linux: >> >> clang-3.9: warning: argument unused during compilation: '-undefined >> dynamic_lookup' >> /usr/bin/ld: unrecognised option: -install_name >> clang-3.9: error: linker command failed with exit code 1 (use -v to >> see invocation) >> >> It seems clang 3.9.0 does not like "-undefined dynamic_lookup" and >> binutils 2.27 does not know about "-install_name". Would it be possible >> to put the lines which add these two options to the compiler command >> lines into a "ifeq ($(OS), Darwin)" block, if they are indeed targeted >> to MacOS? > > I'll look into this, likely needs to be Darwin and clang > >> >> Thanks, >> Nicolas >> >> On 17/10/16 22:24, william.c.roberts@xxxxxxxxx wrote: >>> From: William Roberts <william.c.roberts@xxxxxxxxx> >>> >>> To build on mac, first build libsepol with >>> DISABLE_CIL=y and no DESTDIR set. >>> >>> Secondly, build libselinux with ANDROID_HOST=y >>> >>> This configuration can be used to test the Android >>> host build on Mac. >>> >>> Signed-off-by: William Roberts <william.c.roberts@xxxxxxxxx> >>> --- >>> libselinux/Makefile | 10 ++++++++++ >>> libselinux/src/Makefile | 36 ++++++++++++++++++++++++++---------- >>> libselinux/utils/Makefile | 29 +++++++++++++++++++++-------- >>> 3 files changed, 57 insertions(+), 18 deletions(-) >>> >>> diff --git a/libselinux/Makefile b/libselinux/Makefile >>> index baa0db3..ef971f4 100644 >>> --- a/libselinux/Makefile >>> +++ b/libselinux/Makefile >>> @@ -27,6 +27,16 @@ else >>> endif >>> export PCRE_CFLAGS PCRE_LDFLAGS >>> >>> +OS := $(shell uname) >>> +export OS >>> + >>> +ifeq ($(shell $(CC) -v 2>&1 | grep "clang"),) >>> +COMPILER := gcc >>> +else >>> +COMPILER := clang >>> +endif >>> +export COMPILER >>> + >>> all install relabel clean distclean indent: >>> @for subdir in $(SUBDIRS); do \ >>> (cd $$subdir && $(MAKE) $@) || exit 1; \ >>> diff --git a/libselinux/src/Makefile b/libselinux/src/Makefile >>> index 13501cd..7a1ae05 100644 >>> --- a/libselinux/src/Makefile >>> +++ b/libselinux/src/Makefile >>> @@ -48,23 +48,39 @@ OBJS= $(patsubst %.c,%.o,$(SRCS)) >>> LOBJS= $(patsubst %.c,%.lo,$(SRCS)) >>> CFLAGS ?= -O -Wall -W -Wundef -Wformat-y2k -Wformat-security -Winit-self -Wmissing-include-dirs \ >>> -Wunused -Wunknown-pragmas -Wstrict-aliasing -Wshadow -Wpointer-arith \ >>> - -Wbad-function-cast -Wcast-align -Wwrite-strings -Wlogical-op -Waggregate-return \ >>> + -Wbad-function-cast -Wcast-align -Wwrite-strings -Waggregate-return \ >>> -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes \ >>> -Wmissing-declarations -Wmissing-noreturn -Wmissing-format-attribute \ >>> -Wredundant-decls -Wnested-externs -Winline -Winvalid-pch -Wvolatile-register-var \ >>> - -Wdisabled-optimization -Wbuiltin-macro-redefined -Wpacked-bitfield-compat \ >>> - -Wsync-nand -Wattributes -Wcoverage-mismatch -Wmultichar -Wcpp \ >>> + -Wdisabled-optimization -Wbuiltin-macro-redefined \ >>> + -Wattributes -Wmultichar \ >>> -Wdeprecated-declarations -Wdiv-by-zero -Wdouble-promotion -Wendif-labels -Wextra \ >>> - -Wformat-contains-nul -Wformat-extra-args -Wformat-zero-length -Wformat=2 -Wmultichar \ >>> - -Wnormalized=nfc -Woverflow -Wpointer-to-int-cast -Wpragmas -Wsuggest-attribute=const \ >>> - -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure -Wtrampolines \ >>> - -Wno-missing-field-initializers -Wno-sign-compare -Wjump-misses-init \ >>> - -Wno-format-nonliteral -Wframe-larger-than=$(MAX_STACK_SIZE) -Wp,-D_FORTIFY_SOURCE=2 \ >>> + -Wformat-extra-args -Wformat-zero-length -Wformat=2 -Wmultichar \ >>> + -Woverflow -Wpointer-to-int-cast -Wpragmas \ >>> + -Wno-missing-field-initializers -Wno-sign-compare \ >>> + -Wno-format-nonliteral -Wframe-larger-than=$(MAX_STACK_SIZE) \ >>> -fstack-protector-all --param=ssp-buffer-size=4 -fexceptions \ >>> -fasynchronous-unwind-tables -fdiagnostics-show-option -funit-at-a-time \ >>> - -fipa-pure-const -Wno-suggest-attribute=pure -Wno-suggest-attribute=const \ >>> -Werror -Wno-aggregate-return -Wno-redundant-decls >>> >>> +LD_SONAME_FLAGS=-soname,$(LIBSO),-z,defs,-z,relro >>> + >>> +ifeq ($(COMPILER), gcc) >>> +override CFLAGS += -fipa-pure-const -Wlogical-op -Wpacked-bitfield-compat -Wsync-nand \ >>> + -Wcoverage-mismatch -Wcpp -Wformat-contains-nul -Wnormalized=nfc -Wsuggest-attribute=const \ >>> + -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure -Wtrampolines -Wjump-misses-init \ >>> + -Wno-suggest-attribute=pure -Wno-suggest-attribute=const -Wp,-D_FORTIFY_SOURCE=2 >>> +else >>> +override CFLAGS += -Wunused-command-line-argument >>> +override LDFLAGS += -L/opt/local/lib -undefined dynamic_lookup >>> +LD_SONAME_FLAGS=-install_name,$(LIBSO) >>> +endif >>> + >>> +ifeq ($(OS), Darwin) >>> +override CFLAGS += -I/opt/local/include >>> +override LDFLAGS += -L/opt/local/lib -undefined dynamic_lookup >>> +endif >>> + >>> PCRE_LDFLAGS ?= -lpcre >>> >>> override CFLAGS += -I../include -I$(INCLUDEDIR) -D_GNU_SOURCE $(DISABLE_FLAGS) $(PCRE_CFLAGS) >>> @@ -117,7 +133,7 @@ $(LIBA): $(OBJS) >>> $(RANLIB) $@ >>> >>> $(LIBSO): $(LOBJS) >>> - $(CC) $(CFLAGS) -shared -o $@ $^ $(PCRE_LDFLAGS) -ldl $(LDFLAGS) -L$(LIBDIR) -Wl,-soname,$(LIBSO),-z,defs,-z,relro >>> + $(CC) $(CFLAGS) -shared -o $@ $^ $(PCRE_LDFLAGS) -ldl $(LDFLAGS) -L$(LIBDIR) -Wl,$(LD_SONAME_FLAGS) >>> ln -sf $@ $(TARGET) >>> >>> $(LIBPC): $(LIBPC).in ../VERSION >>> diff --git a/libselinux/utils/Makefile b/libselinux/utils/Makefile >>> index e56a953..a4f9903 100644 >>> --- a/libselinux/utils/Makefile >>> +++ b/libselinux/utils/Makefile >>> @@ -8,22 +8,35 @@ INCLUDEDIR ?= $(PREFIX)/include >>> MAX_STACK_SIZE=8192 >>> CFLAGS ?= -O -Wall -W -Wundef -Wformat-y2k -Wformat-security -Winit-self -Wmissing-include-dirs \ >>> -Wunused -Wunknown-pragmas -Wstrict-aliasing -Wshadow -Wpointer-arith \ >>> - -Wbad-function-cast -Wcast-align -Wwrite-strings -Wlogical-op -Waggregate-return \ >>> + -Wbad-function-cast -Wcast-align -Wwrite-strings -Waggregate-return \ >>> -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes \ >>> -Wmissing-declarations -Wmissing-noreturn -Wmissing-format-attribute \ >>> -Wredundant-decls -Wnested-externs -Winline -Winvalid-pch -Wvolatile-register-var \ >>> - -Wdisabled-optimization -Wbuiltin-macro-redefined -Wpacked-bitfield-compat \ >>> - -Wsync-nand -Wattributes -Wcoverage-mismatch -Wmultichar -Wcpp \ >>> + -Wdisabled-optimization -Wbuiltin-macro-redefined \ >>> + -Wattributes -Wmultichar \ >>> -Wdeprecated-declarations -Wdiv-by-zero -Wdouble-promotion -Wendif-labels -Wextra \ >>> - -Wformat-contains-nul -Wformat-extra-args -Wformat-zero-length -Wformat=2 -Wmultichar \ >>> - -Wnormalized=nfc -Woverflow -Wpointer-to-int-cast -Wpragmas -Wsuggest-attribute=const \ >>> - -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure -Wtrampolines \ >>> - -Wno-missing-field-initializers -Wno-sign-compare -Wjump-misses-init \ >>> + -Wformat-extra-args -Wformat-zero-length -Wformat=2 -Wmultichar \ >>> + -Woverflow -Wpointer-to-int-cast -Wpragmas \ >>> + -Wno-missing-field-initializers -Wno-sign-compare \ >>> -Wno-format-nonliteral -Wframe-larger-than=$(MAX_STACK_SIZE) -Wp,-D_FORTIFY_SOURCE=2 \ >>> -fstack-protector-all --param=ssp-buffer-size=4 -fexceptions \ >>> -fasynchronous-unwind-tables -fdiagnostics-show-option -funit-at-a-time \ >>> - -fipa-pure-const -Wno-suggest-attribute=pure -Wno-suggest-attribute=const \ >>> -Werror -Wno-aggregate-return -Wno-redundant-decls >>> + >>> +LD_SONAME_FLAGS=-soname,$(LIBSO),-z,defs,-z,relro >>> + >>> +ifeq ($(COMPILER), gcc) >>> +override CFLAGS += -fipa-pure-const -Wpacked-bitfield-compat -Wsync-nand -Wcoverage-mismatch \ >>> + -Wcpp -Wformat-contains-nul -Wnormalized=nfc -Wsuggest-attribute=const \ >>> + -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure -Wtrampolines -Wjump-misses-init \ >>> + -Wno-suggest-attribute=pure -Wno-suggest-attribute=const >>> +endif >>> + >>> +ifeq ($(OS), Darwin) >>> +override CFLAGS += -I/opt/local/include -I../../libsepol/include >>> +override LDFLAGS += -L../../libsepol/src -undefined dynamic_lookup >>> +endif >>> + >>> override CFLAGS += -I../include -I$(INCLUDEDIR) -D_GNU_SOURCE $(DISABLE_FLAGS) $(PCRE_CFLAGS) >>> LDLIBS += -L../src -lselinux -L$(LIBDIR) >>> PCRE_LDFLAGS ?= -lpcre >>> >> _______________________________________________ >> Selinux mailing list >> Selinux@xxxxxxxxxxxxx >> To unsubscribe, send email to Selinux-leave@xxxxxxxxxxxxx. >> To get help, send an email containing "help" to Selinux-request@xxxxxxxxxxxxx. > > > > -- > Respectfully, > > William C Roberts -- Respectfully, William C Roberts _______________________________________________ Selinux mailing list Selinux@xxxxxxxxxxxxx To unsubscribe, send email to Selinux-leave@xxxxxxxxxxxxx. To get help, send an email containing "help" to Selinux-request@xxxxxxxxxxxxx.