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