diff --git a/src/Makefile.am b/src/Makefile.am index 26ceda7..3fe220b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -175,3 +175,40 @@ EXTRA_DIST = \ radeon_atombios.h \ radeon_dri2.h \ drmmode_display.h + +# Generate linker mapfiles for symbols found in other modules and use them +# and library flag additions to make sure all symbols are resolvable + +radeon_MAPFILES = \ + mapfile-theatre_detect_drv-external \ + mapfile-theatre_drv-external \ + mapfile-tda9885_drv-external \ + mapfile-msp3430_drv-external \ + mapfile-uda1380_drv-external \ + mapfile-fi1236_drv-external \ + mapfile-bt829_drv-external + +radeon_drv_la_LDFLAGS += $(radeon_MAPFILES:%=-Wl,-M,%) \ + $(radeon_drv_la_LDFLAGS_add) \ + -lexa -lfb -lint10 -lvbe -lvgahw -lshadow \ + -lpixman-1 -ldrm -lglx -lm + +radeon_drv_la_DEPENDENCIES = $(radeon_MAPFILES) + +mapfiles: $(MAPFILES) + +mapfile-theatre_drv-external: $(theatre_drv_la_OBJECTS) +mapfile-theatre_detect_drv-external: $(theatre_detect_drv_la_OBJECTS) +mapfile-bt829_drv-external: $(bt829_drv_la_OBJECTS) +mapfile-fi1236_drv-external: $(fi1236_drv_OBJECTS) +mapfile-uda1380_drv-external: $(uda1380_drv_OBJECTS) +mapfile-msp3430_drv-external: $(msp3430_drv_OBJECTS) +mapfile-tda9885_drv-external: $(tda9885_drv_OBJECTS) + +mapfile-%-external: + -rm -f $@ + printf '# Functions exported to loadable modules\n\n' > $@ + printf '{\n global:\n' >> $@ + /usr/ccs/bin/nm -g $? | grep -v UNDEF | sed -n -e 's/^.*\|FUNC \|GLOB \|.*\|\(.*\)$$/ \1 = FUNCTION extern;/p' -e 's/^.*\|OBJT \|GLOB \|.*\|\(.*\)$$/ \1 = DATA extern;/p' >> $@ + printf '};\n' >> $@ +