Changeset View
Changeset View
Standalone View
Standalone View
sys/modules/linux/Makefile
# $FreeBSD$ | # $FreeBSD$ | ||||
.if ${MACHINE_CPUARCH} == "amd64" | .if ${MACHINE_CPUARCH} == "amd64" | ||||
SFX= 32 | SFX= 32 | ||||
CFLAGS+=-DCOMPAT_FREEBSD32 -DCOMPAT_LINUX32 | CFLAGS+=-DCOMPAT_FREEBSD32 -DCOMPAT_LINUX32 | ||||
.endif | .endif | ||||
.PATH: ${SRCTOP}/sys/compat/linux ${SRCTOP}/sys/${MACHINE_CPUARCH}/linux${SFX} | .PATH: ${SRCTOP}/sys/compat/linux ${SRCTOP}/sys/${MACHINE_CPUARCH}/linux${SFX} | ||||
.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64" | .if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64" | ||||
.PATH: ${SRCTOP}/sys/x86/linux | .PATH: ${SRCTOP}/sys/x86/linux | ||||
.endif | .endif | ||||
VDSO= linux${SFX}_vdso | |||||
KMOD= linux | KMOD= linux | ||||
SRCS= linux_fork.c linux${SFX}_dummy_machdep.c linux_file.c linux_event.c \ | SRCS= linux_fork.c linux${SFX}_dummy_machdep.c linux_file.c linux_event.c \ | ||||
linux_futex.c linux_getcwd.c linux_ioctl.c linux_ipc.c \ | linux_futex.c linux_getcwd.c linux_ioctl.c linux_ipc.c \ | ||||
linux${SFX}_machdep.c linux_misc.c linux_signal.c \ | linux${SFX}_machdep.c linux_misc.c linux_signal.c \ | ||||
linux_socket.c linux_stats.c linux_sysctl.c linux${SFX}_sysent.c \ | linux_socket.c linux_stats.c linux_sysctl.c linux${SFX}_sysent.c \ | ||||
linux${SFX}_sysvec.c linux_uid16.c linux_time.c \ | linux${SFX}_sysvec.c linux_uid16.c linux_time.c \ | ||||
linux_timer.c linux_vdso.c \ | linux_timer.c linux_vdso.c \ | ||||
opt_inet6.h opt_compat.h opt_posix.h opt_usb.h vnode_if.h \ | opt_inet6.h opt_compat.h opt_posix.h opt_usb.h vnode_if.h \ | ||||
device_if.h bus_if.h | device_if.h bus_if.h | ||||
.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64" | .if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64" | ||||
SRCS+= linux_dummy_x86.c | SRCS+= linux_dummy_x86.c linux_vdso_tsc_selector_x86.c | ||||
VDSODEPS=linux_vdso_gettc_x86.inc | |||||
.endif | .endif | ||||
.if ${MACHINE_CPUARCH} == "amd64" | .if ${MACHINE_CPUARCH} == "amd64" | ||||
SRCS+= linux${SFX}_support.s | SRCS+= linux${SFX}_support.s | ||||
SRCS+= linux_elf32.c | SRCS+= linux_elf32.c | ||||
.else | .else | ||||
SRCS+= linux_copyout.c | SRCS+= linux_copyout.c | ||||
.endif | .endif | ||||
DPSRCS= assym.inc linux${SFX}_genassym.c | DPSRCS= assym.inc linux${SFX}_genassym.c | ||||
# XXX: for assym.inc | # XXX: for assym.inc | ||||
SRCS+= opt_kstack_pages.h opt_nfs.h opt_hwpmc_hooks.h | SRCS+= opt_kstack_pages.h opt_nfs.h opt_hwpmc_hooks.h | ||||
.if ${MACHINE_CPUARCH} == "i386" | .if ${MACHINE_CPUARCH} == "i386" | ||||
SRCS+= opt_apic.h | SRCS+= opt_apic.h | ||||
.endif | .endif | ||||
OBJS= ${VDSO}.so | OBJS= linux${SFX}_vdso.so | ||||
.if ${MACHINE_CPUARCH} == "i386" | .if ${MACHINE_CPUARCH} == "i386" | ||||
SRCS+= linux_ptrace.c imgact_linux.c linux_util.c linux_mib.c linux_mmap.c \ | SRCS+= linux_ptrace.c imgact_linux.c linux_util.c linux_mib.c linux_mmap.c \ | ||||
linux_dummy.c linux_emul.c linux_errno.c opt_cpu.h linux.c | linux_dummy.c linux_emul.c linux_errno.c opt_cpu.h linux.c | ||||
.endif | .endif | ||||
.if ${MACHINE_CPUARCH} == "i386" | .if ${MACHINE_CPUARCH} == "i386" | ||||
EXPORT_SYMS= | EXPORT_SYMS= | ||||
EXPORT_SYMS+= linux_emul_path | EXPORT_SYMS+= linux_emul_path | ||||
EXPORT_SYMS+= linux_get_osname | EXPORT_SYMS+= linux_get_osname | ||||
EXPORT_SYMS+= linux_get_osrelease | EXPORT_SYMS+= linux_get_osrelease | ||||
EXPORT_SYMS+= linux_ioctl_register_handler | EXPORT_SYMS+= linux_ioctl_register_handler | ||||
EXPORT_SYMS+= linux_ioctl_unregister_handler | EXPORT_SYMS+= linux_ioctl_unregister_handler | ||||
.endif | .endif | ||||
CLEANFILES= linux${SFX}_assym.h linux${SFX}_genassym.o linux${SFX}_locore.o \ | CLEANFILES= linux${SFX}_assym.h linux${SFX}_genassym.o linux${SFX}_locore.o \ | ||||
genassym.o | genassym.o linux${SFX}_vdso_gtod.o linux${SFX}_vdso.so.o | ||||
linux${SFX}_assym.h: linux${SFX}_genassym.o | linux${SFX}_assym.h: linux${SFX}_genassym.o | ||||
sh ${SYSDIR}/kern/genassym.sh linux${SFX}_genassym.o > ${.TARGET} | sh ${SYSDIR}/kern/genassym.sh linux${SFX}_genassym.o > ${.TARGET} | ||||
.if ${MACHINE_CPUARCH} == "amd64" | |||||
VDSOFLAGS=-DCOMPAT_FREEBSD32 -DCOMPAT_LINUX32 -m32 | |||||
.endif | |||||
linux${SFX}_locore.o: linux${SFX}_assym.h assym.inc | linux${SFX}_locore.o: linux${SFX}_assym.h assym.inc | ||||
${CC} ${CCLDFLAGS} -x assembler-with-cpp -DLOCORE -m32 -shared -s \ | ${CC} -c -x assembler-with-cpp -DLOCORE -fPIC -pipe -O2 -Werror \ | ||||
-pipe -I. -I${SYSDIR} ${WERROR} -Wall -fno-common -nostdinc -nostdlib \ | -msoft-float -mregparm=0 \ | ||||
-fno-omit-frame-pointer -fPIC \ | -mcmodel=small -fno-common -nostdinc -fasynchronous-unwind-tables \ | ||||
-Wl,-T${SRCTOP}/sys/${MACHINE_CPUARCH}/linux${SFX}/${VDSO}.lds.s \ | -fno-omit-frame-pointer -foptimize-sibling-calls ${VDSOFLAGS} \ | ||||
-Wl,-soname=${VDSO}.so.1,--eh-frame-hdr,-warn-common \ | -fno-stack-protector -I. -I${SYSDIR} -I${SRCTOP}/include \ | ||||
${.IMPSRC} -o ${.TARGET} | ${.IMPSRC} -o ${.TARGET} | ||||
linux${SFX}_vdso_gtod.o: linux_vdso_gtod.inc ${VDSODEPS} | |||||
${CC} -c -fPIC -pipe -O2 -Werror -msoft-float -mregparm=0 \ | |||||
-mcmodel=small -fno-common -nostdinc -fasynchronous-unwind-tables \ | |||||
-fno-omit-frame-pointer -foptimize-sibling-calls ${VDSOFLAGS} \ | |||||
-fno-stack-protector -I. -I${SYSDIR} -I${SRCTOP}/include \ | |||||
${.IMPSRC} -o ${.TARGET} | |||||
linux${SFX}_vdso.so.o: linux${SFX}_locore.o linux${SFX}_vdso_gtod.o | |||||
${LD} -m elf_i386 --shared --eh-frame-hdr -soname=linux-gate.so.1 \ | |||||
--no-undefined --hash-style=both -warn-common -nostdlib \ | |||||
--strip-debug -s --build-id=sha1 --Bsymbolic \ | |||||
-T${SRCTOP}/sys/${MACHINE}/linux${SFX}/linux${SFX}_vdso.lds.s \ | |||||
-o ${.TARGET} ${.ALLSRC:M*.o} | |||||
.if ${MACHINE_CPUARCH} == "amd64" | .if ${MACHINE_CPUARCH} == "amd64" | ||||
OBJCOPY_TARGET=--output-target elf64-x86-64-freebsd --binary-architecture i386 | |||||
.elif ${MACHINE_CPUARCH} == "i386" | |||||
OBJCOPY_TARGET=--output-target elf32-i386-freebsd --binary-architecture i386 | |||||
.else | |||||
.error ${MACHINE_CPUARCH} not yet supported by linux | |||||
.endif | |||||
linux${SFX}_vdso.so: linux${SFX}_vdso.so.o | |||||
${OBJCOPY} --input-target binary ${OBJCOPY_TARGET} \ | |||||
linux${SFX}_vdso.so.o ${.TARGET} | |||||
${STRIPBIN} -N _binary_linux${SFX}_vdso_so_o_size ${.TARGET} | |||||
.if ${MACHINE_CPUARCH} == "amd64" | |||||
linux${SFX}_support.o: linux${SFX}_assym.h assym.inc | linux${SFX}_support.o: linux${SFX}_assym.h assym.inc | ||||
${CC} -c -x assembler-with-cpp -DLOCORE ${CFLAGS} \ | ${CC} -c -x assembler-with-cpp -DLOCORE ${CFLAGS} \ | ||||
${.IMPSRC} -o ${.TARGET} | ${.IMPSRC} -o ${.TARGET} | ||||
${VDSO}.so: linux${SFX}_locore.o | |||||
${OBJCOPY} --input-target binary --output-target elf64-x86-64-freebsd \ | |||||
--binary-architecture i386 linux${SFX}_locore.o ${.TARGET} | |||||
${STRIPBIN} -N _binary_linux${SFX}_locore_o_size ${.TARGET} | |||||
.else | |||||
${VDSO}.so: linux${SFX}_locore.o | |||||
${OBJCOPY} --input-target binary --output-target elf32-i386-freebsd \ | |||||
--binary-architecture i386 linux${SFX}_locore.o ${.TARGET} | |||||
${STRIPBIN} -N _binary_linux_locore_o_size ${.TARGET} | |||||
.endif | .endif | ||||
linux${SFX}_genassym.o: offset.inc | linux${SFX}_genassym.o: offset.inc | ||||
${CC} -c ${CFLAGS:N-flto:N-fno-common} -fcommon ${.IMPSRC} | ${CC} -c ${CFLAGS:N-flto:N-fno-common} -fcommon ${.IMPSRC} | ||||
.if !defined(KERNBUILDDIR) | .if !defined(KERNBUILDDIR) | ||||
.warning Building Linuxulator outside of a kernel does not make sense | .warning Building Linuxulator outside of a kernel does not make sense | ||||
.endif | .endif | ||||
.include <bsd.kmod.mk> | .include <bsd.kmod.mk> |