Browse Source

full static compilation with musl-libc

musl is now included as a submodule
Jaromil 2 years ago
parent
commit
ac03205f8f
6 changed files with 225 additions and 5 deletions
  1. 3 0
      .gitmodules
  2. 165 0
      LICENSE.txt
  3. 14 3
      Makefile
  4. 35 0
      README.md
  5. 1 0
      lib/musl
  6. 7 2
      src/Makefile

+ 3 - 0
.gitmodules

@@ -4,3 +4,6 @@
4 4
 [submodule "docs/article/writedown"]
5 5
 	path = docs/article/writedown
6 6
 	url = https://github.com/dyne/writedown
7
+[submodule "lib/musl"]
8
+	path = lib/musl
9
+	url = git://git.musl-libc.org/musl

+ 165 - 0
LICENSE.txt

@@ -0,0 +1,165 @@
1
+                   GNU LESSER GENERAL PUBLIC LICENSE
2
+                       Version 3, 29 June 2007
3
+
4
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
5
+ Everyone is permitted to copy and distribute verbatim copies
6
+ of this license document, but changing it is not allowed.
7
+
8
+
9
+  This version of the GNU Lesser General Public License incorporates
10
+the terms and conditions of version 3 of the GNU General Public
11
+License, supplemented by the additional permissions listed below.
12
+
13
+  0. Additional Definitions.
14
+
15
+  As used herein, "this License" refers to version 3 of the GNU Lesser
16
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
17
+General Public License.
18
+
19
+  "The Library" refers to a covered work governed by this License,
20
+other than an Application or a Combined Work as defined below.
21
+
22
+  An "Application" is any work that makes use of an interface provided
23
+by the Library, but which is not otherwise based on the Library.
24
+Defining a subclass of a class defined by the Library is deemed a mode
25
+of using an interface provided by the Library.
26
+
27
+  A "Combined Work" is a work produced by combining or linking an
28
+Application with the Library.  The particular version of the Library
29
+with which the Combined Work was made is also called the "Linked
30
+Version".
31
+
32
+  The "Minimal Corresponding Source" for a Combined Work means the
33
+Corresponding Source for the Combined Work, excluding any source code
34
+for portions of the Combined Work that, considered in isolation, are
35
+based on the Application, and not on the Linked Version.
36
+
37
+  The "Corresponding Application Code" for a Combined Work means the
38
+object code and/or source code for the Application, including any data
39
+and utility programs needed for reproducing the Combined Work from the
40
+Application, but excluding the System Libraries of the Combined Work.
41
+
42
+  1. Exception to Section 3 of the GNU GPL.
43
+
44
+  You may convey a covered work under sections 3 and 4 of this License
45
+without being bound by section 3 of the GNU GPL.
46
+
47
+  2. Conveying Modified Versions.
48
+
49
+  If you modify a copy of the Library, and, in your modifications, a
50
+facility refers to a function or data to be supplied by an Application
51
+that uses the facility (other than as an argument passed when the
52
+facility is invoked), then you may convey a copy of the modified
53
+version:
54
+
55
+   a) under this License, provided that you make a good faith effort to
56
+   ensure that, in the event an Application does not supply the
57
+   function or data, the facility still operates, and performs
58
+   whatever part of its purpose remains meaningful, or
59
+
60
+   b) under the GNU GPL, with none of the additional permissions of
61
+   this License applicable to that copy.
62
+
63
+  3. Object Code Incorporating Material from Library Header Files.
64
+
65
+  The object code form of an Application may incorporate material from
66
+a header file that is part of the Library.  You may convey such object
67
+code under terms of your choice, provided that, if the incorporated
68
+material is not limited to numerical parameters, data structure
69
+layouts and accessors, or small macros, inline functions and templates
70
+(ten or fewer lines in length), you do both of the following:
71
+
72
+   a) Give prominent notice with each copy of the object code that the
73
+   Library is used in it and that the Library and its use are
74
+   covered by this License.
75
+
76
+   b) Accompany the object code with a copy of the GNU GPL and this license
77
+   document.
78
+
79
+  4. Combined Works.
80
+
81
+  You may convey a Combined Work under terms of your choice that,
82
+taken together, effectively do not restrict modification of the
83
+portions of the Library contained in the Combined Work and reverse
84
+engineering for debugging such modifications, if you also do each of
85
+the following:
86
+
87
+   a) Give prominent notice with each copy of the Combined Work that
88
+   the Library is used in it and that the Library and its use are
89
+   covered by this License.
90
+
91
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
92
+   document.
93
+
94
+   c) For a Combined Work that displays copyright notices during
95
+   execution, include the copyright notice for the Library among
96
+   these notices, as well as a reference directing the user to the
97
+   copies of the GNU GPL and this license document.
98
+
99
+   d) Do one of the following:
100
+
101
+       0) Convey the Minimal Corresponding Source under the terms of this
102
+       License, and the Corresponding Application Code in a form
103
+       suitable for, and under terms that permit, the user to
104
+       recombine or relink the Application with a modified version of
105
+       the Linked Version to produce a modified Combined Work, in the
106
+       manner specified by section 6 of the GNU GPL for conveying
107
+       Corresponding Source.
108
+
109
+       1) Use a suitable shared library mechanism for linking with the
110
+       Library.  A suitable mechanism is one that (a) uses at run time
111
+       a copy of the Library already present on the user's computer
112
+       system, and (b) will operate properly with a modified version
113
+       of the Library that is interface-compatible with the Linked
114
+       Version.
115
+
116
+   e) Provide Installation Information, but only if you would otherwise
117
+   be required to provide such information under section 6 of the
118
+   GNU GPL, and only to the extent that such information is
119
+   necessary to install and execute a modified version of the
120
+   Combined Work produced by recombining or relinking the
121
+   Application with a modified version of the Linked Version. (If
122
+   you use option 4d0, the Installation Information must accompany
123
+   the Minimal Corresponding Source and Corresponding Application
124
+   Code. If you use option 4d1, you must provide the Installation
125
+   Information in the manner specified by section 6 of the GNU GPL
126
+   for conveying Corresponding Source.)
127
+
128
+  5. Combined Libraries.
129
+
130
+  You may place library facilities that are a work based on the
131
+Library side by side in a single library together with other library
132
+facilities that are not Applications and are not covered by this
133
+License, and convey such a combined library under terms of your
134
+choice, if you do both of the following:
135
+
136
+   a) Accompany the combined library with a copy of the same work based
137
+   on the Library, uncombined with any other library facilities,
138
+   conveyed under the terms of this License.
139
+
140
+   b) Give prominent notice with the combined library that part of it
141
+   is a work based on the Library, and explaining where to find the
142
+   accompanying uncombined form of the same work.
143
+
144
+  6. Revised Versions of the GNU Lesser General Public License.
145
+
146
+  The Free Software Foundation may publish revised and/or new versions
147
+of the GNU Lesser General Public License from time to time. Such new
148
+versions will be similar in spirit to the present version, but may
149
+differ in detail to address new problems or concerns.
150
+
151
+  Each version is given a distinguishing version number. If the
152
+Library as you received it specifies that a certain numbered version
153
+of the GNU Lesser General Public License "or any later version"
154
+applies to it, you have the option of following the terms and
155
+conditions either of that published version or of any later version
156
+published by the Free Software Foundation. If the Library as you
157
+received it does not specify a version number of the GNU Lesser
158
+General Public License, you may choose any version of the GNU Lesser
159
+General Public License ever published by the Free Software Foundation.
160
+
161
+  If the Library as you received it specifies that a proxy can decide
162
+whether future versions of the GNU Lesser General Public License shall
163
+apply, that proxy's public statement of acceptance of any version is
164
+permanent authorization for you to choose that version for the
165
+Library.

