Index: git/libs/libltpswapon/Makefile
===================================================================
--- /dev/null
+++ git/libs/libltpswapon/Makefile
@@ -0,0 +1,12 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# Copyright (C) Richard Purdie <richard.purdie@linuxfoundation.org>
+
+top_srcdir		?= ../..
+
+include $(top_srcdir)/include/mk/env_pre.mk
+
+INTERNAL_LIB		:= libltpswapon.a
+
+include $(top_srcdir)/include/mk/lib.mk
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
Index: git/libs/libltpswapon/libswapon.c
===================================================================
--- /dev/null
+++ git/libs/libltpswapon/libswapon.c
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2013 Oracle and/or its affiliates. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it would be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write the Free Software Foundation,
+ * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Author: Stanislav Kholmanskikh <stanislav.kholmanskikh@oracle.com>
+ *
+ */
+
+#include <errno.h>
+#include "lapi/syscalls.h"
+#include "test.h"
+#include "libswapon.h"
+
+/*
+ * Make a swap file
+ */
+int make_swapfile(void (cleanup)(void), const char *swapfile, int safe)
+{
+	if (!tst_fs_has_free(NULL, ".", sysconf(_SC_PAGESIZE) * 10,
+	    TST_BYTES)) {
+		tst_brkm(TBROK, cleanup,
+			"Insufficient disk space to create swap file");
+	}
+
+	/* create file */
+	if (tst_fill_file(swapfile, 0,
+			sysconf(_SC_PAGESIZE), 10) != 0) {
+		tst_brkm(TBROK, cleanup, "Failed to create swapfile");
+	}
+
+	/* make the file swapfile */
+	const char *argv[2 + 1];
+	argv[0] = "mkswap";
+	argv[1] = swapfile;
+	argv[2] = NULL;
+
+	return tst_cmd(cleanup, argv, "/dev/null", "/dev/null", safe);
+}
+
+/*
+ * Check swapon/swapoff support status of filesystems or files
+ * we are testing on.
+ */
+void is_swap_supported(void (cleanup)(void), const char *filename)
+{
+	int fibmap = tst_fibmap(filename);
+	long fs_type = tst_fs_type(cleanup, filename);
+	const char *fstype = tst_fs_type_name(fs_type);
+
+	int ret = make_swapfile(NULL, filename, 1);
+	if (ret != 0) {
+		if (fibmap == 1) {
+			tst_brkm(TCONF, cleanup,
+				"mkswap on %s not supported", fstype);
+		} else {
+			tst_brkm(TFAIL, cleanup,
+				"mkswap on %s failed", fstype);
+		}
+	}
+
+	TEST(ltp_syscall(__NR_swapon, filename, 0));
+	if (TEST_RETURN == -1) {
+		if (fibmap == 1 && errno == EINVAL) {
+			tst_brkm(TCONF, cleanup,
+				"Swapfile on %s not implemented", fstype);
+		} else {
+			tst_brkm(TFAIL | TERRNO, cleanup,
+				 "swapon on %s failed", fstype);
+		}
+	}
+
+	TEST(ltp_syscall(__NR_swapoff, filename, 0));
+	if (TEST_RETURN == -1) {
+		tst_brkm(TFAIL | TERRNO, cleanup,
+			"swapoff on %s failed", fstype);
+	}
+}
Index: git/testcases/kernel/syscalls/swapoff/Makefile
===================================================================
--- git.orig/testcases/kernel/syscalls/swapoff/Makefile
+++ git/testcases/kernel/syscalls/swapoff/Makefile
@@ -3,7 +3,11 @@
 
 top_srcdir		?= ../../../..
 
+LTPLIBS = ltpswapon
+ 
 include $(top_srcdir)/include/mk/testcases.mk
-include $(abs_srcdir)/./Makefile.inc
+
+LTPLDLIBS  = -lltpswapon
+
 include $(top_srcdir)/include/mk/generic_leaf_target.mk
-$(MAKE_TARGETS): %: ../swapon/libswapon.o
+
Index: git/testcases/kernel/syscalls/swapoff/Makefile.inc
===================================================================
--- git.orig/testcases/kernel/syscalls/swapoff/Makefile.inc
+++ /dev/null
@@ -1,6 +0,0 @@
-LIBDIR			+= ../swapon/
-LIBSWAPON		:= $(LIBDIR)/libswapon.o
-$(LIBSWAPON):
-	$(MAKE) -C $(LIBDIR)
-CPPFLAGS		+= -I$(abs_srcdir)/$(LIBDIR)
-LDFLAGS			+= -L$(abs_builddir)/$(LIBDIR)
Index: git/testcases/kernel/syscalls/swapon/Makefile
===================================================================
--- git.orig/testcases/kernel/syscalls/swapon/Makefile
+++ git/testcases/kernel/syscalls/swapon/Makefile
@@ -8,10 +8,10 @@ endif
 
 top_srcdir		?= ../../../..
 
+LTPLIBS = ltpswapon
+
 include $(top_srcdir)/include/mk/testcases.mk
 
-FILTER_OUT_MAKE_TARGETS         := libswapon
+LTPLDLIBS  = -lltpswapon
 
 include $(top_srcdir)/include/mk/generic_leaf_target.mk
