mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge pull request #7844 from ethereum/emscriptenCleanups
Internal emscripten build cleanup
This commit is contained in:
		
						commit
						7b038dbd92
					
				| @ -113,6 +113,9 @@ if (("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") OR ("${CMAKE_CXX_COMPILER_ID}" MA | ||||
| 			set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s EXTRA_EXPORTED_RUNTIME_METHODS=['cwrap','addFunction','removeFunction','Pointer_stringify','lengthBytesUTF8','_malloc','stringToUTF8','setValue']") | ||||
| 			# Do not build as a WebAssembly target - we need an asm.js output. | ||||
| 			set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s WASM=0") | ||||
| 
 | ||||
| 			# Disable warnings about not being pure asm.js due to memory growth. | ||||
| 			set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-almost-asm") | ||||
| 		endif() | ||||
| 	endif() | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										195
									
								
								scripts/travis-emscripten/emscripten.jam
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										195
									
								
								scripts/travis-emscripten/emscripten.jam
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,195 @@ | ||||
| # This is a copy of emscripten.jam from https://github.com/tee3/boost-build-emscripten | ||||
| # which is released under the following license: | ||||
| # | ||||
| # Boost Software License - Version 1.0 - August 17th, 2003 | ||||
| # | ||||
| # Permission is hereby granted, free of charge, to any person or organization | ||||
| # obtaining a copy of the software and accompanying documentation covered by | ||||
| # this license (the "Software") to use, reproduce, display, distribute, | ||||
| # execute, and transmit the Software, and to prepare derivative works of the | ||||
| # Software, and to permit third-parties to whom the Software is furnished to | ||||
| # do so, all subject to the following: | ||||
| # | ||||
| # The copyright notices in the Software and this entire statement, including | ||||
| # the above license grant, this restriction and the following disclaimer, | ||||
| # must be included in all copies of the Software, in whole or in part, and | ||||
| # all derivative works of the Software, unless such copies or derivative | ||||
| # works are solely in the form of machine-executable object code generated by | ||||
| # a source language processor. | ||||
| # | ||||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| # FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT | ||||
| # SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE | ||||
| # FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, | ||||
| # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||||
| # DEALINGS IN THE SOFTWARE. | ||||
| # | ||||
| # Boost.Build support for Emscipten. | ||||
| # | ||||
| # @todo add support for dynamic linking | ||||
| # @todo add support for --js-library, --pre-js, and --post-js options | ||||
| 
 | ||||
| import generators ; | ||||
| import type ; | ||||
| import toolset ; | ||||
| import feature ; | ||||
| import common ; | ||||
| import errors ; | ||||
| 
 | ||||
| if [ MATCH (--debug-configuration) : [ modules.peek : ARGV ] ] | ||||
| { | ||||
|   .debug-configuration = true ; | ||||
| } | ||||
| 
 | ||||
| # add an emscripten toolset | ||||
| feature.extend toolset : emscripten ; | ||||
| 
 | ||||
| # extend the target-os list to include emscripten | ||||
| feature.extend target-os : emscripten ; | ||||
| # make emscripten the default target-os when compiling with the emscripten toolset | ||||
| feature.set-default target-os : emscripten ; | ||||
| 
 | ||||
| # initialize the emscripten toolset | ||||
| rule init ( version ? : command * : options * ) | ||||
| { | ||||
|   command = [ common.get-invocation-command emscripten : em++ : $(command) ] ; | ||||
| 
 | ||||
|   root = ; | ||||
|   if $(command) | ||||
|   { | ||||
|     root = [ common.get-absolute-tool-path $(command[-1]) ] ; | ||||
|     root = $(root:P) ; | ||||
| 
 | ||||
|     version ?= [ MATCH "^([0-9.]+)" : [ SHELL \""$(command)\" --version" ] ] ; | ||||
|     if $(version) | ||||
|     { | ||||
|       local actual_version = [ MATCH "^([0-9.]+)" : [ SHELL \""$(command)\" --version" ] ] ; | ||||
|       if $(actual_version) != $(version) | ||||
|       { | ||||
|         errors.user-error "emscripten: detected version $(actual_version) does not match desired $(version)" ; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   else | ||||
|   { | ||||
|     errors.user-error "emscripten: em++ not found" ; | ||||
|   } | ||||
| 
 | ||||
|   local condition = [ common.check-init-parameters emscripten : version $(version) ] ; | ||||
| 
 | ||||
|   common.handle-options emscripten : $(condition) : $(command) : $(options) ; | ||||
| 
 | ||||
|   # @todo this seems to be the right way, but this is a list somehow | ||||
|   toolset.add-requirements <toolset>emscripten:<testing.launcher>node ; | ||||
| 
 | ||||
|   if $(.debug-configuration) | ||||
|   { | ||||
|     ECHO "emscripten: using compiler" $(version) "at" $(root) ; | ||||
|   } | ||||
| 
 | ||||
|   toolset.flags emscripten.compile STDHDRS $(condition) : $(root)/libexec/system/include ; | ||||
|   toolset.flags emscripten.link STDLIBPATH $(condition) : $(root)/libexec/system/lib ; | ||||
|   toolset.flags emscripten AR $(condition) : $(root)/bin/emar ; | ||||
|   toolset.flags emscripten RANLIB $(condition) : $(root)/bin/emranlib ; | ||||
| } | ||||
| 
 | ||||
| type.set-generated-target-suffix EXE : <toolset>emscripten : js ; | ||||
| #type.set-generated-target-suffix STATIC_LIB : <toolset>emscripten : bc ; | ||||
| #type.set-generated-target-suffix SHARED_LIB : <toolset>emscripten : bc ; | ||||
| #type.set-generated-target-suffix OBJ : <toolset>emscripten : bc ; | ||||
| 
 | ||||
| generators.register-linker emscripten.link : OBJ STATIC_LIB : EXE : <toolset>emscripten ; | ||||
| 
 | ||||
| generators.register-archiver emscripten.archive : OBJ : STATIC_LIB : <toolset>emscripten ; | ||||
| 
 | ||||
| generators.register-c-compiler emscripten.compile.c++.preprocess : CPP : PREPROCESSED_CPP : <toolset>emscripten ; | ||||
| generators.register-c-compiler emscripten.compile.c.preprocess   : C   : PREPROCESSED_C   : <toolset>emscripten ; | ||||
| generators.register-c-compiler emscripten.compile.c++ : CPP : OBJ : <toolset>emscripten ; | ||||
| generators.register-c-compiler emscripten.compile.c : C : OBJ : <toolset>emscripten ; | ||||
| 
 | ||||
| # Declare flags | ||||
| 
 | ||||
| toolset.flags emscripten.compile OPTIONS <optimization>off   : -O0 ; | ||||
| toolset.flags emscripten.compile OPTIONS <optimization>speed : -O3 ; | ||||
| toolset.flags emscripten.compile OPTIONS <optimization>space : -Os ; | ||||
| 
 | ||||
| toolset.flags emscripten.compile OPTIONS <inlining>off  : -fno-inline ; | ||||
| toolset.flags emscripten.compile OPTIONS <inlining>on   : -Wno-inline ; | ||||
| toolset.flags emscripten.compile OPTIONS <inlining>full : -finline-functions -Wno-inline ; | ||||
| 
 | ||||
| toolset.flags emscripten.compile OPTIONS <warnings>off : -w ; | ||||
| toolset.flags emscripten.compile OPTIONS <warnings>on  : -Wall ; | ||||
| toolset.flags emscripten.compile OPTIONS <warnings>all : -Wall -pedantic ; | ||||
| toolset.flags emscripten.compile OPTIONS <warnings-as-errors>on : -Werror ; | ||||
| 
 | ||||
| toolset.flags emscripten.compile OPTIONS <debug-symbols>on : -g ; | ||||
| toolset.flags emscripten.compile OPTIONS <profiling>on : -pg ; | ||||
| 
 | ||||
| toolset.flags emscripten.compile.c++ OPTIONS <rtti>off : -fno-rtti ; | ||||
| toolset.flags emscripten.compile.c++ OPTIONS <exception-handling>off : -fno-exceptions ; | ||||
| 
 | ||||
| toolset.flags emscripten.compile USER_OPTIONS <cflags> ; | ||||
| toolset.flags emscripten.compile.c++ USER_OPTIONS <cxxflags> ; | ||||
| toolset.flags emscripten.compile DEFINES <define> ; | ||||
| toolset.flags emscripten.compile INCLUDES <include> ; | ||||
| toolset.flags emscripten.compile.c++ TEMPLATE_DEPTH <c++-template-depth> ; | ||||
| toolset.flags emscripten.compile.fortran USER_OPTIONS <fflags> ; | ||||
| 
 | ||||
| toolset.flags emscripten.link DEFAULTS : -Wno-warn-absolute-paths ; | ||||
| 
 | ||||
| toolset.flags emscripten.link LIBRARY_PATH <library-path> ; | ||||
| toolset.flags emscripten.link FINDLIBS_ST <find-static-library> ; | ||||
| toolset.flags emscripten.link FINDLIBS_SA <find-shared-library> ; | ||||
| toolset.flags emscripten.link LIBRARIES <library-file> ; | ||||
| 
 | ||||
| toolset.flags emscripten.link OPTIONS <linkflags> ; | ||||
| 
 | ||||
| toolset.flags emscripten.archive AROPTIONS <archiveflags> ; | ||||
| 
 | ||||
| rule compile.c++ ( targets * : sources * : properties * ) | ||||
| { | ||||
|     # Some extensions are compiled as C++ by default. For others, we need to | ||||
|     # pass -x c++. We could always pass -x c++ but distcc does not work with it. | ||||
|     if ! $(>:S) in .cc .cp .cxx .cpp .c++ .C | ||||
|     { | ||||
|         LANG on $(<) = "-x c++" ; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| rule compile.c ( targets * : sources * : properties * ) | ||||
| { | ||||
|     LANG on $(<) = "-x c" ; | ||||
| } | ||||
| 
 | ||||
| actions compile.c++ | ||||
| { | ||||
|     "$(CONFIG_COMMAND)" $(LANG) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<:W)" "$(>:W)" | ||||
| } | ||||
| 
 | ||||
| actions compile.c | ||||
| { | ||||
|     "$(CONFIG_COMMAND)" $(LANG) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)" | ||||
| } | ||||
| 
 | ||||
| actions compile.c++.preprocess | ||||
| { | ||||
|     "$(CONFIG_COMMAND)" $(LANG) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" "$(>:W)" -E >"$(<:W)" | ||||
| } | ||||
| 
 | ||||
| actions compile.c.preprocess | ||||
| { | ||||
|     "$(CONFIG_COMMAND)" $(LANG) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" "$(>)" -E >$(<) | ||||
| } | ||||
| 
 | ||||
| actions link | ||||
| { | ||||
|   "$(CONFIG_COMMAND)" $(DEFAULTS) $(OPTIONS) -L"$(LIBRARY_PATH:W)" -L"$(STDLIBPATH:W)" -o "$(<:W)" "$(>:W)" -l"$(LIBRARIES:W)" -l"$(STDLIBRARIES:W)" | ||||
| } | ||||
| 
 | ||||
| RM = [ common.rm-command ] ; | ||||
| actions piecemeal archive | ||||
| { | ||||
|   $(RM) "$(<)" | ||||
|   $(AR) $(AROPTIONS) rc "$(<:W)" "$(>:W)" | ||||
| } | ||||
| @ -29,6 +29,8 @@ | ||||
| 
 | ||||
| set -ev | ||||
| 
 | ||||
| SCRIPT_DIR="$(realpath $(dirname $0))" | ||||
| 
 | ||||
| echo -en 'travis_fold:start:installing_dependencies\\r' | ||||
| test -e boost_1_70_0_install/include/boost/version.hpp || ( | ||||
| rm -rf boost_1_70_0 | ||||
| @ -40,8 +42,7 @@ tar -xzf boost.tar.gz | ||||
| rm boost.tar.gz | ||||
| cd boost_1_70_0 | ||||
| ./bootstrap.sh | ||||
| wget -q 'https://raw.githubusercontent.com/tee3/boost-build-emscripten/master/emscripten.jam' | ||||
| test "$(shasum emscripten.jam)" = "a7e13fc2c1e53b0e079ef440622f879aa6da3049  emscripten.jam" | ||||
| cp "${SCRIPT_DIR}/emscripten.jam" . | ||||
| echo "using emscripten : : em++ ;" >> project-config.jam | ||||
| ) | ||||
| cd .. | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user