1# $OpenBSD: Makefile.amd64,v 1.137 2024/06/07 05:17:34 deraadt Exp $ 2 3# For instructions on building kernels consult the config(8) and options(4) 4# manual pages. 5# 6# N.B.: NO DEPENDENCIES ON FOLLOWING FLAGS ARE VISIBLE TO MAKEFILE 7# IF YOU CHANGE THE DEFINITION OF ANY OF THESE RECOMPILE EVERYTHING 8# DEBUG is set to -g by config if debugging is requested (config -g). 9# PROF is set to -pg by config if profiling is requested (config -p). 10 11.include <bsd.own.mk> 12 13SIZE?= size 14STRIP?= ctfstrip 15 16# source tree is located via $S relative to the compilation directory 17.ifndef S 18S!= cd ../../../..; pwd 19.endif 20 21_machdir?= $S/arch/${_mach} 22_archdir?= $S/arch/${_arch} 23 24INCLUDES= -nostdinc -I$S -I${.OBJDIR} -I$S/arch \ 25 -I$S/dev/pci/drm/include \ 26 -I$S/dev/pci/drm/include/uapi \ 27 -I$S/dev/pci/drm/amd/include/asic_reg \ 28 -I$S/dev/pci/drm/amd/include \ 29 -I$S/dev/pci/drm/amd/amdgpu \ 30 -I$S/dev/pci/drm/amd/display \ 31 -I$S/dev/pci/drm/amd/display/include \ 32 -I$S/dev/pci/drm/amd/display/dc \ 33 -I$S/dev/pci/drm/amd/display/amdgpu_dm \ 34 -I$S/dev/pci/drm/amd/pm/inc \ 35 -I$S/dev/pci/drm/amd/pm/legacy-dpm \ 36 -I$S/dev/pci/drm/amd/pm/swsmu \ 37 -I$S/dev/pci/drm/amd/pm/swsmu/inc \ 38 -I$S/dev/pci/drm/amd/pm/swsmu/smu11 \ 39 -I$S/dev/pci/drm/amd/pm/swsmu/smu12 \ 40 -I$S/dev/pci/drm/amd/pm/swsmu/smu13 \ 41 -I$S/dev/pci/drm/amd/pm/powerplay/inc \ 42 -I$S/dev/pci/drm/amd/pm/powerplay/hwmgr \ 43 -I$S/dev/pci/drm/amd/pm/powerplay/smumgr \ 44 -I$S/dev/pci/drm/amd/pm/swsmu/inc \ 45 -I$S/dev/pci/drm/amd/pm/swsmu/inc/pmfw_if \ 46 -I$S/dev/pci/drm/amd/display/dc/inc \ 47 -I$S/dev/pci/drm/amd/display/dc/inc/hw \ 48 -I$S/dev/pci/drm/amd/display/dc/clk_mgr \ 49 -I$S/dev/pci/drm/amd/display/modules/inc \ 50 -I$S/dev/pci/drm/amd/display/modules/hdcp \ 51 -I$S/dev/pci/drm/amd/display/dmub/inc \ 52 -I$S/dev/pci/drm/i915 53CPPFLAGS= ${INCLUDES} ${IDENT} ${PARAM} -D_KERNEL -MD -MP 54CWARNFLAGS= -Werror -Wall -Wimplicit-function-declaration \ 55 -Wno-pointer-sign \ 56 -Wframe-larger-than=2047 57 58CMACHFLAGS= -mcmodel=kernel -mno-red-zone -mno-sse2 -mno-sse -mno-3dnow \ 59 -mno-mmx -msoft-float -fno-omit-frame-pointer 60CMACHFLAGS+= -ffreestanding ${NOPIE_FLAGS} 61SORTR= sort -R 62.if ${IDENT:M-DNO_PROPOLICE} 63CMACHFLAGS+= -fno-stack-protector 64.endif 65.if ${IDENT:M-DDDB} 66CMACHFLAGS+= -msave-args 67.endif 68.if ${IDENT:M-DSMALL_KERNEL} 69SORTR= cat 70COPTIMIZE= -Oz 71.if ${COMPILER_VERSION:Mclang} 72CMACHFLAGS+= -mno-retpoline -fcf-protection=none 73.endif 74.else 75CMACHFLAGS+= -mretpoline-external-thunk -fcf-protection=branch 76CMACHFLAGS+= -fret-clean 77.endif 78.if ${COMPILER_VERSION:Mclang} 79NO_INTEGR_AS= -no-integrated-as 80CWARNFLAGS+= -Wno-address-of-packed-member -Wno-constant-conversion \ 81 -Wno-unused-but-set-variable -Wno-gnu-folding-constant 82.endif 83 84DEBUG?= -g 85COPTIMIZE?= -O2 86CFLAGS= ${DEBUG} ${CWARNFLAGS} ${CMACHFLAGS} ${COPTIMIZE} ${COPTS} ${PIPE} 87AFLAGS= -D_LOCORE -x assembler-with-cpp ${CWARNFLAGS} ${CMACHFLAGS} 88LINKFLAGS= -T ld.script -X --warn-common -nopie 89 90HOSTCC?= ${CC} 91HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//} 92HOSTED_CFLAGS= ${CFLAGS} 93HOSTED_C= ${HOSTCC} ${HOSTED_CFLAGS} ${HOSTED_CPPFLAGS} -c $< 94 95NORMAL_C_NOP= ${CC} ${CFLAGS} ${CPPFLAGS} -fno-ret-protector -c $< 96NORMAL_C= ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c $< 97NORMAL_S= ${CC} ${AFLAGS} ${CPPFLAGS} ${PROF} -c $< 98 99%OBJS 100 101%CFILES 102 103%SFILES 104 105# load lines for config "xxx" will be emitted as: 106# xxx: ${SYSTEM_DEP} swapxxx.o 107# ${SYSTEM_LD_HEAD} 108# ${SYSTEM_LD} swapxxx.o 109# ${SYSTEM_LD_TAIL} 110SYSTEM_HEAD= locore0.o gap.o 111SYSTEM_OBJ= ${SYSTEM_HEAD} ${OBJS} param.o ioconf.o 112SYSTEM_DEP= Makefile ${SYSTEM_OBJ} ld.script 113SYSTEM_LD_HEAD= @rm -f $@ 114SYSTEM_LD= @echo ${LD} ${LINKFLAGS} -o $@ '$${SYSTEM_HEAD} vers.o $${OBJS}'; \ 115 umask 007; \ 116 echo ${OBJS} param.o ioconf.o vers.o | tr " " "\n" | ${SORTR} > lorder; \ 117 ${LD} ${LINKFLAGS} -o $@ ${SYSTEM_HEAD} `cat lorder` 118SYSTEM_LD_TAIL= @${SIZE} $@ 119 120.if ${DEBUG} == "-g" 121STRIPFLAGS= -S 122SYSTEM_LD_TAIL+=; umask 007; \ 123 echo mv $@ $@.gdb; rm -f $@.gdb; mv $@ $@.gdb; \ 124 echo ${STRIP} ${STRIPFLAGS} -o $@ $@.gdb; \ 125 ${STRIP} ${STRIPFLAGS} -o $@ $@.gdb 126.else 127LINKFLAGS+= -S 128.endif 129 130.if ${SYSTEM_OBJ:Mkcov.o} && ${COMPILER_VERSION:Mclang} 131PROF= -fsanitize-coverage=trace-pc,trace-cmp 132.endif 133 134.if ${IDENT:M-DKUBSAN} && ${COMPILER_VERSION:Mclang} 135CFLAGS+= -fsanitize=undefined 136CFLAGS+= -fno-wrapv 137.endif 138 139%LOAD 140 141# cc's -MD puts the source and output paths in the dependency file; 142# since those are temp files here we need to fix it up. It also 143# puts the file in /tmp, so we use -MF to put it in the current 144# directory as assym.P and then generate assym.d from it with a 145# good target name 146assym.h: $S/kern/genassym.sh Makefile \ 147 ${_archdir}/${_arch}/genassym.cf ${_machdir}/${_mach}/genassym.cf 148 cat ${_archdir}/${_arch}/genassym.cf ${_machdir}/${_mach}/genassym.cf | \ 149 sh $S/kern/genassym.sh ${CC} ${NO_INTEGR_AS} ${CFLAGS} ${CPPFLAGS} -MF assym.P > assym.h.tmp 150 sed '1s/.*/assym.h: \\/' assym.P > assym.d 151 sort -u assym.h.tmp > assym.h 152 153param.c: $S/conf/param.c 154 rm -f param.c 155 cp $S/conf/param.c . 156 157param.o: param.c Makefile 158 ${NORMAL_C} 159 160mcount.o: $S/lib/libkern/mcount.c Makefile 161 ${NORMAL_C_NOP} 162 163ioconf.o: ioconf.c 164 ${NORMAL_C} 165 166locore.o: assym.h 167 ${NORMAL_S} 168 @[[ -n `objdump -D $@ | grep -A1 doreti_iret | grep -v ^-- | sort | \ 169 uniq -d` ]] || \ 170 { rm -f $@; echo "ERROR: overlaid iretq instructions don't line up"; \ 171 echo "#GP-on-iretq fault handling would be broken"; exit 1; } 172 173ld.script: ${_machdir}/conf/ld.script 174 cp ${_machdir}/conf/ld.script $@ 175 176gapdummy.o: 177 echo '__asm(".section .rodata,\"a\"");' > gapdummy.c 178 ${CC} -c ${CFLAGS} ${CPPFLAGS} -fcf-protection=none gapdummy.c -o $@ 179 180makegap.sh: 181 cp $S/conf/makegap.sh $@ 182 183MAKE_GAP = LD="${LD}" sh makegap.sh 0xcccccccc gapdummy.o 184 185gap.o: Makefile makegap.sh gapdummy.o vers.o 186 ${MAKE_GAP} 187 188vers.o: ${SYSTEM_DEP:Ngap.o} 189 sh $S/conf/newvers.sh 190 ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c 191 192.if ${SYSTEM_OBJ:Mkcov.o} && ${COMPILER_VERSION:Mclang} 193kcov.o: $S/dev/kcov.c 194 ${NORMAL_C} -fno-sanitize-coverage=trace-pc,trace-cmp 195.endif 196 197HARDFLOAT_CFLAGS= -msse -msse2 198 199display_mode_vba.o: $S/dev/pci/drm/amd/display/dc/dml/display_mode_vba.c 200 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 201dcn10_fpu.o: $S/dev/pci/drm/amd/display/dc/dml/dcn10/dcn10_fpu.c 202 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 203dcn20_fpu.o: $S/dev/pci/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c 204 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 205display_mode_vba_20.o: $S/dev/pci/drm/amd/display/dc/dml/dcn20/display_mode_vba_20.c 206 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 207display_rq_dlg_calc_20.o: $S/dev/pci/drm/amd/display/dc/dml/dcn20/display_rq_dlg_calc_20.c 208 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 209display_mode_vba_20v2.o: $S/dev/pci/drm/amd/display/dc/dml/dcn20/display_mode_vba_20v2.c 210 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 211display_rq_dlg_calc_20v2.o: $S/dev/pci/drm/amd/display/dc/dml/dcn20/display_rq_dlg_calc_20v2.c 212 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 213display_mode_vba_21.o: $S/dev/pci/drm/amd/display/dc/dml/dcn21/display_mode_vba_21.c 214 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 215display_rq_dlg_calc_21.o: $S/dev/pci/drm/amd/display/dc/dml/dcn21/display_rq_dlg_calc_21.c 216 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 217display_mode_vba_30.o: $S/dev/pci/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c 218 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 219display_rq_dlg_calc_30.o: $S/dev/pci/drm/amd/display/dc/dml/dcn30/display_rq_dlg_calc_30.c 220 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 221display_mode_vba_31.o: $S/dev/pci/drm/amd/display/dc/dml/dcn31/display_mode_vba_31.c 222 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 223display_rq_dlg_calc_31.o: $S/dev/pci/drm/amd/display/dc/dml/dcn31/display_rq_dlg_calc_31.c 224 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 225display_mode_vba_314.o: $S/dev/pci/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c 226 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 227display_rq_dlg_calc_314.o: $S/dev/pci/drm/amd/display/dc/dml/dcn314/display_rq_dlg_calc_314.c 228 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 229dcn314_fpu.o: $S/dev/pci/drm/amd/display/dc/dml/dcn314/dcn314_fpu.c 230 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 231dcn30_fpu.o: $S/dev/pci/drm/amd/display/dc/dml/dcn30/dcn30_fpu.c 232 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 233dcn32_fpu.o: $S/dev/pci/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c 234 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 235display_mode_vba_32.o: $S/dev/pci/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.c 236 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 237display_rq_dlg_calc_32.o: $S/dev/pci/drm/amd/display/dc/dml/dcn32/display_rq_dlg_calc_32.c 238 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 239display_mode_vba_util_32.o: $S/dev/pci/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.c 240 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 241dcn321_fpu.o: $S/dev/pci/drm/amd/display/dc/dml/dcn321/dcn321_fpu.c 242 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 243dcn31_fpu.o: $S/dev/pci/drm/amd/display/dc/dml/dcn31/dcn31_fpu.c 244 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 245dcn301_fpu.o: $S/dev/pci/drm/amd/display/dc/dml/dcn301/dcn301_fpu.c 246 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 247dcn302_fpu.o: $S/dev/pci/drm/amd/display/dc/dml/dcn302/dcn302_fpu.c 248 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 249dcn303_fpu.o: $S/dev/pci/drm/amd/display/dc/dml/dcn303/dcn303_fpu.c 250 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 251rc_calc_fpu.o: $S/dev/pci/drm/amd/display/dc/dml/dsc/rc_calc_fpu.c 252 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 253dcn_calcs.o: $S/dev/pci/drm/amd/display/dc/dml/calcs/dcn_calcs.c 254 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 255dcn_calc_auto.o: $S/dev/pci/drm/amd/display/dc/dml/calcs/dcn_calc_auto.c 256 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 257dcn_calc_math.o: $S/dev/pci/drm/amd/display/dc/dml/calcs/dcn_calc_math.c 258 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 259dml1_display_rq_dlg_calc.o: $S/dev/pci/drm/amd/display/dc/dml/dml1_display_rq_dlg_calc.c 260 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 261display_rq_dlg_helpers.o: $S/dev/pci/drm/amd/display/dc/dml/display_rq_dlg_helpers.c 262 ${NORMAL_C} ${HARDFLOAT_CFLAGS} 263 264clean: 265 rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* \ 266 gap.link gapdummy.c ld.script lorder makegap.sh param.c 267 268cleandir: clean 269 rm -f Makefile *.h ioconf.c options machine ${_mach} vers.c 270 271depend obj: 272 273locore0.o: ${_machdir}/${_mach}/locore0.S assym.h 274mutex.o vector.o copy.o spl.o mds.o: assym.h 275mptramp.o acpi_wakecode.o vmm_support.o: assym.h 276 277hardlink-obsd: 278 [[ ! -f /bsd ]] || cmp -s bsd /bsd || ln -f /bsd /obsd 279 280newinstall: 281 install -F -m 700 bsd /bsd && sha256 -h /var/db/kernel.SHA256 /bsd 282 283install: update-link hardlink-obsd newinstall 284 285# pull in the dependency information 286.ifnmake clean 287. for o in ${SYSTEM_OBJ:Ngap.o} assym.h 288. if exists(${o:R}.d) 289. include "${o:R}.d" 290. elif exists($o) 291 .PHONY: $o 292. endif 293. endfor 294.endif 295 296%RULES 297