+ 14 - 3
Makefile

@@ -1,5 +1,16 @@
1
+luasand := build/lua_sandbox
2
+musl := build/musl
3
+
1 4
 all:
2 5
 	./build/apply-patches
3
-	cd lib/lua_sandbox && cmake .
4
-	make -C lib/lua_sandbox
5
-	make -C src
6
+	if ! [ -r ${musl}/obj/musl-gcc ]; then mkdir -p ${musl} && cd ${musl} && ../../lib/musl/configure; fi
7
+	make -j2 -C ${musl}
8
+	if ! [ -r ${luasand}/CMakeCache.txt ]; then mkdir -p ${luasand} && cd ${luasand} && CC=../musl/obj/musl-gcc cmake ../../lib/lua_sandbox ; fi
9
+
10
+	make -C ${luasand} luasandbox
11
+	make -C src musl
12
+
13
+clean:
14
+	rm -rf ${luasand}
15
+	rm -rf ${musl}
16
+	make -C src clean

+ 35 - 0
README.md

@@ -0,0 +1,35 @@
1
+# DECODE lang
2
+
3
+Restricted execution environment for LUA based blockchain language
4
+implementation. For more information see [docs](docs/article).
5
+
6
+## Build instructions
7
+
8
+```
9
+git submodule update --init --recursive
10
+make
11
+```
12
+
13
+## Acknowledgements
14
+
15
+Copyright (C) 2017 by Dyne.org foundation, Amsterdam
16
+
17
+Designed, written and maintained by Denis Roio <jaromil@dyne.org>
18
+
19
+Includes code by:
20
+
21
+- Mozilla foundation (lua_sandbox)
22
+- Rich Felker, et al (musl-libc)
23
+
24
+This program is free software: you can redistribute it and/or modify
25
+it under the terms of the GNU Lesser General Public License as
26
+published by the Free Software Foundation, either version 3 of the
27
+License, or (at your option) any later version.
28
+
29
+This program is distributed in the hope that it will be useful, but
30
+WITHOUT ANY WARRANTY; without even the implied warranty of
31
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
32
+General Public License for more details.
33
+
34
+You should have received a copy of the GNU General Public License
35
+along with this program.  If not, see <http://www.gnu.org/licenses/>.

