LLVMConfig.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 27 Jan 2016 14:20:58 +0000
changeset 54 a288aced3dd1
parent 51 fd59e27ac31f
permissions -rw-r--r--
LLVM C API Extensions: Fixed DIBuilerCreateFunction() and DIBuilderCreateSubroutineType() for LLVM 3.9 In LLVM 3.9 some parameters to these functions were dropped. The DIBuilder interface has been changed to reflect these changes (i.e., C functions no longer require dropped argument). The LLVM C Extensions library can still be compiled against LLVM 3.8 (via #ifdef), but the API will be different. Also, the Smalltallks bindings will make use of LLVM 3.9 interface. That said, LLVM C API Extensions library may still be used by *other* projects on top of LLVM 3.8, though Smalltalk bindings require LLVM 3.9 from now on.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
    Copyright (C) 2015-now Jan Vrany
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
    This code is not an open-source (yet). You may use this code
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
    for your own experiments and projects, given that:
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
    * all modification to the code will be sent to the
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
      original author for inclusion in future releases
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
    * this is not used in any commercial software
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
    This license is provisional and may (will) change in
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
    a future.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
"{ Package: 'jv:llvm_s' }"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
"{ NameSpace: Smalltalk }"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
Object subclass:#LLVMConfig
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
	instanceVariableNames:''
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
	classVariableNames:'LLVMConfigPath BinDir LibDir LibraryPath'
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
	poolDictionaries:''
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
	category:'LLVM-S-Internal'
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
!
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
!LLVMConfig class methodsFor:'documentation'!
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
copyright
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
    Copyright (C) 2015-now Jan Vrany
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
    This code is not an open-source (yet). You may use this code
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
    for your own experiments and projects, given that:
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
    * all modification to the code will be sent to the
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
      original author for inclusion in future releases
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
    * this is not used in any commercial software
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
    This license is provisional and may (will) change in
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
    a future.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
! !
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
!LLVMConfig class methodsFor:'initialization'!
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
initialize
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
    "Invoked at system start or when the class is dynamically loaded."
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
45
12a2f6470ef4 Config: allow setting path to `llvm-config` via environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    48
    | path |
12a2f6470ef4 Config: allow setting path to `llvm-config` via environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    49
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
    LLVMConfigPath := nil.
45
12a2f6470ef4 Config: allow setting path to `llvm-config` via environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    51
    path := OperatingSystem getEnvironment:'LLVM_CONFIG'.
12a2f6470ef4 Config: allow setting path to `llvm-config` via environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    52
    path notNil ifTrue:[ 
12a2f6470ef4 Config: allow setting path to `llvm-config` via environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    53
        path asFilename isExecutable ifTrue:[
12a2f6470ef4 Config: allow setting path to `llvm-config` via environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    54
            self llvmConfigPath: path.
12a2f6470ef4 Config: allow setting path to `llvm-config` via environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    55
            ^ self
12a2f6470ef4 Config: allow setting path to `llvm-config` via environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    56
        ] ifFalse:[ 
12a2f6470ef4 Config: allow setting path to `llvm-config` via environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    57
            Logger warning:'LLVM_CONFIG environment specified but referred files is not executable. Ignoring'.
12a2f6470ef4 Config: allow setting path to `llvm-config` via environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    58
        ].
12a2f6470ef4 Config: allow setting path to `llvm-config` via environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    59
    ].
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
    OperatingSystem isUNIXlike ifTrue:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
        #('-3.8' '-3.7' '') do:[:ver |
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
            path := OperatingSystem pathOfCommand: 'llvm-config' , ver.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
            path notNil ifTrue:[
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
                self llvmConfigPath: path.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
                ^ self.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
            ]
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
        ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
        ^ self
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
    ].
36
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    70
    self error: 'This operating system is not supported'.
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
45
12a2f6470ef4 Config: allow setting path to `llvm-config` via environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    72
    "Modified: / 25-09-2015 / 03:54:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
!
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
llvmConfigPath: aStringOrFilename
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
    "Set's the path to LLVM config which effectively
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
     defines which version of LLVM to use.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
     Must be called before using any other LLVM API"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
    | path |
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
    path := aStringOrFilename asFilename.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
    path exists ifFalse:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
        self error: '`', path pathName ,'` does not exist'.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
        ^ self.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
    ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
    path isExecutable ifFalse:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
        self error: '`', path pathName ,'` does not executable'.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
        ^ self.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
    ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
    LLVMConfigPath := path.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
    BinDir := LibDir := LibraryPath := nil.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
    "Created: / 07-08-2015 / 13:31:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
