1 # SPDX-License-Identifier: GPL-2.0-only
2 #
3 # Makefile for the RISC-V Linux kernel
4 #
5 
6 ifdef CONFIG_FTRACE
7 CFLAGS_REMOVE_ftrace.o	= $(CC_FLAGS_FTRACE)
8 CFLAGS_REMOVE_patch.o	= $(CC_FLAGS_FTRACE)
9 CFLAGS_REMOVE_sbi.o	= $(CC_FLAGS_FTRACE)
10 CFLAGS_REMOVE_return_address.o	= $(CC_FLAGS_FTRACE)
11 endif
12 CFLAGS_syscall_table.o	+= $(call cc-option,-Wno-override-init,)
13 CFLAGS_compat_syscall_table.o += $(call cc-option,-Wno-override-init,)
14 
15 ifdef CONFIG_KEXEC_CORE
16 AFLAGS_kexec_relocate.o := -mcmodel=medany $(call cc-option,-mno-relax)
17 endif
18 
19 # cmodel=medany and notrace when patching early
20 ifdef CONFIG_RISCV_ALTERNATIVE_EARLY
21 CFLAGS_alternative.o := -mcmodel=medany
22 CFLAGS_cpufeature.o := -mcmodel=medany
23 CFLAGS_sbi_ecall.o := -mcmodel=medany
24 ifdef CONFIG_FTRACE
25 CFLAGS_REMOVE_alternative.o = $(CC_FLAGS_FTRACE)
26 CFLAGS_REMOVE_cpufeature.o = $(CC_FLAGS_FTRACE)
27 CFLAGS_REMOVE_sbi_ecall.o = $(CC_FLAGS_FTRACE)
28 endif
29 ifdef CONFIG_RELOCATABLE
30 CFLAGS_alternative.o += -fno-pie
31 CFLAGS_cpufeature.o += -fno-pie
32 CFLAGS_sbi_ecall.o += -fno-pie
33 endif
34 ifdef CONFIG_KASAN
35 KASAN_SANITIZE_alternative.o := n
36 KASAN_SANITIZE_cpufeature.o := n
37 KASAN_SANITIZE_sbi_ecall.o := n
38 endif
39 ifdef CONFIG_FORTIFY_SOURCE
40 CFLAGS_alternative.o += -D__NO_FORTIFY
41 CFLAGS_cpufeature.o += -D__NO_FORTIFY
42 CFLAGS_sbi_ecall.o += -D__NO_FORTIFY
43 endif
44 endif
45 
46 extra-y += vmlinux.lds
47 
48 obj-y	+= head.o
49 obj-y	+= soc.o
50 obj-$(CONFIG_RISCV_ALTERNATIVE) += alternative.o
51 obj-y	+= cpu.o
52 obj-y	+= cpufeature.o
53 obj-y	+= entry.o
54 obj-y	+= irq.o
55 obj-y	+= process.o
56 obj-y	+= ptrace.o
57 obj-y	+= reset.o
58 obj-y	+= return_address.o
59 obj-y	+= setup.o
60 obj-y	+= signal.o
61 obj-y	+= syscall_table.o
62 obj-y	+= sys_riscv.o
63 obj-y	+= sys_hwprobe.o
64 obj-y	+= time.o
65 obj-y	+= traps.o
66 obj-y	+= riscv_ksyms.o
67 obj-y	+= stacktrace.o
68 obj-y	+= cacheinfo.o
69 obj-y	+= patch.o
70 obj-y	+= vendor_extensions.o
71 obj-y	+= vendor_extensions/
72 obj-y	+= probes/
73 obj-y	+= tests/
74 obj-$(CONFIG_MMU) += vdso.o vdso/
75 
76 obj-$(CONFIG_RISCV_MISALIGNED)	+= traps_misaligned.o
77 obj-$(CONFIG_RISCV_MISALIGNED)	+= unaligned_access_speed.o
78 obj-$(CONFIG_RISCV_PROBE_UNALIGNED_ACCESS)	+= copy-unaligned.o
79 
80 obj-$(CONFIG_FPU)		+= fpu.o
81 obj-$(CONFIG_FPU)		+= kernel_mode_fpu.o
82 obj-$(CONFIG_RISCV_ISA_V)	+= vector.o
83 obj-$(CONFIG_RISCV_ISA_V)	+= kernel_mode_vector.o
84 obj-$(CONFIG_SMP)		+= smpboot.o
85 obj-$(CONFIG_SMP)		+= smp.o
86 obj-$(CONFIG_SMP)		+= cpu_ops.o
87 
88 obj-$(CONFIG_RISCV_BOOT_SPINWAIT) += cpu_ops_spinwait.o
89 obj-$(CONFIG_MODULES)		+= module.o
90 obj-$(CONFIG_MODULE_SECTIONS)	+= module-sections.o
91 
92 obj-$(CONFIG_CPU_PM)		+= suspend_entry.o suspend.o
93 obj-$(CONFIG_HIBERNATION)	+= hibernate.o hibernate-asm.o
94 
95 obj-$(CONFIG_FUNCTION_TRACER)	+= mcount.o ftrace.o
96 obj-$(CONFIG_DYNAMIC_FTRACE)	+= mcount-dyn.o
97 
98 obj-$(CONFIG_PERF_EVENTS)	+= perf_callchain.o
99 obj-$(CONFIG_HAVE_PERF_REGS)	+= perf_regs.o
100 obj-$(CONFIG_RISCV_SBI)		+= sbi.o sbi_ecall.o
101 ifeq ($(CONFIG_RISCV_SBI), y)
102 obj-$(CONFIG_SMP)		+= sbi-ipi.o
103 obj-$(CONFIG_SMP) += cpu_ops_sbi.o
104 endif
105 obj-$(CONFIG_HOTPLUG_CPU)	+= cpu-hotplug.o
106 obj-$(CONFIG_PARAVIRT)		+= paravirt.o
107 obj-$(CONFIG_KGDB)		+= kgdb.o
108 obj-$(CONFIG_KEXEC_CORE)	+= kexec_relocate.o crash_save_regs.o machine_kexec.o
109 obj-$(CONFIG_KEXEC_FILE)	+= elf_kexec.o machine_kexec_file.o
110 obj-$(CONFIG_CRASH_DUMP)	+= crash_dump.o
111 obj-$(CONFIG_VMCORE_INFO)	+= vmcore_info.o
112 
113 obj-$(CONFIG_JUMP_LABEL)	+= jump_label.o
114 
115 obj-$(CONFIG_CFI_CLANG)		+= cfi.o
116 
117 obj-$(CONFIG_EFI)		+= efi.o
118 obj-$(CONFIG_COMPAT)		+= compat_syscall_table.o
119 obj-$(CONFIG_COMPAT)		+= compat_signal.o
120 obj-$(CONFIG_COMPAT)		+= compat_vdso/
121 
122 obj-$(CONFIG_64BIT)		+= pi/
123 obj-$(CONFIG_ACPI)		+= acpi.o
124 obj-$(CONFIG_ACPI_NUMA)	+= acpi_numa.o
125