Commit f32c6782 authored by Lorenz Huedepohl's avatar Lorenz Huedepohl
Browse files

Change suffix _mt into _openmp

_mt implies thread-safety, which is not what the OpenMP version does.

Additionally, only install a subset of the test-programs
parent 7d832d80
...@@ -6,140 +6,73 @@ AM_FCFLAGS = $(SCALAPACK_FCFLAGS) @FC_MODINC@modules @FC_MODOUT@modules ...@@ -6,140 +6,73 @@ AM_FCFLAGS = $(SCALAPACK_FCFLAGS) @FC_MODINC@modules @FC_MODOUT@modules
AM_LDFLAGS = $(SCALAPACK_LDFLAGS) AM_LDFLAGS = $(SCALAPACK_LDFLAGS)
# libelpa # libelpa
if WITH_OPENMP lib_LTLIBRARIES = libelpa-@PACKAGE_VERSION@@SUFFIX@.la
lib_LTLIBRARIES = libelpa-@PACKAGE_VERSION@_mt.la libelpa_@PACKAGE_VERSION@@SUFFIX@_la_LINK = $(FCLINK)
libelpa_@PACKAGE_VERSION@_mt_la_LINK = $(FCLINK) libelpa_@PACKAGE_VERSION@@SUFFIX@_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(ELPA_SO_VERSION) -lstdc++
libelpa_@PACKAGE_VERSION@_mt_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(ELPA_SO_VERSION) -lstdc++
else
lib_LTLIBRARIES = libelpa-@PACKAGE_VERSION@.la
libelpa_@PACKAGE_VERSION@_la_LINK = $(FCLINK)
libelpa_@PACKAGE_VERSION@_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(ELPA_SO_VERSION) -lstdc++
endif
##rule to produce fortran config file: ##rule to produce fortran config file:
#config_f90.h: ./config.h #config_f90.h: ./config.h
# grep "^#define" ./config.h > $@ # grep "^#define" ./config.h > $@
if WITH_OPENMP libelpa_@PACKAGE_VERSION@@SUFFIX@_la_SOURCES = src/elpa1.F90 src/elpa2.F90
libelpa_@PACKAGE_VERSION@_mt_la_SOURCES = src/elpa1.F90 src/elpa2.F90
else
libelpa_@PACKAGE_VERSION@_la_SOURCES = src/elpa1.F90 src/elpa2.F90
endif
if WITH_REAL_GENERIC_KERNEL if WITH_REAL_GENERIC_KERNEL
if WITH_OPENMP libelpa_@PACKAGE_VERSION@@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real.f90
libelpa_@PACKAGE_VERSION@_mt_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real.f90
else
libelpa_@PACKAGE_VERSION@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real.f90
endif
endif endif
if WITH_COMPLEX_GENERIC_KERNEL if WITH_COMPLEX_GENERIC_KERNEL
if WITH_OPENMP libelpa_@PACKAGE_VERSION@@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex.f90
libelpa_@PACKAGE_VERSION@_mt_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex.f90
else
libelpa_@PACKAGE_VERSION@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex.f90
endif
endif endif
if WITH_REAL_GENERIC_SIMPLE_KERNEL if WITH_REAL_GENERIC_SIMPLE_KERNEL
if WITH_OPENMP libelpa_@PACKAGE_VERSION@@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_simple.f90
libelpa_@PACKAGE_VERSION@_mt_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_simple.f90
else
libelpa_@PACKAGE_VERSION@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_simple.f90
endif
endif endif
if WITH_COMPLEX_GENERIC_SIMPLE_KERNEL if WITH_COMPLEX_GENERIC_SIMPLE_KERNEL
if WITH_OPENMP libelpa_@PACKAGE_VERSION@@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_simple.f90
libelpa_@PACKAGE_VERSION@_mt_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_simple.f90
else
libelpa_@PACKAGE_VERSION@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_simple.f90
endif
endif endif
if WITH_REAL_BGP_KERNEL if WITH_REAL_BGP_KERNEL
if WITH_OPENMP libelpa_@PACKAGE_VERSION@@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_bgp.f90
libelpa_@PACKAGE_VERSION@_mt_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_bgp.f90
else
libelpa_@PACKAGE_VERSION@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_bgp.f90
endif
endif endif
if WITH_REAL_BGQ_KERNEL if WITH_REAL_BGQ_KERNEL
if WITH_OPENMP libelpa_@PACKAGE_VERSION@@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_bgq.f90
libelpa_@PACKAGE_VERSION@_mt_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_bgq.f90
else
libelpa_@PACKAGE_VERSION@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_bgq.f90
endif
endif endif
if WITH_REAL_SSE_KERNEL if WITH_REAL_SSE_KERNEL
if WITH_OPENMP libelpa_@PACKAGE_VERSION@@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_asm_x86_64.s
libelpa_@PACKAGE_VERSION@_mt_la_SOURCES += src/elpa2_kernels/elpa2_kernels_asm_x86_64.s
else
libelpa_@PACKAGE_VERSION@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_asm_x86_64.s
endif
else else
if WITH_COMPLEX_SSE_KERNEL if WITH_COMPLEX_SSE_KERNEL
if WITH_OPENMP libelpa_@PACKAGE_VERSION@@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_asm_x86_64.s
libelpa_@PACKAGE_VERSION@_mt_la_SOURCES += src/elpa2_kernels/elpa2_kernels_asm_x86_64.s
else
libelpa_@PACKAGE_VERSION@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_asm_x86_64.s
endif
endif endif
endif endif
if WITH_REAL_AVX_BLOCK2_KERNEL if WITH_REAL_AVX_BLOCK2_KERNEL
if WITH_OPENMP libelpa_@PACKAGE_VERSION@@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse-avx_2hv.c
libelpa_@PACKAGE_VERSION@_mt_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse-avx_2hv.c
else
libelpa_@PACKAGE_VERSION@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse-avx_2hv.c
endif
endif endif
if WITH_REAL_AVX_BLOCK4_KERNEL if WITH_REAL_AVX_BLOCK4_KERNEL
if WITH_OPENMP libelpa_@PACKAGE_VERSION@@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse-avx_4hv.c
libelpa_@PACKAGE_VERSION@_mt_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse-avx_4hv.c
else
libelpa_@PACKAGE_VERSION@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse-avx_4hv.c
endif
endif endif
if WITH_REAL_AVX_BLOCK6_KERNEL if WITH_REAL_AVX_BLOCK6_KERNEL
if WITH_OPENMP libelpa_@PACKAGE_VERSION@@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse-avx_6hv.c
libelpa_@PACKAGE_VERSION@_mt_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse-avx_6hv.c
else
libelpa_@PACKAGE_VERSION@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse-avx_6hv.c
endif
endif endif
if WITH_COMPLEX_AVX_BLOCK1_KERNEL if WITH_COMPLEX_AVX_BLOCK1_KERNEL
if WITH_OPENMP libelpa_@PACKAGE_VERSION@@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_sse-avx_1hv.cpp
libelpa_@PACKAGE_VERSION@_mt_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_sse-avx_1hv.cpp
else
libelpa_@PACKAGE_VERSION@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_sse-avx_1hv.cpp
endif
endif endif
if WITH_COMPLEX_AVX_BLOCK2_KERNEL if WITH_COMPLEX_AVX_BLOCK2_KERNEL
if WITH_OPENMP libelpa_@PACKAGE_VERSION@@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_sse-avx_2hv.cpp
libelpa_@PACKAGE_VERSION@_mt_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_sse-avx_2hv.cpp
else
libelpa_@PACKAGE_VERSION@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_sse-avx_2hv.cpp
endif
endif endif
#if WITH_AVX_SANDYBRIDGE #if WITH_AVX_SANDYBRIDGE
#if WITH_OPENMP # libelpa_@PACKAGE_VERSION@@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse-avx_2hv.c \
# libelpa_@PACKAGE_VERSION@_mt_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse-avx_2hv.c \
# src/elpa2_kernels/elpa2_kernels_complex_sse-avx_1hv.cpp
#else
# libelpa_@PACKAGE_VERSION@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse-avx_2hv.c \
# src/elpa2_kernels/elpa2_kernels_complex_sse-avx_1hv.cpp # src/elpa2_kernels/elpa2_kernels_complex_sse-avx_1hv.cpp
#endif #endif
#endif
# install any .mod files in the include/ dir # install any .mod files in the include/ dir
elpa_includedir = $(includedir)/elpa-@PACKAGE_VERSION@ elpa_includedir = $(includedir)/elpa-@PACKAGE_VERSION@
...@@ -164,55 +97,52 @@ dist_files_DATA = \ ...@@ -164,55 +97,52 @@ dist_files_DATA = \
dist_doc_DATA = README COPYING/COPYING COPYING/gpl.txt COPYING/lgpl.txt dist_doc_DATA = README COPYING/COPYING COPYING/gpl.txt COPYING/lgpl.txt
# test programs
if WITH_OPENMP
build_lib = libelpa-@PACKAGE_VERSION@_mt.la
else
build_lib = libelpa-@PACKAGE_VERSION@.la
endif
# pkg-config stuff # pkg-config stuff
pkgconfigdir = $(libdir)/pkgconfig pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = @PKG_CONFIG_FILE@ pkgconfig_DATA = @PKG_CONFIG_FILE@
# programs # programs
bin_PROGRAMS = \ bin_PROGRAMS = \
elpa1_test_real \ elpa1_test_real@SUFFIX@ \
elpa1_test_complex \ elpa1_test_complex@SUFFIX@ \
elpa2_print_kernels \ elpa2_test_real@SUFFIX@ \
elpa2_test_real \ elpa2_test_complex@SUFFIX@ \
elpa2_test_real_default_kernel \ elpa2_print_kernels@SUFFIX@
elpa2_test_complex \
elpa2_test_complex_default_kernel \ noinst_PROGRAMS = \
elpa2_test_real_choose_kernel_with_api \ elpa2_test_real_default_kernel@SUFFIX@ \
elpa2_test_complex_choose_kernel_with_api elpa2_test_complex_default_kernel@SUFFIX@ \
elpa2_test_real_choose_kernel_with_api@SUFFIX@ \
elpa2_test_complex_choose_kernel_with_api@SUFFIX@
build_lib = libelpa-@PACKAGE_VERSION@@SUFFIX@.la
elpa1_test_real_SOURCES = test/test_real.F90 elpa1_test_real@SUFFIX@_SOURCES = test/test_real.F90
elpa1_test_real_LDADD = $(build_lib) elpa1_test_real@SUFFIX@_LDADD = $(build_lib)
elpa2_test_real_SOURCES = test/test_real2.F90 elpa2_test_real@SUFFIX@_SOURCES = test/test_real2.F90
elpa2_test_real_LDADD = $(build_lib) elpa2_test_real@SUFFIX@_LDADD = $(build_lib)
elpa2_test_real_default_kernel_SOURCES = test/test_real2_default_kernel.F90 elpa2_test_real_default_kernel@SUFFIX@_SOURCES = test/test_real2_default_kernel.F90
elpa2_test_real_default_kernel_LDADD = $(build_lib) elpa2_test_real_default_kernel@SUFFIX@_LDADD = $(build_lib)
elpa2_test_real_choose_kernel_with_api_SOURCES = test/test_real2_choose_kernel_with_api.F90 elpa2_test_real_choose_kernel_with_api@SUFFIX@_SOURCES = test/test_real2_choose_kernel_with_api.F90
elpa2_test_real_choose_kernel_with_api_LDADD = $(build_lib) elpa2_test_real_choose_kernel_with_api@SUFFIX@_LDADD = $(build_lib)
elpa1_test_complex_SOURCES = test/test_complex.F90 elpa1_test_complex@SUFFIX@_SOURCES = test/test_complex.F90
elpa1_test_complex_LDADD = $(build_lib) elpa1_test_complex@SUFFIX@_LDADD = $(build_lib)
elpa2_test_complex_SOURCES = test/test_complex2.F90 elpa2_test_complex@SUFFIX@_SOURCES = test/test_complex2.F90
elpa2_test_complex_LDADD = $(build_lib) elpa2_test_complex@SUFFIX@_LDADD = $(build_lib)
elpa2_test_complex_default_kernel_SOURCES = test/test_complex2_default_kernel.F90 elpa2_test_complex_default_kernel@SUFFIX@_SOURCES = test/test_complex2_default_kernel.F90
elpa2_test_complex_default_kernel_LDADD = $(build_lib) elpa2_test_complex_default_kernel@SUFFIX@_LDADD = $(build_lib)
elpa2_test_complex_choose_kernel_with_api_SOURCES = test/test_complex2_choose_kernel_with_api.F90 elpa2_test_complex_choose_kernel_with_api@SUFFIX@_SOURCES = test/test_complex2_choose_kernel_with_api.F90
elpa2_test_complex_choose_kernel_with_api_LDADD = $(build_lib) elpa2_test_complex_choose_kernel_with_api@SUFFIX@_LDADD = $(build_lib)
elpa2_print_kernels_SOURCES = src/print_available_elpa2_kernels.F90 elpa2_print_kernels@SUFFIX@_SOURCES = src/print_available_elpa2_kernels.F90
elpa2_print_kernels_LDADD = $(build_lib) elpa2_print_kernels@SUFFIX@_LDADD = $(build_lib)
check_SCRIPTS = \ check_SCRIPTS = \
elpa1_test_real.sh \ elpa1_test_real.sh \
...@@ -223,40 +153,40 @@ check_SCRIPTS = \ ...@@ -223,40 +153,40 @@ check_SCRIPTS = \
elpa2_test_complex_default_kernel.sh \ elpa2_test_complex_default_kernel.sh \
elpa2_test_real_choose_kernel_with_api.sh \ elpa2_test_real_choose_kernel_with_api.sh \
elpa2_test_complex_choose_kernel_with_api.sh \ elpa2_test_complex_choose_kernel_with_api.sh \
elpa2_print_kernels elpa2_print_kernels@SUFFIX@
TESTS = $(check_SCRIPTS) TESTS = $(check_SCRIPTS)
elpa1_test_real.sh: elpa1_test_real.sh:
echo 'mpiexec -n 2 ./elpa1_test_real $$TEST_FLAGS' > elpa1_test_real.sh echo 'mpiexec -n 2 ./elpa1_test_real@SUFFIX@ $$TEST_FLAGS' > elpa1_test_real.sh
chmod +x elpa1_test_real.sh chmod +x elpa1_test_real.sh
elpa2_test_real.sh: elpa2_test_real.sh:
echo 'mpiexec -n 2 ./elpa2_test_real $$TEST_FLAGS' > elpa2_test_real.sh echo 'mpiexec -n 2 ./elpa2_test_real@SUFFIX@ $$TEST_FLAGS' > elpa2_test_real.sh
chmod +x elpa2_test_real.sh chmod +x elpa2_test_real.sh
elpa2_test_real_default_kernel.sh: elpa2_test_real_default_kernel.sh:
echo 'mpiexec -n 2 ./elpa2_test_real_default_kernel $$TEST_FLAGS' > elpa2_test_real_default_kernel.sh echo 'mpiexec -n 2 ./elpa2_test_real_default_kernel@SUFFIX@ $$TEST_FLAGS' > elpa2_test_real_default_kernel.sh
chmod +x elpa2_test_real_default_kernel.sh chmod +x elpa2_test_real_default_kernel.sh
elpa2_test_real_choose_kernel_with_api.sh: elpa2_test_real_choose_kernel_with_api.sh:
echo 'mpiexec -n 2 ./elpa2_test_real_choose_kernel_with_api $$TEST_FLAGS' > elpa2_test_real_choose_kernel_with_api.sh echo 'mpiexec -n 2 ./elpa2_test_real_choose_kernel_with_api@SUFFIX@ $$TEST_FLAGS' > elpa2_test_real_choose_kernel_with_api.sh
chmod +x elpa2_test_real_choose_kernel_with_api.sh chmod +x elpa2_test_real_choose_kernel_with_api.sh
elpa1_test_complex.sh: elpa1_test_complex.sh:
echo 'mpiexec -n 2 ./elpa1_test_complex $$TEST_FLAGS' > elpa1_test_complex.sh echo 'mpiexec -n 2 ./elpa1_test_complex@SUFFIX@ $$TEST_FLAGS' > elpa1_test_complex.sh
chmod +x elpa1_test_complex.sh chmod +x elpa1_test_complex.sh
elpa2_test_complex.sh: elpa2_test_complex.sh:
echo 'mpiexec -n 2 ./elpa2_test_complex $$TEST_FLAGS' > elpa2_test_complex.sh echo 'mpiexec -n 2 ./elpa2_test_complex@SUFFIX@ $$TEST_FLAGS' > elpa2_test_complex.sh
chmod +x elpa2_test_complex.sh chmod +x elpa2_test_complex.sh
elpa2_test_complex_default_kernel.sh: elpa2_test_complex_default_kernel.sh:
echo 'mpiexec -n 2 ./elpa2_test_complex_default_kernel $$TEST_FLAGS' > elpa2_test_complex_default_kernel.sh echo 'mpiexec -n 2 ./elpa2_test_complex_default_kernel@SUFFIX@ $$TEST_FLAGS' > elpa2_test_complex_default_kernel.sh
chmod +x elpa2_test_complex_default_kernel.sh chmod +x elpa2_test_complex_default_kernel.sh
elpa2_test_complex_choose_kernel_with_api.sh: elpa2_test_complex_choose_kernel_with_api.sh:
echo 'mpiexec -n 2 ./elpa2_test_complex_choose_kernel_with_api $$TEST_FLAGS' > elpa2_test_complex_choose_kernel_with_api.sh echo 'mpiexec -n 2 ./elpa2_test_complex_choose_kernel_with_api@SUFFIX@ $$TEST_FLAGS' > elpa2_test_complex_choose_kernel_with_api.sh
chmod +x elpa2_test_complex_choose_kernel_with_api.sh chmod +x elpa2_test_complex_choose_kernel_with_api.sh
elpa2.i: $(top_srcdir)/src/elpa2.F90 elpa2.i: $(top_srcdir)/src/elpa2.F90
...@@ -274,7 +204,6 @@ CLEANFILES = \ ...@@ -274,7 +204,6 @@ CLEANFILES = \
elpa2_test_complex_default_kernel.sh \ elpa2_test_complex_default_kernel.sh \
elpa2_test_real_choose_kernel_with_api.sh \ elpa2_test_real_choose_kernel_with_api.sh \
elpa2_test_complex_choose_kernel_with_api.sh \ elpa2_test_complex_choose_kernel_with_api.sh \
elpa2_print_kernels.sh \
*.i *.i
clean-local: clean-local:
...@@ -303,7 +232,7 @@ libtool: $(LIBTOOL_DEPS) ...@@ -303,7 +232,7 @@ libtool: $(LIBTOOL_DEPS)
# $1 Object name # $1 Object name
define require_elpa_lib define require_elpa_lib
$1: $(build_lib) $1: libelpa-@PACKAGE_VERSION@@SUFFIX@.la
endef endef
$(foreach p,$(bin_PROGRAMS),$(foreach o,$($p_OBJECTS),$(eval $(call require_elpa_lib,$o)))) $(foreach p,$(bin_PROGRAMS) $(noinst_PROGRAMS),$(foreach o,$($p_OBJECTS),$(eval $(call require_elpa_lib,$o))))
This diff is collapsed.
...@@ -637,6 +637,7 @@ am__EXEEXT_TRUE ...@@ -637,6 +637,7 @@ am__EXEEXT_TRUE
LTLIBOBJS LTLIBOBJS
LIBOBJS LIBOBJS
PKG_CONFIG_FILE PKG_CONFIG_FILE
SUFFIX
with_amd_bulldozer_kernel with_amd_bulldozer_kernel
WITH_BLACS WITH_BLACS
WITH_MKL WITH_MKL
...@@ -21124,11 +21125,12 @@ mkdir modules ...@@ -21124,11 +21125,12 @@ mkdir modules
postdeps_FC=$(echo $postdeps_FC | sed 's/-l //g') postdeps_FC=$(echo $postdeps_FC | sed 's/-l //g')
   