! !
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
!LLVMConfig class methodsFor:'accessing'!
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
bindir
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
    "Returns result of `llvm-config --bindir` as Filename"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
    BinDir isNil ifTrue:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
        LLVMConfigPath isNil ifTrue:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
            self error: 'No path to `llvm-config` set, use #llvmConfigPath:'
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
        ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
        BinDir := OperatingSystem getCommandOutputFrom: LLVMConfigPath asString, ' --bindir'
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
    ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
    ^ BinDir
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
    "
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
    LLVMConfig bindir
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
    "
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
    "Created: / 07-08-2015 / 13:29:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
!
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
libdir
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
    "Returns result of `llvm-config --libdir` as Filename"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
    LibDir isNil ifTrue:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
        LLVMConfigPath isNil ifTrue:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
            self error: 'No path to `llvm-config` set, use #llvmConfigPath:'
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
        ].
36
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   124
        LibDir := OperatingSystem getCommandOutputFrom: LLVMConfigPath asString, ' --libdir'.
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   125
        LibDir asFilename exists ifFalse:[ 
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   126
            Logger warning: 'libdir reported by %1 does not exist (%2)' with: LLVMConfigPath with: LibDir.
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   127
            OperatingSystem isUNIXlike ifTrue:[ 
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   128
                "/ Assume Linux here
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   129
                ExternalAddress pointerSize == 8 ifTrue:[ 
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   130
                    "/ Pure guess...
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   131
                    LibDir := '/usr/lib/x86_64-linux-gnu'.
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   132
                ] ifFalse:[ 
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   133
                    LibDir := '/usr/lib/i386-linux-gnu'.
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   134
                ].
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   135
            ] ifFalse:[
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   136
                self error: 'Unsupported platform'.
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   137
            ]
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   138
        ].  
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   139
        LibDir asFilename exists ifFalse:[ 
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   140
            self error: 'Cannot find LLVM libdir'
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   141
        ].
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
    ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
    ^ LibDir
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
    "
36
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   146
    LibDir := nil.
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
    LLVMConfig libdir
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
    "
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
    "Created: / 07-08-2015 / 13:41:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
36
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   151
    "Modified (comment): / 13-09-2015 / 06:59:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
!
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
libraryPath
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
    "Return path to `libLLVM.x.y.z.so` for linking"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
    LibraryPath isNil ifTrue:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
        | vsn libpath |             
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
        LLVMConfigPath isNil ifTrue:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
            self error: 'No path to `llvm-config` set, use #llvmConfigPath:'
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
        ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
        vsn := OperatingSystem getCommandOutputFrom: LLVMConfigPath asString, ' --version'.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
        libpath := self libdir asFilename / ('libLLVM-', vsn , '.so').
36
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   164
        libpath exists ifFalse:[
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   165
            "/ OK, try libLLVM-x.y.so.1
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   166
            libpath := self libdir asFilename / ('libLLVM-', (vsn copyTo: (vsn lastIndexOf: $.) - 1)   , '.so.1').
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   167
            libpath exists ifFalse:[
51
fd59e27ac31f Fixed LLVMConfig to work with hand-compiled LLVM 3.9.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   168
                "/ OK, try libLLCM-x.ysvn.so - LLVM 3.8 source builds use this
fd59e27ac31f Fixed LLVMConfig to work with hand-compiled LLVM 3.9.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   169
                (vsn endsWith: 'svn') ifTrue:[  
fd59e27ac31f Fixed LLVMConfig to work with hand-compiled LLVM 3.9.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   170
                    libpath := self libdir asFilename / ('libLLVM-', (vsn copyTo: (vsn lastIndexOf: $.) - 1)   , 'svn.so').
fd59e27ac31f Fixed LLVMConfig to work with hand-compiled LLVM 3.9.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   171
                ].
fd59e27ac31f Fixed LLVMConfig to work with hand-compiled LLVM 3.9.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   172
                libpath exists ifFalse:[ 
fd59e27ac31f Fixed LLVMConfig to work with hand-compiled LLVM 3.9.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   173
                    self error: 'Could not find libLLVM.x.y.z.so'
fd59e27ac31f Fixed LLVMConfig to work with hand-compiled LLVM 3.9.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   174
                ].
36
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   175
            ].
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
        ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
        LibraryPath := libpath pathName.                                                        
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
    ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
    ^ LibraryPath 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
    "
36
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   183
    LibraryPath := nil.
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
    LLVMConfig libraryPath
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
    "
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
    "Created: / 07-08-2015 / 14:04:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
51
fd59e27ac31f Fixed LLVMConfig to work with hand-compiled LLVM 3.9.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   188
    "Modified: / 26-01-2016 / 15:50:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
! !
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
!LLVMConfig class methodsFor:'documentation'!
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
36
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   193
version_HG
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   194
    ^ '$Changeset: <not expanded> $'
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
! !
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
LLVMConfig initialize!