-
-$(MAKE_TARGETS): %: libswapon.o
Index: git/testcases/kernel/syscalls/swapon/libswapon.c
===================================================================
--- git.orig/testcases/kernel/syscalls/swapon/libswapon.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2013 Oracle and/or its affiliates. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it would be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write the Free Software Foundation,
- * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * Author: Stanislav Kholmanskikh <stanislav.kholmanskikh@oracle.com>
- *
- */
-
-#include <errno.h>
-#include "lapi/syscalls.h"
-#include "test.h"
-#include "libswapon.h"
-
-/*
- * Make a swap file
- */
-int make_swapfile(void (cleanup)(void), const char *swapfile, int safe)
-{
-	if (!tst_fs_has_free(NULL, ".", sysconf(_SC_PAGESIZE) * 10,
-	    TST_BYTES)) {
-		tst_brkm(TBROK, cleanup,
-			"Insufficient disk space to create swap file");
-	}
-
-	/* create file */
-	if (tst_fill_file(swapfile, 0,
-			sysconf(_SC_PAGESIZE), 10) != 0) {
-		tst_brkm(TBROK, cleanup, "Failed to create swapfile");
-	}
-
-	/* make the file swapfile */
-	const char *argv[2 + 1];
-	argv[0] = "mkswap";
-	argv[1] = swapfile;
-	argv[2] = NULL;
-
-	return tst_cmd(cleanup, argv, "/dev/null", "/dev/null", safe);
-}
-
-/*
- * Check swapon/swapoff support status of filesystems or files
- * we are testing on.
- */
-void is_swap_supported(void (cleanup)(void), const char *filename)
-{
-	int fibmap = tst_fibmap(filename);
-	long fs_type = tst_fs_type(cleanup, filename);
-	const char *fstype = tst_fs_type_name(fs_type);
-
-	int ret = make_swapfile(NULL, filename, 1);
-	if (ret != 0) {
-		if (fibmap == 1) {
-			tst_brkm(TCONF, cleanup,
-				"mkswap on %s not supported", fstype);
-		} else {
-			tst_brkm(TFAIL, cleanup,
-				"mkswap on %s failed", fstype);
-		}
-	}
-
-	TEST(ltp_syscall(__NR_swapon, filename, 0));
-	if (TEST_RETURN == -1) {
-		if (fibmap == 1 && errno == EINVAL) {
-			tst_brkm(TCONF, cleanup,
-				"Swapfile on %s not implemented", fstype);
-		} else {
-			tst_brkm(TFAIL | TERRNO, cleanup,
-				 "swapon on %s failed", fstype);
-		}
-	}
-
-	TEST(ltp_syscall(__NR_swapoff, filename, 0));
-	if (TEST_RETURN == -1) {
-		tst_brkm(TFAIL | TERRNO, cleanup,
-			"swapoff on %s failed", fstype);
-	}
-}
Index: git/testcases/kernel/syscalls/swapon/libswapon.h
===================================================================
--- git.orig/testcases/kernel/syscalls/swapon/libswapon.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2013 Oracle and/or its affiliates. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it would be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write the Free Software Foundation,
- * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * Author: Stanislav Kholmanskikh <stanislav.kholmanskikh@oracle.com>
- *
- */
-
-/*
- * Contains common content for all swapon tests
- */
-
-#ifndef __LIBSWAPON_H__
-#define __LIBSWAPON_H__
-
-/*
- * Make a swap file
- */
-int make_swapfile(void (cleanup)(void), const char *swapfile, int safe);
-
-/*
- * Check swapon/swapoff support status of filesystems or files
- * we are testing on.
- */
-void is_swap_supported(void (cleanup)(void), const char *filename);
-#endif /* __LIBSWAPON_H__ */
Index: git/testcases/kernel/syscalls/swapoff/swapoff01.c
===================================================================
--- git.orig/testcases/kernel/syscalls/swapoff/swapoff01.c
+++ git/testcases/kernel/syscalls/swapoff/swapoff01.c
@@ -25,7 +25,7 @@
 #include <stdlib.h>
 #include "config.h"
 #include "lapi/syscalls.h"
-#include "../swapon/libswapon.h"
+#include "libswapon.h"
 
 static void setup(void);
 static void cleanup(void);
Index: git/testcases/kernel/syscalls/swapoff/swapoff02.c
===================================================================
--- git.orig/testcases/kernel/syscalls/swapoff/swapoff02.c
+++ git/testcases/kernel/syscalls/swapoff/swapoff02.c
@@ -33,7 +33,7 @@
 #include "test.h"
 #include "lapi/syscalls.h"
 #include "safe_macros.h"
-#include "../swapon/libswapon.h"
+#include "libswapon.h"
 
 static void setup(void);
 static void cleanup(void);
Index: git/include/libswapon.h
===================================================================
--- /dev/null
+++ git/include/libswapon.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2013 Oracle and/or its affiliates. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it would be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write the Free Software Foundation,
+ * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Author: Stanislav Kholmanskikh <stanislav.kholmanskikh@oracle.com>
+ *
+ */
+
+/*
+ * Contains common content for all swapon tests
+ */
+
+#ifndef __LIBSWAPON_H__
+#define __LIBSWAPON_H__
+
+/*
+ * Make a swap file
+ */
+int make_swapfile(void (cleanup)(void), const char *swapfile, int safe);
+
+/*
+ * Check swapon/swapoff support status of filesystems or files
+ * we are testing on.
+ */
+void is_swap_supported(void (cleanup)(void), const char *filename);
+#endif /* __LIBSWAPON_H__ */
