#!/bin/sh
# *******************************************************-*-shell-script-*-
# * Myricom GM networking software and documentation                      *
# * Copyright (c) 1998 by Myricom, Inc.                                   *
# * All rights reserved.  See the file `COPYING' for copyright notice.  * #
# *************************************************************************
# Because we need too many MCP build rules to maintain manually, we
# use this file to generate the rules.  We don't try to make the output
# pretty, since we want it to look machine generated

################################################################
# support() function
#
# Call "support <lanai_major_version> <page_len> <ptr_bits>" for
# each configuration that should be supported.
################################################################

support () {
    major=$1
    page_len=$2
    ptr_size=$3

    # determine which set of LANAI*_GCC, LANAI*_AR, etc to use
	    
    LANAI="LANAI${major}"

    # determine GM_SIZEOF_UP_T
    
    if [ x${ptr_size} = x32b ]
    then
        gm_sizeof_up_t=4
    elif [ x${ptr_size} = x64b ]
    then
        gm_sizeof_up_t=8
    else
	exit 1
    fi

    # determine page length, in kilobytes
    
    case ${page_len} in
    	0)
    	    pl=0
    	    ;;
    	4096)
    	    pl=4
    	    ;;
    	8192)
    	    pl=8
    	    ;;
    	16384)
    	    pl=16
    	    ;;
    	*)
    	    exit 1
    	    ;;
    esac
    
    one="${ptr_size}_l${major}_${pl}k"
    
cat <<EOF
mcp/libc/libc.${one}_a: \$(MCP_LIBC_SRCS:.c=.${one}_o)
	rm -f mcp/libc/libc.${one}_a 
	\$(LANAI_AR) rc mcp/libc/libc.${one}_a \$(MCP_LIBC_SRCS:.c=.${one}_o)

mcp/libc/libc.${one}_compact_a: \$(MCP_LIBC_SRCS:.c=.${one}_compact_o)
	rm -f mcp/libc/libc.${one}_compact_a 
	\$(LANAI_AR) rc mcp/libc/libc.${one}_compact_a \$(MCP_LIBC_SRCS:.c=.${one}_compact_o)

mcp/libc/libc.${one}_compact512_a: \$(MCP_LIBC_SRCS:.c=.${one}_compact512_o)
	rm -f mcp/libc/libc.${one}_compact512_a 
	\$(LANAI_AR) rc mcp/libc/libc.${one}_compact512_a \$(MCP_LIBC_SRCS:.c=.${one}_compact512_o)

mcp/libc/libc.${one}_newfeatures_a: \$(MCP_LIBC_SRCS:.c=.${one}_newfeatures_o)
	rm -f mcp/libc/libc.${one}_newfeatures_a 
	\$(LANAI_AR) rc mcp/libc/libc.${one}_newfeatures_a \$(MCP_LIBC_SRCS:.c=.${one}_newfeatures_o)

EOF
    if [ ${page_len} -eq 0 ]; then
    	have_vm="-DGM_ENABLE_VM=0"
    	# for ethernet addr table, host_name table and unprotected size
	# pretend GM_PAGE_LEN = 4096
    	page_len=4096
    	pho=""
    	pho_compact=""
    	pho_compact512=""
    	pho_newfeatures=""
    else
    	have_vm="-DGM_ENABLE_VM=1"
    	pho="mcp/gm_page_hash.${one}_o mcp/gm_fill_pte_from_host.${one}_o "
    	pho_compact="mcp/gm_page_hash.${one}_compact_o mcp/gm_fill_pte_from_host.${one}_compact_o "
    	pho_compact512="mcp/gm_page_hash.${one}_compact512_o mcp/gm_fill_pte_from_host.${one}_compact512_o "
    	pho_newfeatures="mcp/gm_page_hash.${one}_newfeatures_o mcp/gm_fill_pte_from_host.${one}_newfeatures_o"
    fi
cat <<EOF
%.${one}_o: %.c \$(srcdir)/mcp/genmak \\
 \$(MCP_GENERATED_HEADERS) \$(GENMAK) \$(LANAI_GCC)
	\$(LANAI_GCC) -c -DGM_LANAI_MAJOR_VERSION=${major} ${have_vm} -DGM_PAGE_LEN=${page_len} -DGM_SIZEOF_UP_T=${gm_sizeof_up_t} \$(${LANAI}_CFLAGS) \$< -o \$@ 
