From: Andrew Waterman Date: Fri, 24 Jan 2014 09:09:05 +0000 (-0800) Subject: Build and use shared libraries X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4a2f98e35f30f3d2e252f068d4afc65cfe2cb0fe;p=riscv-isa-sim.git Build and use shared libraries --- diff --git a/Makefile.in b/Makefile.in index 45e3a11..9cd36d1 100644 --- a/Makefile.in +++ b/Makefile.in @@ -61,7 +61,7 @@ else endif install_hdrs_dir := $(DESTDIR)/include/$(project_name) -install_libs_dir := $(DESTDIR)/lib/$(project_name) +install_libs_dir := $(DESTDIR)/lib install_exes_dir := $(DESTDIR)/bin #------------------------------------------------------------------------- @@ -84,21 +84,22 @@ VPATH := $(addprefix $(src_dir)/, $(sprojs_enabled)) CC := @CC@ CXX := @CXX@ -CFLAGS += @CFLAGS@ +CFLAGS += @CFLAGS@ -DPREFIX=\"$(prefix)\" CPPFLAGS += @CPPFLAGS@ -CXXFLAGS += @CXXFLAGS@ -COMPILE := $(CXX) -MMD -MP $(CPPFLAGS) $(CFLAGS) $(CXXFLAGS) \ +CXXFLAGS += @CXXFLAGS@ -DPREFIX=\"$(prefix)\" +COMPILE := $(CXX) -fPIC -MMD -MP $(CPPFLAGS) $(CFLAGS) $(CXXFLAGS) \ $(sprojs_include) -COMPILE_C := $(CC) -MMD -MP $(CPPFLAGS) $(CFLAGS) \ +COMPILE_C := $(CC) -fPIC -MMD -MP $(CPPFLAGS) $(CFLAGS) \ $(sprojs_include) # Linker # - LDFLAGS : Flags for the linker (eg. -L) # - LIBS : Library flags (eg. -l) +comma := , LD := $(CXX) LDFLAGS := @LDFLAGS@ LIBS := @LIBS@ -LINK := $(LD) $(LDFLAGS) +LINK := $(LD) $(LDFLAGS) -Wl,-rpath,$(install_libs_dir) $(patsubst -L%,-Wl$(comma)-rpath$(comma)%,$(filter -L%,$(LDFLAGS))) # Library creation @@ -196,11 +197,10 @@ $(2)_junk += $$($(2)_objs) $$($(2)_c_objs) $$($(2)_deps) $$($(2)_c_deps) $$($(2) # Build a library for this subproject -lib$(1).a : $$($(2)_objs) $$($(2)_c_objs) - $(AR) rcv $$@ $$^ - $(RANLIB) $$@ +lib$(1).so : $$($(2)_objs) $$($(2)_c_objs) + $(CXX) -shared -o $$@ $$^ -$(2)_junk += lib$(1).a +$(2)_junk += lib$(1).so # Reverse the dependency list so that a given subproject only depends on # subprojects listed to its right. This is the correct order for linking @@ -215,7 +215,7 @@ $(2)_test_deps := $$(patsubst %.o, %.d, $$($(2)_test_objs)) $(2)_test_exes := $$(patsubst %.t.cc, %-utst, $$($(2)_test_srcs)) $(2)_test_outs := $$(patsubst %, %.out, $$($(2)_test_exes)) $(2)_test_libs := $(1) $$($(2)_reverse_deps) utst -$(2)_test_libnames := $$(patsubst %, lib%.a, $$($(2)_test_libs)) +$(2)_test_libnames := $$(patsubst %, lib%.so, $$($(2)_test_libs)) $(2)_test_libarg := -L. $$(patsubst %, -l%, $$($(2)_test_libs)) $$($(2)_test_objs) : %.o : %.cc @@ -242,7 +242,7 @@ $(2)_prog_objs := $$(patsubst %.cc, %.o, $$($(2)_prog_srcs)) $(2)_prog_deps := $$(patsubst %.o, %.d, $$($(2)_prog_objs)) $(2)_prog_exes := $$(patsubst %.cc, %, $$($(2)_prog_srcs)) $(2)_prog_libs := $(1) $$($(2)_reverse_deps) -$(2)_prog_libnames := $$(patsubst %, lib%.a, $$($(2)_prog_libs)) +$(2)_prog_libnames := $$(patsubst %, lib%.so, $$($(2)_prog_libs)) $(2)_prog_libarg := -L. $$(patsubst %, -l%, $$($(2)_prog_libs)) $$($(2)_prog_objs) : %.o : %.cc @@ -273,7 +273,7 @@ $(2)_junk += \ # Subproject specific targets -all-$(1) : lib$(1).a $$($(2)_install_prog_exes) +all-$(1) : lib$(1).so $$($(2)_install_prog_exes) check-$(1) : $$($(2)_test_outs) echo; grep -h -e'Unit Tests' -e'FAILED' -e'Segementation' $$^; echo @@ -285,7 +285,7 @@ clean-$(1) : # Update running variables -libs += lib$(1).a +libs += lib$(1).so objs += $$($(2)_objs) srcs += $$(addprefix $(src_dir)/$(1)/, $$($(2)_srcs)) hdrs += $$(addprefix $(src_dir)/$(1)/, $$($(2)_hdrs)) $$($(2)_gen_hdrs) @@ -295,7 +295,7 @@ deps += $$($(2)_deps) test_outs += $$($(2)_test_outs) install_hdrs += $$(addprefix $(src_dir)/$(1)/, $$($(2)_hdrs)) $$($(2)_gen_hdrs) -install_libs += lib$(1).a +install_libs += lib$(1).so install_exes += $$($(2)_install_prog_exes) endef diff --git a/configure b/configure index 424e82c..1eab8a3 100755 --- a/configure +++ b/configure @@ -4081,13 +4081,13 @@ if test "${with_fesvr+set}" = set; then : fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libfesvr_is_present in -lfesvr" >&5 -$as_echo_n "checking for libfesvr_is_present in -lfesvr... " >&6; } -if ${ac_cv_lib_fesvr_libfesvr_is_present+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 +$as_echo_n "checking for pthread_create in -lpthread... " >&6; } +if ${ac_cv_lib_pthread_pthread_create+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lfesvr $LIBS" +LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4097,45 +4097,45 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #ifdef __cplusplus extern "C" #endif -char libfesvr_is_present (); +char pthread_create (); int main () { -return libfesvr_is_present (); +return pthread_create (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_fesvr_libfesvr_is_present=yes + ac_cv_lib_pthread_pthread_create=yes else - ac_cv_lib_fesvr_libfesvr_is_present=no + ac_cv_lib_pthread_pthread_create=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fesvr_libfesvr_is_present" >&5 -$as_echo "$ac_cv_lib_fesvr_libfesvr_is_present" >&6; } -if test "x$ac_cv_lib_fesvr_libfesvr_is_present" = xyes; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; } +if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then : cat >>confdefs.h <<_ACEOF -#define HAVE_LIBFESVR 1 +#define HAVE_LIBPTHREAD 1 _ACEOF - LIBS="-lfesvr $LIBS" + LIBS="-lpthread $LIBS" else - as_fn_error $? "libfesvr is required" "$LINENO" 5 + as_fn_error $? "libpthread is required" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 -$as_echo_n "checking for pthread_create in -lpthread... " >&6; } -if ${ac_cv_lib_pthread_pthread_create+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libfesvr_is_present in -lfesvr" >&5 +$as_echo_n "checking for libfesvr_is_present in -lfesvr... " >&6; } +if ${ac_cv_lib_fesvr_libfesvr_is_present+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lpthread $LIBS" +LIBS="-lfesvr $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4145,35 +4145,35 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #ifdef __cplusplus extern "C" #endif -char pthread_create (); +char libfesvr_is_present (); int main () { -return pthread_create (); +return libfesvr_is_present (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_pthread_pthread_create=yes + ac_cv_lib_fesvr_libfesvr_is_present=yes else - ac_cv_lib_pthread_pthread_create=no + ac_cv_lib_fesvr_libfesvr_is_present=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5 -$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; } -if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fesvr_libfesvr_is_present" >&5 +$as_echo "$ac_cv_lib_fesvr_libfesvr_is_present" >&6; } +if test "x$ac_cv_lib_fesvr_libfesvr_is_present" = xyes; then : cat >>confdefs.h <<_ACEOF -#define HAVE_LIBPTHREAD 1 +#define HAVE_LIBFESVR 1 _ACEOF - LIBS="-lpthread $LIBS" + LIBS="-lfesvr $LIBS" else - as_fn_error $? "libpthread is required" "$LINENO" 5 + as_fn_error $? "libfesvr is required" "$LINENO" 5 fi diff --git a/riscv/riscv.ac b/riscv/riscv.ac index cfb9d71..36a5b6f 100644 --- a/riscv/riscv.ac +++ b/riscv/riscv.ac @@ -7,10 +7,10 @@ AC_ARG_WITH([fesvr], ] ) -AC_CHECK_LIB(fesvr, libfesvr_is_present, [], [AC_MSG_ERROR([libfesvr is required])]) - AC_CHECK_LIB(pthread, pthread_create, [], [AC_MSG_ERROR([libpthread is required])]) +AC_CHECK_LIB(fesvr, libfesvr_is_present, [], [AC_MSG_ERROR([libfesvr is required])]) + AC_ARG_ENABLE([fpu], AS_HELP_STRING([--disable-fpu], [Disable floating-point])) AS_IF([test "x$enable_fpu" != "xno"], [ AC_DEFINE([RISCV_ENABLE_FPU],,[Define if floating-point instructions are supported])