aboutsummaryrefslogtreecommitdiffstats
path: root/lib/test_server/src/ts_autoconf_vxworks.erl
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
committerErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
commit84adefa331c4159d432d22840663c38f155cd4c1 (patch)
treebff9a9c66adda4df2106dfd0e5c053ab182a12bd /lib/test_server/src/ts_autoconf_vxworks.erl
downloadotp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz
otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2
otp-84adefa331c4159d432d22840663c38f155cd4c1.zip
The R13B03 release.OTP_R13B03
Diffstat (limited to 'lib/test_server/src/ts_autoconf_vxworks.erl')
-rw-r--r--lib/test_server/src/ts_autoconf_vxworks.erl191
1 files changed, 191 insertions, 0 deletions
diff --git a/lib/test_server/src/ts_autoconf_vxworks.erl b/lib/test_server/src/ts_autoconf_vxworks.erl
new file mode 100644
index 0000000000..f4535cd89a
--- /dev/null
+++ b/lib/test_server/src/ts_autoconf_vxworks.erl
@@ -0,0 +1,191 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+%%% Purpose : Autoconf for cross environments.
+
+-module(ts_autoconf_vxworks).
+-export([configure/1]).
+%%% Supported cross platforms:
+-define(PLATFORMS, ["vxworks_cpu32", "vxworks_ppc860", "vxworks_ppc603",
+ "vxworks_sparc", "vxworks_ppc750", "vxworks_simso"]).
+-include("ts.hrl").
+
+%% takes an argument {Target_arch, Target_host} (e.g. {vxworks_ppc860, thorin}).
+configure({Target_arch, Target_host}) ->
+ case variables({Target_arch, Target_host}) of
+ {ok, Vars} ->
+ ts_lib:subst_file("conf_vars.in", "conf_vars", Vars);
+ Error ->
+ Error
+ end.
+
+variables(Cross_spec) ->
+ run_tests(Cross_spec, tests(), []).
+
+run_tests(Cross_spec, [{Prompt, Tester}|Rest], Vars) ->
+ io:format("checking ~s... ", [Prompt]),
+ case catch Tester(Cross_spec, Vars) of
+ {'EXIT', Reason} ->
+ io:format("FAILED~nExit status: ~p~n", [Reason]),
+ {error, auto_conf_failed};
+ {Result, NewVars} ->
+ io:format("~s~n", [lists:concat([Result])]),
+ run_tests(Cross_spec, Rest, NewVars)
+ end;
+run_tests(_Cross_spec, [], Vars) ->
+ {ok, Vars}.
+
+
+%%% The tests.
+
+tests() ->
+ [{"supported target architecture", fun target_architecture/2},
+ {"cross target host to run tests on", fun target_host/2},
+ {"CPU type", fun cpu/2},
+ {"for cross-compiling gcc", fun find_gcc/2},
+ {"for cross-linker", fun find_ld/2},
+ {"for object extension", fun find_obj/2},
+ {"for shared libraries extension", fun find_dll/2},
+ {"for executables extension", fun find_exe/2},
+ {"for make", fun find_make/2}].
+
+target_architecture({Architecture, _Target_host}, Vars) ->
+ case lists:member(Architecture, ?PLATFORMS) of
+ true ->
+ {Architecture, [{host_os, os_type(Architecture)}, {host, Architecture}|Vars]};
+ false ->
+ {"unsupported_platform", Vars}
+ end.
+
+target_host({_Architecture, Target_host}, Vars) ->
+ {Target_host, [{target_host, Target_host} | Vars]}.
+
+cpu({Arch, _Target_host}, Vars) ->
+ Cpu = processor(Arch),
+ {Cpu, [{host_cpu, Cpu}|Vars]}.
+
+find_gcc({Arch, _Target_host}, Vars) ->
+ Gcc = "cc" ++ gnu_suffix(Arch),
+ case os:find_executable(Gcc) of
+ false ->
+ {no, Vars};
+ Path when is_list(Path) ->
+ Cflags = cflags(Arch),
+ {Path, [{'CC', Gcc},
+ {'CFLAGS', Cflags},
+ {'EI_CFLAGS', Cflags},
+ {'ERTS_CFLAGS', Cflags},
+ {'DEFS', ""},
+ {'ERTS_LIBS', ""},
+ {'LIBS', ""},
+ {'SHLIB_CFLAGS', Cflags},
+ {test_c_compiler, "{gnuc, undefined}"} | Vars]}
+ end.
+
+find_ld({Arch, _Target_host}, Vars) ->
+ Linker = "ld" ++ gnu_suffix(Arch),
+ case os:find_executable(Linker) of
+ false ->
+ {no, Vars};
+ Path when is_list(Path) ->
+ {Path, [{'LD', Linker},
+ {'CROSSLDFLAGS', ldflags(Arch)},
+ {'SHLIB_EXTRACT_ALL', ""},
+ {'SHLIB_LD', Linker},
+ {'SHLIB_LDFLAGS', ""},
+ {'SHLIB_LDLIBS', ""} | Vars]}
+ end.
+
+find_obj({Arch, _Target_host}, Vars) ->
+ Obj = obj_ext(Arch),
+ {Obj, [{obj, Obj}|Vars]}.
+
+find_dll({Arch, _Target_host}, Vars) ->
+ Dll = dll_ext(Arch),
+ {Dll, [{'SHLIB_SUFFIX', Dll}|Vars]}.
+
+find_exe({Arch, _Target_host}, Vars) ->
+ Exe = exe_ext(Arch),
+ {Exe, [{exe, Exe}|Vars]}.
+
+find_make(_, Vars) ->
+ {"make", [{make_command, "make"} | Vars]}.
+
+%%% some utility functions
+gnu_suffix(Arch) ->
+ {_, _, _, _, Suffix, _Cpu, _Cflags, _} = cross_data(Arch),
+ Suffix.
+
+processor(Arch) ->
+ {_, _, _, _, _Suffix, Cpu, _Cflags, _} = cross_data(Arch),
+ Cpu.
+
+cflags(Arch) ->
+ {_, _, _, _, _Suffix, _Cpu, Cflags, _} = cross_data(Arch),
+ Cflags.
+
+ldflags(Arch) ->
+ {_, _, _, _, _Suffix, _Cpu, _Cflags, Ldflags} = cross_data(Arch),
+ Ldflags.
+
+os_type(Arch) ->
+ {Os_type, _, _, _, _, _, _, _} = cross_data(Arch),
+ Os_type.
+
+obj_ext(Arch) ->
+ {_, _, Obj, _, _, _, _, _} = cross_data(Arch),
+ Obj.
+
+dll_ext(Arch) ->
+ {_, _, _, Dll, _, _, _, _} = cross_data(Arch),
+ Dll.
+
+exe_ext(Arch) ->
+ {_, Exe, _, _, _, _, _, _} = cross_data(Arch),
+ Exe.
+
+cross_data(Arch) ->
+ case Arch of
+ "vxworks_cpu32" ->
+ {"VxWorks", "", ".o", ".eld", "68k", "cpu32",
+ "-DCPU=CPU32 -DVXWORKS -I$(WIND_BASE)/target/h -mnobitfield -fno-builtin -nostdinc -fvolatile -msoft-float",
+ "-r -d"};
+ "vxworks_ppc860" ->
+ {"VxWorks", "", ".o", ".eld", "ppc", "ppc860",
+ "-DCPU=PPC860 -DVXWORKS -I$(WIND_BASE)/target/h -mcpu=860 -fno-builtin -fno-for-scope -msoft-float -D_GNU_TOOL -nostdinc",
+ "-r -d"};
+ "vxworks_ppc603" ->
+ {"VxWorks", "", ".o", ".eld", "ppc", "ppc603",
+ "-DCPU=PPC603 -DVXWORKS -I$(WIND_BASE)/target/h -fno-builtin -fno-for-scope -D_GNU_TOOL -nostdinc",
+ "-r -d"};
+ "vxworks_sparc" ->
+ %%% The Sparc Architecture is included for private use (i.e. not Tornado 1.0.1 compatible).
+ {"VxWorks", "", ".o", ".eld", "sparc", "sparc",
+ "-DCPU=SPARC -DVXWORKS -I/home/gandalf/bsproj/BS.2/UOS/vw/5.2/h -fno-builtin -nostdinc",
+ "-r -d"};
+ "vxworks_ppc750" ->
+ {"VxWorks", "", ".o", ".eld", "ppc", "ppc604",
+ "-DCPU=PPC604 -DVXWORKS -DTOOL_FAMILY=gnu -DTOOL=gnu -I$(WIND_BASE)/target/h -fno-builtin -fno-for-scope -D_GNU_TOOL",
+ "-r -d"};
+ "vxworks_simso" ->
+ {"VxWorks", "", ".o", ".eld", "simso", "simso",
+ "-DCPU=SIMSPARCSOLARIS -DVXWORKS -DTOOL_FAMILY=gnu -DTOOL=gnu -I$(WIND_BASE)/target/h -I$(WIND_GCC_INCLUDE) -fno-builtin -fno-for-scope -D_GNU_TOOL",
+ "-r -d"}
+
+ end.