%.${one}_compact_o: %.c \$(srcdir)/mcp/genmak \\
 \$(MCP_GENERATED_HEADERS) \$(GENMAK) \$(LANAI_GCC)
	\$(LANAI_GCC) -c -DGM_LANAI_MAJOR_VERSION=${major} ${have_vm} -DGM_PAGE_LEN=${page_len} -DGM_SIZEOF_UP_T=${gm_sizeof_up_t} \$(${LANAI}_CFLAGS) -DGM_MIN_SUPPORTED_SRAM=256 -O2 -fno-inline \$< -o \$@

%.${one}_compact512_o: %.c \$(srcdir)/mcp/genmak \\
 \$(MCP_GENERATED_HEADERS) \$(GENMAK) \$(LANAI_GCC)
	\$(LANAI_GCC) -c -DGM_LANAI_MAJOR_VERSION=${major} ${have_vm} -DGM_PAGE_LEN=${page_len} -DGM_SIZEOF_UP_T=${gm_sizeof_up_t} \$(${LANAI}_CFLAGS) -DGM_MIN_SUPPORTED_SRAM=512 -O3 \$< -o \$@

%.${one}_newfeatures_o: %.c \$(srcdir)/mcp/genmak \\
 \$(MCP_GENERATED_HEADERS) \$(GENMAK)
	\$(LANAI_GCC) -c -DGM_LANAI_MAJOR_VERSION=${major} ${have_vm} -DGM_PAGE_LEN=${page_len} -DGM_SIZEOF_UP_T=${gm_sizeof_up_t} \$(${LANAI}_CFLAGS) -DGM_ENABLE_NEW_FEATURES=1 \$< -o \$@

%.${one}_o: %.s \$(GENMAK) \$(LANAI_GCC)
	\$(LANAI_GCC) -c \$< -o \$@
%.${one}_compact_o: %.s \$(GENMAK) \$(LANAI_GCC)
	\$(LANAI_GCC) -c \$< -o \$@
%.${one}_compact512_o: %.s \$(GENMAK) \$(LANAI_GCC)
	\$(LANAI_GCC) -c \$< -o \$@
%.${one}_newfeatures_o: %.s \$(GENMAK) \$(LANAI_GCC)
	\$(LANAI_GCC) -c \$< -o \$@

mcp/gmcp.${one}: \$(MCP_OBJS:.o=.${one}_o) ${pho} mcp/libc/libc.${one}_a\\
 mcp/gm_lanai_globals.${one}_o \$(GENMAK) \$(LANAI_GCC)
	\$(LANAI_GCC) -nostdlib \$(MCP_OBJS:.o=.${one}_o) ${pho} \$(${LANAI}_LDFLAGS) mcp/libc/libc.${one}_a mcp/gm_lanai_globals.${one}_o -o \$@
mcp/gmcp.${one}_compact: \$(MCP_OBJS:.o=.${one}_compact_o) ${pho_compact}\\
 mcp/libc/libc.${one}_compact_a \\
 mcp/gm_lanai_globals.${one}_compact_o \$(GENMAK) \$(LANAI_GCC)
	\$(LANAI_GCC) -nostdlib \$(MCP_OBJS:.o=.${one}_compact_o) ${pho_compact} \$(${LANAI}_LDFLAGS) mcp/libc/libc.${one}_compact_a mcp/gm_lanai_globals.${one}_compact_o -o \$@

mcp/gmcp.${one}_compact512: \$(MCP_OBJS:.o=.${one}_compact512_o)\\
 ${pho_compact512} mcp/libc/libc.${one}_compact512_a \\
 mcp/gm_lanai_globals.${one}_compact512_o \$(GENMAK) \$(LANAI_GCC)
	\$(LANAI_GCC) -nostdlib \$(MCP_OBJS:.o=.${one}_compact512_o) ${pho_compact512} \$(${LANAI}_LDFLAGS) mcp/libc/libc.${one}_compact512_a mcp/gm_lanai_globals.${one}_compact512_o -o \$@

mcp/gmcp.${one}_newfeatures: \$(MCP_OBJS:.o=.${one}_newfeatures_o)\\
 ${pho_newfeatures} mcp/libc/libc.${one}_newfeatures_a \\
 mcp/gm_lanai_globals.${one}_newfeatures_o \$(GENMAK)
	\$(LANAI_GCC) -nostdlib \$(MCP_OBJS:.o=.${one}_newfeatures_o) ${pho_newfeatures} \$(${LANAI}_LDFLAGS) mcp/libc/libc.${one}_newfeatures_a mcp/gm_lanai_globals.${one}_newfeatures_o -o \$@
EOF
}

################################################################
# main script
################################################################

for main_major in 4 5 6 7 8 9
do
    for main_page_len in 0 4096 8192 16384
    do
        for main_ptr_size in 32b 64b
        do
            support $main_major $main_page_len $main_ptr_size
        done
    done
done
exit 0