+ 1 - 0
lib/musl

@@ -0,0 +1 @@
1
+Subproject commit 72656157f54c47277b01ec85a6ba7c4084fea6c8

+ 7 - 2
src/Makefile

@@ -5,8 +5,8 @@ VERSION := $(shell cat ../VERSION)
5 5
 
6 6
 CFLAGS  := -I. -I../lib/lua_sandbox/include
7 7
 SOURCES := jutils.o decode-exec.o
8
-LDADD   := ../lib/lua_sandbox/src/libluasandbox.a
9
-LDADD   += ../lib/lua_sandbox/src/util/libluasandboxutil.a
8
+LDADD   := ../build/lua_sandbox/src/libluasandbox.a
9
+LDADD   += ../build/lua_sandbox/src/util/libluasandboxutil.a
10 10
 
11 11
 all: shared
12 12
 
@@ -19,6 +19,11 @@ shared: ${SOURCES} decode-exec
19 19
 
20 20
 #	${CC} ${CFLAGS} ${SOURCES} -o decode-exec ${LDFLAGS} ${LDADD}
21 21
 
22
+musl: CC := ../build/musl/obj/musl-gcc
23
+musl: CFLAGS += -O3 -Wall
24
+musl: LDADD  += ../build/musl/lib/libc.a
25
+musl: LDFLAGS += -static
26
+musl: ${SOURCES} decode-exec
22 27
 
23 28
 # musl:
24 29
 # 	/usr/local/musl/bin/musl-gcc jutils.c decode-exec.c -Os -o decode-exec -DDEBUG=1 -Wall \