if test x"${with_openmp}" = x"yes"; then if test x"${with_openmp}" = x"yes"; then
MT="_mt" SUFFIX="_openmp"
else else
MT="" SUFFIX=""
fi fi
PKG_CONFIG_FILE=elpa${MT}-${PACKAGE_VERSION}.pc
PKG_CONFIG_FILE=elpa${SUFFIX}-${PACKAGE_VERSION}.pc
   
   
ac_config_files="$ac_config_files Makefile ${PKG_CONFIG_FILE}:elpa.pc.in" ac_config_files="$ac_config_files Makefile ${PKG_CONFIG_FILE}:elpa.pc.in"
......
...@@ -686,11 +686,12 @@ mkdir modules ...@@ -686,11 +686,12 @@ mkdir modules
postdeps_FC=$(echo $postdeps_FC | sed 's/-l //g') postdeps_FC=$(echo $postdeps_FC | sed 's/-l //g')
if test x"${with_openmp}" = x"yes"; then if test x"${with_openmp}" = x"yes"; then
MT="_mt" SUFFIX="_openmp"
else else
MT="" SUFFIX=""
fi fi
AC_SUBST([PKG_CONFIG_FILE],[elpa${MT}-${PACKAGE_VERSION}.pc]) AC_SUBST([SUFFIX])
AC_SUBST([PKG_CONFIG_FILE],[elpa${SUFFIX}-${PACKAGE_VERSION}.pc])
AC_CONFIG_FILES([ AC_CONFIG_FILES([
Makefile Makefile
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment