docs/multi-ISA.txt
author yippi
Fri, 08 Oct 2010 20:33:54 +0000
changeset 20147 9bd581afe2ae
parent 9576 8b6438adb524
permissions -rw-r--r--
2010-10-07 Brian Cameron <[email protected]> * specs/SUNWgnome-print.spec, patches/libgnomeprint-sun-02-compile.diff: Add patch so that the package compiles with recent compilers. * specs/SUNWgnome-system-monitor.spec: Fix packaging when building without l10n.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9576
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     1
Building the same code for multiple ISAs
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     2
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     3
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     4
1 Introduction
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     5
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     6
  Building both 32-bit and 64-bit variants of the same library is now really
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     7
  easy.  What's more, adding more ISAs, for example SSE2 is also easy.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     8
  This document explains how to change a 32-bit only spec file to support
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     9
  multiple ISAs.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    10
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    11
2 Include files
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    12
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    13
  There are a bunch of include files in the include subdirectory that
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    14
  define macros useful for building code for various ISAs:
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    15
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    16
  base.inc - default macros, used for building 32-bit binaries
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    17
             automatically included by Solaris.inc, but you can
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    18
             include this to reset macros to the defaults after
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    19
	     including one of the other includes below.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    20
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    21
  arch64.inc - macros for building 64-bit binaries: amd64 or sparcv9
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    22
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    23
  x86_sse2.inc - macros for building binaries that make use of Intel SSE2
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    24
             extensions.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    25
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    26
  You need to include Solaris.inc before including any of these files.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    27
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    28
  What they do is, they set macros that define the compiler flags:
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    29
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    30
  %gcc_optflags - C compiler flags for building with gcc
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    31
  %suncc_optflags - C compiler flags for building with Sun Studio cc
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    32
  %gcc_cxx_optflags - C++ compiler flags for building with g++
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    33
  %suncc_cxx_optflags - C++ compiler flags for building with Sun Studio CC
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    34
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    35
  %optflags - C compiler flags for the current C compiler ($CC)
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    36
  %cxx_optflags - C++ compiler flags for the current C++ compiler ($CXX)
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    37
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    38
  and update the directory macros for the given architecture:
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    39
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    40
  %_bindir - set to %{_prefix}/bin/<ISA specific dir>, e.g. /usr/bin/amd64
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    41
  %_libdir - same with /usr/lib/<ISA>
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    42
  %_libexecdir - same as %_libdir
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    43
  %_pkg_config_path - directory that contains the pkgconfig files for
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    44
             this ISA, e.g. /usr/lib/sparcv9/pkgconfig
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    45
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    46
  They also define some handy macros:
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    47
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    48
  can_isaexec - 1 if multiple ISAs are built, 0 if only 32-bit
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    49
                If 1, we can use isaexec to automatically run the
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    50
                executable that best matches the current system, see
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    51
                details in "Using isaexec" below.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    52
  gtk_doc_option - always set to --disable-gtk-doc for non-default
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    53
                ISAs so that we only build the gtk docs for the base ISA.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    54
		In the case of the base ISA, you can continue to the
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    55
		--without-gtk-doc or --with-gtk-doc to control whether
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    56
		or not to build the gtk-doc API documentation
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    57
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    58
3 Using the ISA specific include files
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    59
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    60
  pkgbuild processes the "child" spec files when it reads the %use line.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    61
  Macros defined in the parent spec file before the %use line are visible
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    62
  in the child spec file, macros defined or redefined after the %use line
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    63
  do not affect the child spec file.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    64
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    65
  This means that changing %{_libdir} to /usr/lib/amd64 using %define
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    66
  before the %use line will cause the libdir of the child spec to be
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    67
  /usr/lib/amd64, if it uses the --libdir=%{_libdir} configure option.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    68
  We can also control the compiler flags used in the child spec by
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    69
  defining optflags before the %use line and setting CFLAGS="%optflags"
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    70
  in the child spec.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    71
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    72
  So adding a new ISA of a library is as simple as including the
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    73
  appropriate .inc file (which sets up optflags, _libdir, etc.) and then
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    74
  using %use:
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    75
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    76
    %include Solaris.inc              <- always include before arch64.inc
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    77
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    78
    %ifarch amd64 sparcv9
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    79
    %include arch64.inc               <- sets %optflags, %_libdir, etc.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    80
    %use flac_64 = flac.spec          <- process the child spec
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    81
    %endif
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    82
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    83
    %include base.inc                 <- reset %optflags, %_libdir, etc.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    84
    %use flac = flac.spec             <- process the child spec again
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    85
                                         note that we assign a different
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    86
                                         label from the 64-bit variant
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    87
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    88
  Then we add another section for %prep:
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    89
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    90
    %prep
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    91
    rm -rf %name-%version
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    92
    mkdir %name-%version
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    93
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    94
    %ifarch amd64 sparcv9
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    95
    mkdir %name-%version/%_arch64
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    96
    %flac_64.prep -d %name-%version/%_arch64
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    97
    %endif
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    98
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    99
    mkdir %name-%version/%base_arch
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   100
    %flac.prep -d %name-%version/%base_arch
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   101
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   102
  The above sets up the following directory structure under
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   103
  %_topdir/BUILD (considering an amd64 platform for this example):
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   104
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   105
    .../packages/BUILD
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   106
	   |
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   107
           +-----> SUNWflac-1.1.4
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   108
                       |
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   109
                       +-----> i86
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   110
                       |        |
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   111
                       |        +-----> flac-1.1.4
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   112
                       |
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   113
                       +-----> amd64
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   114
                                |
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   115
                                +-----> flac-1.1.4
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   116
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   117
  Now we need to build both source trees:
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   118
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   119
    %build
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   120
    %ifarch amd64 sparcv9
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   121
    %flac_64.build -d %name-%version/%_arch64
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   122
    %endif
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   123
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   124
    %flac.build -d %name-%version/%base_arch
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   125
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   126
  And then install both trees:
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   127
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   128
    %install
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   129
    rm -rf $RPM_BUILD_ROOT
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   130
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   131
    %ifarch amd64 sparcv9
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   132
    %flac_64.install -d %name-%version/%_arch64
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   133
    %endif
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   134
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   135
    %flac.install -d %name-%version/%base_arch
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   136
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   137
  Finally, update %files to include the 64-bit binaries:
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   138
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   139
    %ifarch amd64 sparcv9
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   140
    %dir %attr (0755, root, bin) %{_bindir}/%{_arch64}
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   141
    %{_bindir}/%{_arch64}/*
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   142
    %dir %attr (0755, root, bin) %{_libdir}/%{_arch64}
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   143
    %{_libdir}/%{_arch64}/lib*.so*
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   144
    %endif
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   145
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   146
  Note that we didn't need to touch base-specs/flac.spec for this.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   147
  We do need to make sure that:
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   148
    - it sets CFLAGS="%optflags" and LDFLAGS="%{_ldflags}"
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   149
    - it passes at least --libdir=%{_libdir} and --bindir=%{_bindir}
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   150
      to configure (for modules using the GNU autotools)
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   151
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   152
4 Using isaexec
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   153
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   154
  There is one more trick we can do: setting up the executables so that
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   155
  the OS will automatically execute the one best suited for the
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   156
  architecture it's running on.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   157
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   158
  To do that, we need to move the base executables into a subdirectory
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   159
  under the bin directory and hard link /usr/lib/isaexec using the name
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   160
  of the executable.  isaexec will look for executables with the same
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   161
  name under the ISA-specific subdirectories, in the order printed by
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   162
  isalist, for example:
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   163
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   164
    laca@ultra20:~> isalist
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   165
    amd64 pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   166
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   167
  I.e. the binary in bin/amd64 will be run if it's found, if not then
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   168
  bin/pentium_pro+mmx, etc. finally i86.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   169
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   170
  In the following example we're moving the 32-bit "flac" binary into the
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   171
  i86 subdir.  Note that the 64-bit version is automatically installed
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   172
  in the amd64 subdir, because arch64.inc sets _bindir to
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   173
  %{_prefix}/bin/amd64.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   174
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   175
  This goes into %install:
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   176
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   177
    %if %can_isaexec
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   178
    mkdir $RPM_BUILD_ROOT%{_bindir}/%{base_isa}
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   179
    cd $RPM_BUILD_ROOT%{_bindir}
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   180
    mv flac metaflac %{base_isa}
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   181
    ln -s ../../usr/lib/isaexec flac
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   182
    ln -s ../../usr/lib/isaexec metaflac
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   183
    %endif
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   184
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   185
  In the %file list, %{_bindir}/flac and %{_bindir}/metaflac must be
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   186
  flagged at hard links using the %hard flag.  You need pkgbuild 1.1.2
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   187
  or later for hard links.
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   188
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   189
    %hard %{_bindir}/flac
8b6438adb524 2007-03-16 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   190
    %hard %{_bindir}/metaflac